summaryrefslogtreecommitdiff
path: root/test/thermal_falco.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/thermal_falco.c')
-rw-r--r--test/thermal_falco.c874
1 files changed, 0 insertions, 874 deletions
diff --git a/test/thermal_falco.c b/test/thermal_falco.c
deleted file mode 100644
index 885dcfcdfb..0000000000
--- a/test/thermal_falco.c
+++ /dev/null
@@ -1,874 +0,0 @@
-/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Test thermal engine.
- */
-
-#include "battery.h"
-#include "battery_smart.h"
-#include "chipset.h"
-#include "common.h"
-#include "console.h"
-#include "extpower.h"
-#include "extpower_falco.h"
-#include "fan.h"
-#include "hooks.h"
-#include "host_command.h"
-#include "printf.h"
-#include "temp_sensor.h"
-#include "test_util.h"
-#include "thermal.h"
-#include "throttle_ap.h"
-#include "timer.h"
-#include "util.h"
-
-/* Normally private stuff from the modules we're going to test */
-#include "thermal_falco_externs.h"
-
-
-/*****************************************************************************/
-/* Exported data */
-
-struct ec_thermal_config thermal_params[TEMP_SENSOR_COUNT];
-
-/* The tests below make some assumptions. */
-BUILD_ASSERT(TEMP_SENSOR_COUNT == 4);
-BUILD_ASSERT(EC_TEMP_THRESH_COUNT == 3);
-
-/*****************************************************************************/
-/* Mock functions */
-
-static int mock_temp[TEMP_SENSOR_COUNT];
-static int host_throttled;
-static int cpu_throttled;
-static int cpu_shutdown;
-static int fan_pct;
-static int no_temps_read;
-static int mock_id;
-static int mock_ac;
-static int mock_charger_current;
-static int mock_battery_discharge_current;
-
-/* constants to match against throttling sources */
-static const int t_s_therm = (1 << THROTTLE_SRC_THERMAL);
-static const int t_s_power = (1 << THROTTLE_SRC_POWER);
-static const int t_s_both = ((1 << THROTTLE_SRC_THERMAL) |
- (1 << THROTTLE_SRC_POWER));
-
-int dummy_temp_get_val(int idx, int *temp_ptr)
-{
- if (mock_temp[idx] >= 0) {
- *temp_ptr = mock_temp[idx];
- return EC_SUCCESS;
- }
-
- return EC_ERROR_NOT_POWERED;
-}
-
-void chipset_force_shutdown(void)
-{
- cpu_shutdown = 1;
-}
-
-void chipset_throttle_cpu(int throttled)
-{
- cpu_throttled = throttled;
-}
-
-void host_throttle_cpu(int throttled)
-{
- host_throttled = throttled;
-}
-
-void fan_set_percent_needed(int fan, int pct)
-{
- fan_pct = pct;
-}
-
-void smi_sensor_failure_warning(void)
-{
- no_temps_read = 1;
-}
-
-static void change_ac(int val)
-{
- mock_ac = val;
- extpower_interrupt(GPIO_AC_PRESENT);
- sleep(1);
-}
-
-int gpio_get_level(enum gpio_signal signal)
-{
- if (signal == GPIO_AC_PRESENT)
- return mock_ac;
- return 0;
-}
-
-int adc_read_channel(enum adc_channel ch)
-{
- switch (ch) {
- case ADC_AC_ADAPTER_ID_VOLTAGE:
- return mock_id;
- case ADC_CH_CHARGER_CURRENT:
- return mock_charger_current;
- default:
- break;
- }
-
- return 0;
-}
-
-/*****************************************************************************/
-/* Test utilities */
-
-static void set_temps(int t0, int t1, int t2, int t3)
-{
- mock_temp[0] = t0;
- mock_temp[1] = t1;
- mock_temp[2] = t2;
- mock_temp[3] = t3;
-}
-
-static void all_temps(int t)
-{
- set_temps(t, t, t, t);
-}
-
-static void reset_mock_battery(void)
-{
- const struct battery_info *bat_info = battery_get_info();
-
- /* 50% of charge */
- sb_write(SB_RELATIVE_STATE_OF_CHARGE, 50);
- sb_write(SB_ABSOLUTE_STATE_OF_CHARGE, 50);
- /* 25 degree Celsius */
- sb_write(SB_TEMPERATURE, 250 + 2731);
- /* Normal voltage */
- sb_write(SB_VOLTAGE, bat_info->voltage_normal);
- sb_write(SB_CHARGING_VOLTAGE, bat_info->voltage_max);
- sb_write(SB_CHARGING_CURRENT, 4000);
- /* Discharging at 100mAh */
- sb_write(SB_CURRENT, -100);
-}
-DECLARE_HOOK(HOOK_INIT, reset_mock_battery, HOOK_PRIO_DEFAULT);
-
-static void mock_batt(int cur)
-{
- sb_write(SB_CURRENT, -cur); /* discharge current is neg here */
-}
-
-static void reset_mocks(void)
-{
- /* Ignore all sensors */
- memset(thermal_params, 0, sizeof(thermal_params));
-
- /* All sensors report error anyway */
- set_temps(-1, -1 , -1, -1);
-
- /* Reset expectations */
- host_throttled = 0;
- cpu_throttled = 0;
- cpu_shutdown = 0;
- fan_pct = 0;
- no_temps_read = 0;
-
- /* other mocked inputs */
- mock_id = 0;
- mock_ac = 0;
- mock_charger_current = 0;
- mock_battery_discharge_current = 0;
-}
-
-/*****************************************************************************/
-/* Tests */
-
-static int test_init_val(void)
-{
- reset_mocks();
- sleep(2);
-
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
- TEST_ASSERT(fan_pct == 0);
- TEST_ASSERT(no_temps_read);
-
- sleep(2);
-
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
- TEST_ASSERT(fan_pct == 0);
- TEST_ASSERT(no_temps_read);
-
- return EC_SUCCESS;
-}
-
-static int test_sensors_can_be_read(void)
-{
- reset_mocks();
- mock_temp[2] = 100;
-
- sleep(2);
-
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
- TEST_ASSERT(fan_pct == 0);
- TEST_ASSERT(no_temps_read == 0);
-
- return EC_SUCCESS;
-}
-
-
-static int test_one_fan(void)
-{
- reset_mocks();
- thermal_params[2].temp_fan_off = 100;
- thermal_params[2].temp_fan_max = 200;
-
- all_temps(50);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- all_temps(100);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- all_temps(101);
- sleep(2);
- TEST_ASSERT(fan_pct == 1);
-
- all_temps(130);
- sleep(2);
- TEST_ASSERT(fan_pct == 30);
-
- all_temps(150);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- all_temps(170);
- sleep(2);
- TEST_ASSERT(fan_pct == 70);
-
- all_temps(200);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- all_temps(300);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- return EC_SUCCESS;
-}
-
-static int test_two_fans(void)
-{
- reset_mocks();
-
- thermal_params[1].temp_fan_off = 120;
- thermal_params[1].temp_fan_max = 160;
- thermal_params[2].temp_fan_off = 100;
- thermal_params[2].temp_fan_max = 200;
-
- all_temps(50);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- all_temps(100);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- all_temps(101);
- sleep(2);
- TEST_ASSERT(fan_pct == 1);
-
- all_temps(130);
- sleep(2);
- /* fan 2 is still higher */
- TEST_ASSERT(fan_pct == 30);
-
- all_temps(150);
- sleep(2);
- /* now fan 1 is higher: 150 = 75% of [120-160] */
- TEST_ASSERT(fan_pct == 75);
-
- all_temps(170);
- sleep(2);
- /* fan 1 is maxed now */
- TEST_ASSERT(fan_pct == 100);
-
- all_temps(200);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- all_temps(300);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- return EC_SUCCESS;
-}
-
-static int test_all_fans(void)
-{
- reset_mocks();
-
- thermal_params[0].temp_fan_off = 20;
- thermal_params[0].temp_fan_max = 60;
- thermal_params[1].temp_fan_off = 120;
- thermal_params[1].temp_fan_max = 160;
- thermal_params[2].temp_fan_off = 100;
- thermal_params[2].temp_fan_max = 200;
- thermal_params[3].temp_fan_off = 300;
- thermal_params[3].temp_fan_max = 500;
-
- set_temps(1, 1, 1, 1);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- /* Each sensor has its own range */
- set_temps(40, 0, 0, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- set_temps(0, 140, 0, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- set_temps(0, 0, 150, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- set_temps(0, 0, 0, 400);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- set_temps(60, 0, 0, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- set_temps(0, 160, 0, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- set_temps(0, 0, 200, 0);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- set_temps(0, 0, 0, 500);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- /* But sensor 0 needs the most cooling */
- all_temps(20);
- sleep(2);
- TEST_ASSERT(fan_pct == 0);
-
- all_temps(21);
- sleep(2);
- TEST_ASSERT(fan_pct == 2);
-
- all_temps(30);
- sleep(2);
- TEST_ASSERT(fan_pct == 25);
-
- all_temps(40);
- sleep(2);
- TEST_ASSERT(fan_pct == 50);
-
- all_temps(50);
- sleep(2);
- TEST_ASSERT(fan_pct == 75);
-
- all_temps(60);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- all_temps(65);
- sleep(2);
- TEST_ASSERT(fan_pct == 100);
-
- return EC_SUCCESS;
-}
-
-static int test_one_limit(void)
-{
- reset_mocks();
- thermal_params[2].temp_host[EC_TEMP_THRESH_WARN] = 100;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HIGH] = 200;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HALT] = 300;
-
- all_temps(50);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(100);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(101);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(100);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(99);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(199);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(200);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(201);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(200);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(199);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(99);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(201);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(99);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- all_temps(301);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 1);
-
- /* We probably won't be able to read the CPU temp while shutdown,
- * so nothing will change. */
- all_temps(-1);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- /* cpu_shutdown is only set for testing purposes. The thermal task
- * doesn't do anything that could clear it. */
-
- all_temps(50);
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
-
- return EC_SUCCESS;
-}
-
-static int test_several_limits(void)
-{
- reset_mocks();
-
- thermal_params[1].temp_host[EC_TEMP_THRESH_WARN] = 150;
- thermal_params[1].temp_host[EC_TEMP_THRESH_HIGH] = 200;
- thermal_params[1].temp_host[EC_TEMP_THRESH_HALT] = 250;
-
- thermal_params[2].temp_host[EC_TEMP_THRESH_WARN] = 100;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HIGH] = 200;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HALT] = 300;
-
- thermal_params[3].temp_host[EC_TEMP_THRESH_WARN] = 20;
- thermal_params[3].temp_host[EC_TEMP_THRESH_HIGH] = 30;
- thermal_params[3].temp_host[EC_TEMP_THRESH_HALT] = 40;
-
- set_temps(500, 100, 150, 10);
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm); /* 1=low, 2=warn, 3=low */
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- set_temps(500, 50, -1, 10); /* 1=low, 2=X, 3=low */
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- set_temps(500, 170, 210, 10); /* 1=warn, 2=high, 3=low */
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- set_temps(500, 100, 50, 40); /* 1=low, 2=low, 3=high */
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- set_temps(500, 100, 50, 41); /* 1=low, 2=low, 3=shutdown */
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 1);
-
- all_temps(0); /* reset from shutdown */
- sleep(2);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
-
-
- return EC_SUCCESS;
-}
-
-static int test_batt(void)
-{
- struct adapter_limits *l;
- int longtime;
- int i;
-
- reset_mocks();
- /* We're assuming two limits, mild and urgent. */
- TEST_ASSERT(NUM_BATT_THRESHOLDS == 2);
- /* Find out which is which, only use the lower one */
- if (batt_limits[0].hi_val > batt_limits[1].hi_val)
- l = &batt_limits[1];
- else
- l = &batt_limits[0];
-
- /* Find a time longer than all sample count limits */
- for (i = longtime = 0; i < NUM_BATT_THRESHOLDS; i++)
- longtime = MAX(longtime,
- MAX(batt_limits[i].lo_cnt,
- batt_limits[i].hi_cnt));
- longtime += 2;
-
- /* On AC, but this doesn't actually matter for this test */
- mock_batt(0);
- change_ac(1);
-
- TEST_ASSERT(ap_is_throttled == 0);
- change_ac(0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* reset, by staying low for a long time */
- usleep(EXTPOWER_FALCO_POLL_PERIOD * longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* mock_batt() specifies the DISCHARGE current. Charging
- * should do nothing, no matter how high. */
- mock_batt(-1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* midrange for a long time shouldn't do anything */
- mock_batt((l->lo_val + l->hi_val) / 2);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* above high limit for not quite long enough */
- mock_batt(l->hi_val + 1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * (l->hi_cnt - 1));
- TEST_ASSERT(l->count != 0);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* drop below the high limit once */
- mock_batt(l->hi_val - 1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * 1);
- TEST_ASSERT(l->count == 0);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* now back up */
- mock_batt(l->hi_val + 1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * (l->hi_cnt - 1));
- TEST_ASSERT(l->count != 0);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* one more ought to do it */
- usleep(EXTPOWER_FALCO_POLL_PERIOD * 1);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
-
- /* going midrange for a long time shouldn't change anything */
- mock_batt((l->lo_val + l->hi_val) / 2);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
-
- /* charge for not quite long enough */
- mock_batt(-1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * (l->lo_cnt - 1));
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
-
- /* back above the low limit once */
- mock_batt(l->lo_val + 1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * 1);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
-
- /* now charge again - that should have reset the count */
- mock_batt(-1);
- usleep(EXTPOWER_FALCO_POLL_PERIOD * (l->lo_cnt - 1));
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
-
- /* One more ought to do it */
- usleep(EXTPOWER_FALCO_POLL_PERIOD * 1);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- return EC_SUCCESS;
-}
-
-static int test_several_limits_with_batt(void)
-{
- struct adapter_limits *l;
- int longtime;
- int i;
-
- /* We're assuming two limits, mild and urgent. */
- TEST_ASSERT(NUM_BATT_THRESHOLDS == 2);
- /* Find out which is which, only use the lower one */
- if (batt_limits[0].hi_val > batt_limits[1].hi_val)
- l = &batt_limits[1];
- else
- l = &batt_limits[0];
-
- /* Find a time longer than all sample count limits */
- for (i = longtime = 0; i < NUM_BATT_THRESHOLDS; i++)
- longtime = MAX(longtime,
- MAX(batt_limits[i].lo_cnt,
- batt_limits[i].hi_cnt));
- longtime += 2;
- longtime *= EXTPOWER_FALCO_POLL_PERIOD;
-
- reset_mocks();
-
- /* Set some thermal limits */
- thermal_params[1].temp_host[EC_TEMP_THRESH_WARN] = 150;
- thermal_params[1].temp_host[EC_TEMP_THRESH_HIGH] = 200;
- thermal_params[1].temp_host[EC_TEMP_THRESH_HALT] = 250;
-
- thermal_params[2].temp_host[EC_TEMP_THRESH_WARN] = 100;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HIGH] = 200;
- thermal_params[2].temp_host[EC_TEMP_THRESH_HALT] = 300;
-
- thermal_params[3].temp_host[EC_TEMP_THRESH_WARN] = 20;
- thermal_params[3].temp_host[EC_TEMP_THRESH_HIGH] = 30;
- thermal_params[3].temp_host[EC_TEMP_THRESH_HALT] = 40;
-
-
- /* On AC, charging */
- mock_batt(-1);
- all_temps(0);
- change_ac(1);
- usleep(longtime);
- /* Everything is ready */
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
-
- set_temps(500, 100, 150, 10);
- usleep(longtime);
- TEST_ASSERT(host_throttled == t_s_therm); /* 1=low, 2=warn, 3=low */
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_both); /* 1=low, 2=warn, 3=low */
- TEST_ASSERT(cpu_shutdown == 0);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_therm); /* 1=low, 2=warn, 3=low */
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
-
- set_temps(500, 50, -1, 10); /* 1=low, 2=X, 3=low */
- usleep(longtime);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_power);
- TEST_ASSERT(cpu_shutdown == 0);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(cpu_shutdown == 0);
-
-
- set_temps(500, 170, 210, 10); /* 1=warn, 2=high, 3=low */
- sleep(2);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(host_throttled == t_s_both);
- TEST_ASSERT(cpu_shutdown == 0);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
-
- set_temps(500, 100, 50, 40); /* 1=low, 2=low, 3=high */
- usleep(longtime);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(host_throttled == t_s_both);
- TEST_ASSERT(cpu_shutdown == 0);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 0);
-
-
- set_temps(500, 100, 50, 41); /* 1=low, 2=low, 3=shutdown */
- usleep(longtime);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 1);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(host_throttled == t_s_both);
- TEST_ASSERT(cpu_shutdown == 1);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_therm);
- TEST_ASSERT(cpu_throttled == t_s_therm);
- TEST_ASSERT(cpu_shutdown == 1);
-
-
- all_temps(0);
- usleep(longtime);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
-
- /* battery up and down */
- mock_batt(l->hi_val + 1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 1);
- TEST_ASSERT(ap_is_throttled);
- TEST_ASSERT(cpu_throttled == 0);
- TEST_ASSERT(host_throttled == t_s_power);
- mock_batt(-1);
- usleep(longtime);
- TEST_ASSERT(l->triggered == 0);
- TEST_ASSERT(ap_is_throttled == 0);
- TEST_ASSERT(host_throttled == 0);
- TEST_ASSERT(cpu_throttled == 0);
-
- return EC_SUCCESS;
-}
-
-
-void run_test(void)
-{
- test_chipset_on();
-
- RUN_TEST(test_init_val);
- RUN_TEST(test_sensors_can_be_read);
- RUN_TEST(test_one_fan);
- RUN_TEST(test_two_fans);
- RUN_TEST(test_all_fans);
-
- RUN_TEST(test_one_limit);
- RUN_TEST(test_several_limits);
-
- RUN_TEST(test_batt);
- RUN_TEST(test_several_limits_with_batt);
-
- test_print_result();
-}