diff --git a/userspace/include/unit/unit-requirement-ids.h b/userspace/include/unit/unit-requirement-ids.h new file mode 100644 index 000000000..24f36198b --- /dev/null +++ b/userspace/include/unit/unit-requirement-ids.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef __UNIT_UNIT_REQUIREMENT_IDS_H__ +#define __UNIT_UNIT_REQUIREMENT_IDS_H__ + +#endif diff --git a/userspace/include/unit/unit.h b/userspace/include/unit/unit.h index 442a73f17..02649f5bd 100644 --- a/userspace/include/unit/unit.h +++ b/userspace/include/unit/unit.h @@ -51,6 +51,38 @@ struct unit_module_test { * module_test_fn as @args. */ void *args; + + /* + * Linkage to JAMA test specification. An example would be: + * + * .requirement = "NVGPU-RQCD-68" + * .verification_criteria = "C1" + * + * This would link to C1 verification criteria of the pd_cache + * requirement NVGPU-RQCD-68. + * + * This is an optional field for any given unit test. But a unit + * test module must satisfy the necessary VC for all requirements + * within that unit. + */ + struct { + /* + * Requirement linkage: this should point to the unique ID + * of the test specification. + */ + const char *unique_id; + + /* + * The particular verification criteria that this is + * satisfying. + */ + const char *verification_criteria; + + /* + * Specific requirement this test provides coverage for. + */ + const char *requirement; + } jama; }; /* @@ -116,6 +148,20 @@ struct unit_module { .args = __args, \ } +/* + * Use this for a unit test that satisfies or contributes to satisfying a + * verification criteria for a given requirement. + */ +#define UNIT_TEST_REQ(__req, __uid, __vc, __name, __fn, __args) \ + { \ + .name = #__name, \ + .fn = __fn, \ + .args = __args, \ + .jama.requirement = __req, \ + .jama.unique_id = __uid, \ + .jama.verification_criteria = __vc, \ + } + #define unit_return_fail(m, msg, ...) \ do { \ unit_err(m, "%s():%d " msg, \