diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6e52f5c8..95e4e1e5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,8 +29,25 @@ on: types: [checks_requested] jobs: + docs-verify: + uses: eclipse-score/cicd-workflows/.github/workflows/docs-verify.yml@c1c90b1a82a1fab0fc202979dde6686b2162d5a8 # v0.0.0 + permissions: + pull-requests: write + contents: read + with: + bazel-docs-verify-target: "--lockfile_mode=error //:docs_check" + run-tests: + uses: eclipse-score/cicd-workflows/.github/workflows/tests.yml@c1c90b1a82a1fab0fc202979dde6686b2162d5a8 # v0.0.0 + permissions: + contents: read + pull-requests: read + with: + bazel-target: 'test --lockfile_mode=error //... --config x86_64-linux' + upload-name: 'bazel-testlogs' build-docs: - uses: eclipse-score/cicd-workflows/.github/workflows/docs.yml@main + needs: run-tests + if: ${{ needs.run-tests.result == 'success' }} + uses: eclipse-score/cicd-workflows/.github/workflows/docs.yml@c1c90b1a82a1fab0fc202979dde6686b2162d5a8 # v0.0.0 permissions: contents: write pages: write diff --git a/docs/index.rst b/docs/index.rst index b1254a68..ce13e910 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -91,3 +91,13 @@ Decision records :glob: design_decisions/explicit_init.rst + +Requirements +------------ + +.. toctree:: + :maxdepth: 1 + :glob: + + logging/requirements/index.rst + logging/stats.rst diff --git a/docs/logging/requirements/index.rst b/docs/logging/requirements/index.rst new file mode 100644 index 00000000..adfddaa3 --- /dev/null +++ b/docs/logging/requirements/index.rst @@ -0,0 +1,37 @@ +.. + # ******************************************************************************* + # Copyright (c) 2025 Contributors to the Eclipse Foundation + # + # See the NOTICE file(s) distributed with this work for additional + # information regarding copyright ownership. + # + # This program and the accompanying materials are made available under the + # terms of the Apache License Version 2.0 which is available at + # https://www.apache.org/licenses/LICENSE-2.0 + # + # SPDX-License-Identifier: Apache-2.0 + # ******************************************************************************* + +Requirements +############ + +.. document:: Logging Requirements + :id: doc__logging_requirements + :status: valid + :safety: ASIL_B + :security: NO + :realizes: wp__requirements_comp + +Component Requirements +---------------------- + +.. comp_req:: Key Naming + :id: comp_req__logging__something + :reqtype: Functional + :security: NO + :safety: ASIL_B + :satisfies: feat_req__logging__timestamping_original + :status: valid + :belongs_to: comp__logging + + The component shall accept keys that consist solely of alphanumeric characters, underscores, or dashes. diff --git a/docs/logging/stats.rst b/docs/logging/stats.rst new file mode 100644 index 00000000..badfdfb4 --- /dev/null +++ b/docs/logging/stats.rst @@ -0,0 +1,116 @@ +.. _log_statistics: + +Component Requirements Statistics +================================= + +Overview +-------- + +.. needpie:: Requirements Status + :labels: not valid, valid but not tested, valid and tested + :colors: red,yellow, green + + type == 'comp_req' and status == 'invalid' + type == 'comp_req' and testlink == '' and (status == 'valid' or status == 'invalid') + type == 'comp_req' and testlink != '' and (status == 'valid' or status == 'invalid') + +In Detail +--------- + +.. grid:: 2 + :class-container: score-grid + + .. grid-item-card:: + + .. needpie:: Requirements marked as Valid + :labels: not valid, valid + :colors: red, orange, green + + type == 'comp_req' and status == 'invalid' + type == 'comp_req' and status == 'valid' + + .. grid-item-card:: + + .. needpie:: Requirements with Codelinks + :labels: no codelink, with codelink + :colors: red, green + + type == 'comp_req' and source_code_link == '' + type == 'comp_req' and source_code_link != '' + + .. grid-item-card:: + + .. needpie:: Test Results + :labels: passed, failed, skipped + :colors: green, red, orange + + type == 'testcase' and result == 'passed' + type == 'testcase' and result == 'failed' + type == 'testcase' and result == 'skipped' + +.. grid:: 2 + + .. grid-item-card:: + + Failed Tests + + *Hint: This table should be empty. Before a PR can be merged all tests have to be successful.* + + .. needtable:: FAILED TESTS + :filter: result == "failed" + :tags: TEST + :columns: name as "testcase";result;fully_verifies;partially_verifies;test_type;derivation_technique;id as "link" + + .. grid-item-card:: + + Skipped / Disabled Tests + + .. needtable:: SKIPPED/DISABLED TESTS + :filter: result != "failed" and result != "passed" + :tags: TEST + :columns: name as "testcase";result;fully_verifies;partially_verifies;test_type;derivation_technique;id as "link" + + + + +All passed Tests +----------------- + +.. needtable:: SUCCESSFUL TESTS + :filter: result == "passed" + :tags: TEST + :columns: name as "testcase";result;fully_verifies;partially_verifies;test_type;derivation_technique;id as "link" + + +Details About Testcases +------------------------ + +.. needpie:: Test Types Used In Testcases + :labels: static-code-analysis, structural-statement-coverage, structural-branch-coverage, walkthrough, inspection, interface-test, requirements-based, resource-usage, control-flow-analysis, data-flow-analysis, fault-injection, struct-func-cov, struct-call-cov + :legend: + + type == 'testcase' and test_type == 'static-code-analysis' + type == 'testcase' and test_type == 'structural-statement-coverage' + type == 'testcase' and test_type == 'structural-branch-coverage' + type == 'testcase' and test_type == 'walkthrough' + type == 'testcase' and test_type == 'inspection' + type == 'testcase' and test_type == 'interface-test' + type == 'testcase' and test_type == 'requirements-based' + type == 'testcase' and test_type == 'resource-usage' + type == 'testcase' and test_type == 'control-flow-analysis' + type == 'testcase' and test_type == 'data-flow-analysis' + type == 'testcase' and test_type == 'fault-injection' + type == 'testcase' and test_type == 'struct-func-cov' + type == 'testcase' and test_type == 'struct-call-cov' + + +.. needpie:: Derivation Techniques Used In Testcases + :labels: requirements-analysis, boundary-values, equivalence-classes, fuzz-testing, error-guessing, explorative-testing + :legend: + + type == 'testcase' and derivation_technique == 'requirements-analysis' + type == 'testcase' and derivation_technique == 'boundary-values' + type == 'testcase' and derivation_technique == 'equivalence-classes' + type == 'testcase' and derivation_technique == 'fuzz-testing' + type == 'testcase' and derivation_technique == 'error-guessing' + type == 'testcase' and derivation_technique == 'explorative-testing' diff --git a/score/datarouter/test/ut/ut_logging/test_logparser.cpp b/score/datarouter/test/ut/ut_logging/test_logparser.cpp index b2f51966..940a4e12 100644 --- a/score/datarouter/test/ut/ut_logging/test_logparser.cpp +++ b/score/datarouter/test/ut/ut_logging/test_logparser.cpp @@ -114,6 +114,12 @@ TEST(LogParserTest, SingleMessageHandler) TEST(LogParserTest, FilterForwarderWithSingleForwarder) { + RecordProperty("PartiallyVerifies", "comp_req__logging__something"); + RecordProperty("ASIL", "B"); + RecordProperty("Description", "hello"); + RecordProperty("TestType", "requirements-based"); + RecordProperty("DerivationTechnique", "requirements-analysis"); + using namespace std::chrono_literals; const std::string type_params = MakeTypeParams(DltidT{"ECU4"}, DltidT{"APP0"}); @@ -136,6 +142,11 @@ TEST(LogParserTest, FilterForwarderWithSingleForwarder) // There is no expectation or assertion we can set to check this condition. TEST(LogParserTest, TestWrongTypeParameter) { + RecordProperty("PartiallyVerifies", "feat_req__logging__timestamping_original"); + RecordProperty("ASIL", "B"); + RecordProperty("Description", "hello"); + RecordProperty("TestType", "requirements-based"); + RecordProperty("DerivationTechnique", "requirements-analysis"); LogParser parser(CreateTestNvConfig()); const std::string type_params = MakeWrongTypeParams(DltidT{"ECU0"}, DltidT{"APP0"}); constexpr BufsizeT kTestMessageIndex = 1234;