From bd3b84e353cb8dd2ce8eccce0a182b9f3b7e555a Mon Sep 17 00:00:00 2001 From: Chris Freehill Date: Sat, 9 Feb 2019 12:18:49 -0600 Subject: [PATCH] Add dont_fail option to not fail entire test on a single failure [ROCm/rocm_smi_lib commit: dd450e963ced3cf7a1b3ce0a593e56c31e34aa0f] --- projects/rocm-smi-lib/src/rocm_smi.cc | 7 ++++++- .../tests/rocm_smi_test/functional/rsmi_sanity.cc | 12 +++++++++++- projects/rocm-smi-lib/tests/rocm_smi_test/main.cc | 3 ++- .../rocm-smi-lib/tests/rocm_smi_test/test_base.h | 8 +++++++- .../tests/rocm_smi_test/test_common.cc | 14 +++++++++++--- .../rocm-smi-lib/tests/rocm_smi_test/test_common.h | 1 + 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/projects/rocm-smi-lib/src/rocm_smi.cc b/projects/rocm-smi-lib/src/rocm_smi.cc index 7e0f13e68c..aa1a8f8e08 100755 --- a/projects/rocm-smi-lib/src/rocm_smi.cc +++ b/projects/rocm-smi-lib/src/rocm_smi.cc @@ -551,7 +551,12 @@ static rsmi_status_t get_frequencies(amd::smi::DevInfoTypes type, } } - assert(f->current < f->num_supported); + // Some older drivers will not have the current frequency set + // assert(f->current < f->num_supported); + if (f->current >= f->num_supported) { + return RSMI_STATUS_NOT_SUPPORTED; + } + return RSMI_STATUS_SUCCESS; CATCH } diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/rsmi_sanity.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/rsmi_sanity.cc index 569375a542..d5539b8b59 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/functional/rsmi_sanity.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/functional/rsmi_sanity.cc @@ -56,6 +56,7 @@ static const uint32_t kNumBufferElements = 256; static uint32_t gVerbosity = 3; +static bool gDontFail = false; #define DISPLAY_RSMI_ERR(RET) { \ if (RET != RSMI_STATUS_SUCCESS) { \ @@ -77,7 +78,15 @@ static uint32_t gVerbosity = 3; #define CHK_ERR_ASRT(RET) { \ DISPLAY_RSMI_ERR(RET) \ - ASSERT_EQ((RET), RSMI_STATUS_SUCCESS); \ + if (gDontFail && ((RET) != RSMI_STATUS_SUCCESS)) { \ + std::cout << "========> TEST FAILURE."; \ + DISPLAY_RSMI_ERR(RET); \ + std::cout << \ + "Abort is over-ridden due to dont_fail command line option." \ + << std::endl; \ + } else { \ + ASSERT_EQ(RSMI_STATUS_SUCCESS, (RET)); \ + } \ } #define CHK_RSMI_PERM_ERR(RET) { \ @@ -599,6 +608,7 @@ void TestSanity::SetUp(void) { TestBase::SetUp(); gVerbosity = verbosity(); + gDontFail = dont_fail(); err = rsmi_init(0); ASSERT_EQ(err, RSMI_STATUS_SUCCESS); diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/main.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/main.cc index 20f13ec56a..6c30ccb94e 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/main.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/main.cc @@ -60,6 +60,7 @@ static void SetFlags(TestBase *test) { test->set_num_iteration(sRSMIGlvalues->num_iterations); test->set_verbosity(sRSMIGlvalues->verbosity); + test->set_dont_fail(sRSMIGlvalues->dont_fail); } @@ -113,7 +114,7 @@ int main(int argc, char** argv) { settings.verbosity = 1; settings.monitor_verbosity = 1; settings.num_iterations = 1; - + settings.dont_fail = false; if (ProcessCmdline(&settings, argc, argv)) { return 1; diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/test_base.h b/projects/rocm-smi-lib/tests/rocm_smi_test/test_base.h index 4b1a6f56ba..497686f3f2 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/test_base.h +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/test_base.h @@ -87,19 +87,25 @@ class TestBase { std::string title(void) const { return title_; } - void set_verbosity(uint32_t v) { verbosity_ = v; } uint32_t verbosity(void) const { return verbosity_; } + void set_dont_fail(bool f) { + dont_fail_ = f; + } + bool dont_fail(void) const { + return dont_fail_; + } private: uint64_t num_iteration_; ///< Number of times to execute test std::string description_; std::string title_; ///< Displayed title of test uint32_t verbosity_; ///< How much additional output to produce + bool dont_fail_; ///< Don't quit test on individual failure if true }; #endif // TESTS_ROCM_SMI_TEST_TEST_BASE_H_ diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.cc b/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.cc index 642604b48f..950566f2af 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.cc +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.cc @@ -57,17 +57,21 @@ static const struct option long_options[] = { {"iterations", required_argument, nullptr, 'i'}, {"verbose", required_argument, nullptr, 'v'}, {"monitor_verbose", required_argument, nullptr, 'm'}, + {"dont_fail", no_argument, nullptr, 'f'}, + {"rsmitst_help", no_argument, nullptr, 'r'}, {nullptr, 0, nullptr, 0} }; -static const char* short_options = "i:v:m:r"; +static const char* short_options = "i:v:m:fr"; static void PrintHelp(void) { std::cout << - "Optional RocRTst Arguments:\n" + "Optional rsmitst Arguments:\n" + "--dont_fail, -f if set, don't fail test when individual test fails; " + "default is to fail when an individual test fails\n" "--iterations, -i ; override default, " "which varies for each test\n" - "--rocrtst_help, -r print this help message\n" + "--rsmitst_help, -r print this help message\n" "--verbosity, -v \n" " Verbosity levels:\n" " 0 -- minimal; just summary information\n" @@ -113,6 +117,10 @@ uint32_t ProcessCmdline(RSMITstGlobals* test, int arg_cnt, char** arg_list) { PrintHelp(); return 1; + case 'f': + test->dont_fail = true; + break; + default: PrintHelp(); return 1; diff --git a/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.h b/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.h index 8512ffe2f9..fc0dce8a53 100755 --- a/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.h +++ b/projects/rocm-smi-lib/tests/rocm_smi_test/test_common.h @@ -55,6 +55,7 @@ struct RSMITstGlobals { uint32_t verbosity; uint32_t monitor_verbosity; uint32_t num_iterations; + bool dont_fail; }; uint32_t ProcessCmdline(RSMITstGlobals* test, int arg_cnt, char** arg_list);