summaryrefslogtreecommitdiff
path: root/zephyr/test/tasks/main.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /zephyr/test/tasks/main.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14536.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'zephyr/test/tasks/main.c')
-rw-r--r--zephyr/test/tasks/main.c298
1 files changed, 0 insertions, 298 deletions
diff --git a/zephyr/test/tasks/main.c b/zephyr/test/tasks/main.c
deleted file mode 100644
index 91216b9518..0000000000
--- a/zephyr/test/tasks/main.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/* Copyright 2020 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.
- */
-
-#include <kernel.h>
-#include <stdbool.h>
-#include <ztest.h>
-
-#include "ec_tasks.h"
-#include "task.h"
-#include "timer.h"
-
-/* Second for platform/ec task API (in microseconds). */
-#define TASK_SEC(s) (s * 1000 * 1000)
-
-K_SEM_DEFINE(task_done1, 0, 1);
-K_SEM_DEFINE(task_done2, 0, 1);
-K_SEM_DEFINE(test_ready1, 0, 1);
-K_SEM_DEFINE(test_ready2, 0, 1);
-
-static void (*task1)(void);
-static void (*task2)(void);
-
-static void run_test(void (*task1_run)(void), void (*task2_run)(void))
-{
- task1 = task1_run;
- task2 = task2_run;
- k_sem_give(&test_ready1);
- k_sem_give(&test_ready2);
- k_sem_take(&task_done1, K_FOREVER);
- k_sem_take(&task_done2, K_FOREVER);
-}
-
-void task1_entry(void *p)
-{
- while (1) {
- k_sem_take(&test_ready1, K_FOREVER);
- task1();
- k_sem_give(&task_done1);
- }
-}
-
-void task2_entry(void *p)
-{
- while (1) {
- k_sem_take(&test_ready2, K_FOREVER);
- task2();
- k_sem_give(&task_done2);
- }
-}
-
-/*
- * Unlike Tasks 1 & 2, it is allowed to run Task 3 more than once per
- * call to run_test(). It will call task3_entry_func if set, and wait
- * for the next event. This is useful to test things like timers,
- * which you are expecting the event to fire at some point in the
- * future, and you want to test that it happens.
- */
-static void (*task3_entry_func)(uint32_t event_mask);
-
-void task3_entry(void *p)
-{
- uint32_t events = 0;
-
- for (;;) {
- if (task3_entry_func)
- task3_entry_func(events);
- events = task_wait_event(-1);
- }
-}
-
-static void set_event_before_task_start1(void)
-{
- const uint32_t events = task_wait_event(TASK_SEC(2));
-
- zassert_equal(events, 0xAAAA, "Should have 0xAAAA events");
-}
-
-static void set_event_before_task_start2(void)
-{
- /* Do nothing */
-}
-
-static void test_set_event_before_task_start(void)
-{
- /* Send event before tasks start */
- task_set_event(TASK_ID_TASK_1, 0xAAAA);
-
- start_ec_tasks();
-
- run_test(set_event_before_task_start1, set_event_before_task_start2);
-}
-
-static void task_get_current1(void)
-{
- zassert_equal(task_get_current(), TASK_ID_TASK_1, "ID matches");
-}
-
-static void task_get_current2(void)
-{
- zassert_equal(task_get_current(), TASK_ID_TASK_2, "ID matches");
-}
-
-static void test_task_get_current(void)
-{
- run_test(&task_get_current1, &task_get_current2);
-}
-
-
-static void timeout1(void)
-{
- const uint32_t start_ms = k_uptime_get();
- const uint32_t events = task_wait_event(TASK_SEC(2));
- const uint32_t end_ms = k_uptime_get();
-
- zassert_equal(events, TASK_EVENT_TIMER, "Should have timeout event");
- zassert_within(end_ms - start_ms, 2000, 100, "Timeout for 2 seconds");
-}
-
-static void timeout2(void)
-{
- /* Do nothing */
-}
-
-static void test_timeout(void)
-{
- run_test(&timeout1, &timeout2);
-}
-
-/*
- * Timer test:
- * 1. Task 1 arms a timer for Task 3 in expiring 2 seconds.
- * 2. Task 2 does nothing.
- * 3. Task 3 validates that the it receives a TASK_EVENT_TIMER event
- * 2 seconds after Task 1 armed the timer (within 100ms
- * tolerance).
- */
-static timestamp_t timer_armed_at;
-K_SEM_DEFINE(check_timer_finished, 0, 1);
-
-static void check_timer(uint32_t event_mask)
-{
- timestamp_t now = get_time();
-
- zassert_equal(event_mask & TASK_EVENT_TIMER, TASK_EVENT_TIMER,
- "Timer event mask should be set");
- zassert_within(now.val - timer_armed_at.val, TASK_SEC(2),
- TASK_SEC(1) / 10,
- "Timer should expire at 2 seconds from arm time");
- k_sem_give(&check_timer_finished);
-}
-
-static void timer_task_1(void)
-{
- timestamp_t timer_timeout;
-
- timer_armed_at = get_time();
-
- timer_timeout.val = timer_armed_at.val + TASK_SEC(2);
-
- task3_entry_func = check_timer;
- zassert_equal(timer_arm(timer_timeout, TASK_ID_TASK_3), EC_SUCCESS,
- "Setting timer should succeed");
-}
-
-static void timer_task_2(void)
-{
- /* Do nothing */
-}
-
-static void test_timer(void)
-{
- run_test(timer_task_1, timer_task_2);
- zassert_equal(k_sem_take(&check_timer_finished, K_SECONDS(4 * 1000)), 0,
- "Task 3 did not finish within timeout");
- zassert_equal(task3_entry_func, check_timer,
- "check_timer should have been enabled");
- task3_entry_func = NULL;
-}
-
-static void event_delivered1(void)
-{
- const uint32_t start_ms = k_uptime_get();
- const uint32_t events = task_wait_event(-1);
- const uint32_t end_ms = k_uptime_get();
-
- zassert_equal(events, 0x1234, "Verify event bits");
- zassert_within(end_ms - start_ms, 5000, 100, "Waited for 5 seconds");
-}
-
-static void event_delivered2(void)
-{
- k_sleep(K_SECONDS(5));
-
- task_set_event(TASK_ID_TASK_1, 0x1234);
-}
-
-static void test_event_delivered(void)
-{
- run_test(&event_delivered1, &event_delivered2);
-}
-
-
-static void event_mask_not_delivered1(void)
-{
- task_set_event(TASK_ID_TASK_2, 0x007F);
-}
-
-static void event_mask_not_delivered2(void)
-{
- const uint32_t start_ms = k_uptime_get();
- const uint32_t events = task_wait_event_mask(0x0080, TASK_SEC(7));
- const uint32_t end_ms = k_uptime_get();
-
- zassert_equal(events, TASK_EVENT_TIMER, "Should have timeout event");
- zassert_within(end_ms - start_ms, 7000, 100, "Timeout for 7 seconds");
-
- const uint32_t leftover_events = task_wait_event(0);
-
- zassert_equal(leftover_events, 0x007F, "All events should be waiting");
-}
-
-static void test_event_mask_not_delivered(void)
-{
- run_test(&event_mask_not_delivered1, &event_mask_not_delivered2);
-}
-
-
-static void event_mask_extra1(void)
-{
- k_sleep(K_SECONDS(1));
-
- task_set_event(TASK_ID_TASK_2, 0x00FF);
-}
-
-static void event_mask_extra2(void)
-{
- const uint32_t start_ms = k_uptime_get();
- const uint32_t events = task_wait_event_mask(0x0001, TASK_SEC(10));
- const uint32_t end_ms = k_uptime_get();
-
- zassert_equal(events, 0x0001, "Verify only waited for event");
- zassert_within(end_ms - start_ms, 1000, 100, "Timeout for 1 second");
-
- const uint32_t leftover_events = task_wait_event(0);
-
- zassert_equal(leftover_events, 0x00FE, "All events should be waiting");
-}
-
-static void test_event_mask_extra(void)
-{
- run_test(&event_mask_extra1, &event_mask_extra2);
-}
-
-
-static void empty_set_mask1(void)
-{
- k_sleep(K_SECONDS(1));
- /*
- * It is generally invalid to set a 0 event, but this simulates a race
- * condition and exercises fallback code in task_wait_event
- */
- task_set_event(TASK_ID_TASK_2, 0);
- k_sleep(K_SECONDS(1));
- task_set_event(TASK_ID_TASK_2, 0x1234);
-}
-
-static void empty_set_mask2(void)
-{
- const uint32_t start_ms = k_uptime_get();
- const uint32_t events = task_wait_event_mask(0x1234, TASK_SEC(10));
- const uint32_t end_ms = k_uptime_get();
-
- zassert_equal(events, 0x1234, "Verify only waited for event");
- zassert_within(end_ms - start_ms, 2000, 100, "Timeout for 2 seconds");
-}
-
-static void test_empty_set_mask(void)
-{
- run_test(&empty_set_mask1, &empty_set_mask2);
-}
-
-
-void test_main(void)
-{
- /* Note that test_set_event_before_task_start calls start_ec_tasks */
- ztest_test_suite(test_task_shim,
- ztest_unit_test(test_set_event_before_task_start),
- ztest_unit_test(test_task_get_current),
- ztest_unit_test(test_timeout),
- ztest_unit_test(test_timer),
- ztest_unit_test(test_event_delivered),
- ztest_unit_test(test_event_mask_not_delivered),
- ztest_unit_test(test_event_mask_extra),
- ztest_unit_test(test_empty_set_mask));
- ztest_run_test_suite(test_task_shim);
-}