mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 02:20:48 +00:00
This patch makes each test print start marker before sync. This will allow us to distinguish the failure before even sync is attempted (CTS_RC_DID_NOT_START, thus probably caused by the previous test) and the failure caused by the hanging partner, in which case the one good and alive will be stuck in sync (and should return _DID_NOT_END or even better _BAD_SYNC once we implement timeout in sync). This patch also: * Adds did_not_start_test to and removes debug_test from meta suite * Consolidates test runner loops into common cts_main_loop * Removes dut_common.h and th_common.h * Removes debug print macro and CTS_DEBUG * Replaces all infinite loops after tests with task_wait_event(-1) * Removes meaningless comments and debug printfs * Removes CTS_TEST_ID_* * Adds sync() to task suite BUG=chromium:736104 BRANCH=none TEST=Run run_ects.sh and verify all tests pass Change-Id: I6ccdf26afac6b8e8cb16483c5d75e4e77e7962f4 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/545176
142 lines
2.8 KiB
C
142 lines
2.8 KiB
C
/* 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.
|
|
*
|
|
* Tasks for scheduling test.
|
|
*/
|
|
|
|
#include "common.h"
|
|
#include "cts_common.h"
|
|
#include "task.h"
|
|
#include "timer.h"
|
|
|
|
static int repeat_count;
|
|
static int wake_count[3];
|
|
|
|
void clean_state(void)
|
|
{
|
|
wake_count[0] = wake_count[1] = wake_count[2] = 0;
|
|
}
|
|
|
|
void task_abc(void *data)
|
|
{
|
|
int task_id = task_get_current();
|
|
int id = task_id - TASK_ID_A;
|
|
task_id_t next = task_id + 1;
|
|
|
|
if (next > TASK_ID_C)
|
|
next = TASK_ID_A;
|
|
|
|
task_wait_event(-1);
|
|
|
|
CPRINTS("%c Starting", 'A' + id);
|
|
cflush();
|
|
|
|
while (1) {
|
|
wake_count[id]++;
|
|
if (id == 2 && wake_count[id] == repeat_count)
|
|
task_set_event(TASK_ID_CTS, TASK_EVENT_WAKE, 1);
|
|
else
|
|
task_set_event(next, TASK_EVENT_WAKE, 1);
|
|
}
|
|
}
|
|
|
|
void task_tick(void *data)
|
|
{
|
|
task_wait_event(-1);
|
|
ccprintf("\n[starting Task T]\n");
|
|
|
|
/* Wake up every tick */
|
|
while (1)
|
|
/* Wait for timer interrupt message */
|
|
usleep(3000);
|
|
}
|
|
|
|
enum cts_rc test_task_switch(void)
|
|
{
|
|
uint32_t event;
|
|
|
|
repeat_count = 3000;
|
|
|
|
task_wake(TASK_ID_A);
|
|
event = task_wait_event(5 * SECOND);
|
|
|
|
if (event != TASK_EVENT_WAKE) {
|
|
CPRINTS("Woken up by unexpected event: 0x%08x", event);
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
if (wake_count[0] != repeat_count || wake_count[1] != repeat_count) {
|
|
CPRINTS("Unexpected counter values: %d %d %d",
|
|
wake_count[0], wake_count[1], wake_count[2]);
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
/* TODO: Verify no tasks are ready, no events are pending. */
|
|
if (*task_get_event_bitmap(TASK_ID_A)
|
|
|| *task_get_event_bitmap(TASK_ID_B)
|
|
|| *task_get_event_bitmap(TASK_ID_C)) {
|
|
CPRINTS("Events are pending");
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
return CTS_RC_SUCCESS;
|
|
}
|
|
|
|
enum cts_rc test_task_priority(void)
|
|
{
|
|
uint32_t event;
|
|
|
|
repeat_count = 2;
|
|
|
|
task_wake(TASK_ID_A);
|
|
task_wake(TASK_ID_C);
|
|
|
|
event = task_wait_event(5 * SECOND);
|
|
|
|
if (event != TASK_EVENT_WAKE) {
|
|
CPRINTS("Woken up by unexpected event: 0x%08x", event);
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
if (wake_count[0] != repeat_count - 1
|
|
|| wake_count[1] != repeat_count - 1) {
|
|
CPRINTS("Unexpected counter values: %d %d %d",
|
|
wake_count[0], wake_count[1], wake_count[2]);
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
/* TODO: Verify no tasks are ready, no events are pending. */
|
|
if (*task_get_event_bitmap(TASK_ID_A)
|
|
|| *task_get_event_bitmap(TASK_ID_B)
|
|
|| *task_get_event_bitmap(TASK_ID_C)) {
|
|
CPRINTS("Events are pending");
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
return CTS_RC_SUCCESS;
|
|
}
|
|
|
|
static void recurse(int x)
|
|
{
|
|
CPRINTS("+%d", x);
|
|
msleep(1);
|
|
recurse(x + 1);
|
|
CPRINTS("-%d", x);
|
|
}
|
|
|
|
enum cts_rc test_stack_overflow(void)
|
|
{
|
|
recurse(0);
|
|
return CTS_RC_FAILURE;
|
|
}
|
|
|
|
#include "cts_testlist.h"
|
|
|
|
void cts_task(void)
|
|
{
|
|
task_wake(TASK_ID_TICK);
|
|
cts_main_loop(tests, "Task");
|
|
task_wait_event(-1);
|
|
}
|