Skip to content

Commit

Permalink
FW: Test mgmt refactor: Switch to using augmented test_rt_info.
Browse files Browse the repository at this point in the history
Instead of struct test. struct test_rt_info provides additional runtime
information on the test status, such as indicates whether the test is
enabled or disabled.

Signed-off-by: Arzhan Kinzhalin <arzhan.i.kinzhalin@intel.com>
  • Loading branch information
busykai committed Mar 21, 2024
1 parent 2e9c606 commit bb448d6
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 42 deletions.
8 changes: 4 additions & 4 deletions framework/sandstone.cpp
Expand Up @@ -3639,13 +3639,13 @@ int main(int argc, char **argv)
/* Add all the tests we were told to enable. */
if (enabled_tests.size()) {
for (char *name : enabled_tests) {
auto tests = test_set->enable(name);
if (!tests.size() && !sApp->ignore_unknown_tests) {
auto tis = test_set->enable(name);
if (!tis.size() && !sApp->ignore_unknown_tests) {
fprintf(stderr, "%s: Cannot find matching tests for '%s'\n", program_invocation_name, name);
exit(EX_USAGE);
}
for (struct test *t : tests) {
prepare_test(t);
for (auto ti : tis) {
prepare_test(ti.test);
}
}
}
Expand Down
44 changes: 20 additions & 24 deletions framework/sandstone_tests.cpp
Expand Up @@ -73,57 +73,53 @@ SandstoneTestSet::SandstoneTestSet(bool all_tests, bool is_selftest) : is_selfte
if (!all_tests) return;
std::span<struct test> source = !is_selftest ? regular_tests : selftests;
for (struct test &test : source) {
struct test_info *ti = new struct test_info;
ti->st = TEST_ENABLED;
ti->test = &test;
struct test_rt_info ti;
ti.st = TEST_ENABLED;
ti.test = &test;
test_map[test.id] = ti;
test_set.push_back(&test);
}
};

struct test *SandstoneTestSet::get_by_name(const char *name)
{
try {
return test_map.at(name)->test;
} catch (const std::out_of_range &e) {
return nullptr;
}
return test_map.contains(name) ? test_map[name].test : nullptr;
}

SandstoneTestSet::TestSet SandstoneTestSet::enable(const char *name) {
std::vector<struct test *> res = lookup(name);
for (auto t : res) {
struct test_info *ti;
std::vector<struct test_rt_info> SandstoneTestSet::enable(const char *name) {
std::vector<struct test_rt_info> res;
std::vector<struct test *> tests = lookup(name);
for (auto t : tests ) {
struct test_rt_info ti;
if (!test_map.contains(t->id)) {
ti = new struct test_info;
ti->st = TEST_ENABLED;
ti->test = t;
ti.st = TEST_ENABLED;
ti.test = t;
test_map[t->id] = ti;
} else {
ti = test_map[t->id];
ti->st = TEST_ENABLED;
ti.st = TEST_ENABLED;
}
res.push_back(ti);
test_set.push_back(t);
}
return res;
}

SandstoneTestSet::TestSet SandstoneTestSet::disable(const char *name) {
std::vector<struct test *> res;
std::vector<struct test_rt_info> SandstoneTestSet::disable(const char *name) {
std::vector<struct test_rt_info> res;
std::vector tests = lookup(name);
for (auto t : tests) {
struct test_info *ti;
struct test_rt_info ti;
if (test_map.contains(t->id)) {
test_map[t->id]->st = TEST_DISABLED;
test_map[t->id].st = TEST_DISABLED;
} else {
ti = new struct test_info;
ti->st = TEST_DISABLED;
ti->test = t;
ti.st = TEST_DISABLED;
ti.test = t;
test_map[t->id] = ti;
}
for (auto it = test_set.begin(); it != test_set.end(); ) {
if (*it == t) {
res.push_back(t);
res.push_back(ti);
test_set.erase(it);
} else {
++it;
Expand Down
33 changes: 19 additions & 14 deletions framework/sandstone_tests.h
Expand Up @@ -23,6 +23,16 @@ extern struct test __stop_tests;

extern struct test mce_test;

typedef enum {
TEST_ENABLED,
TEST_DISABLED,
} test_rt_status;

struct test_rt_info {
struct test *test;
test_rt_status st;
};

#ifdef __cplusplus

__attribute__((weak)) extern const struct test_group __start_test_group;
Expand Down Expand Up @@ -50,9 +60,14 @@ class SandstoneTestSet
TestSet::iterator end () { return test_set.end(); };

struct test *get_by_name(const char *name);
TestSet disable(const char *name);
TestSet enable(const char *name);
inline bool is_disabled(const char *name) { return test_map.contains(name) ? (test_map[name]->st == TEST_DISABLED) : true; };

std::vector<struct test_rt_info> disable(const char *name);
struct test_rt_info disable(struct test *t);

std::vector<struct test_rt_info> enable(const char *name);
struct test_rt_info enable(struct test *t);

inline bool is_disabled(const char *name) { return test_map.contains(name) ? (test_map[name].st == TEST_DISABLED) : true; };
inline bool is_enabled(const char *name) { return !is_disabled(name); };

TestSet add_test_list(const char *name);
Expand All @@ -67,17 +82,7 @@ class SandstoneTestSet
bool is_selftest;
TestSet test_set;

typedef enum {
TEST_ENABLED,
TEST_DISABLED,
} test_rt_status;

struct test_info {
struct test *test;
test_rt_status st;
};

std::map<const char *, struct test_info *, cstr_cmp> test_map;
std::map<const char *, struct test_rt_info, cstr_cmp> test_map;
};


Expand Down

0 comments on commit bb448d6

Please sign in to comment.