sanitycheck: add testcases for add_testcases function of testsuite class
test_testsuite_class.py: Add testcases for add_testcases function
of testsuite class in sanitycheck.
test_data/testcases/tests & /samples : Testcase root directory
to add all the testcases & to test add_testcases function.
conftest.py: Module for common pytest fixtures, also used for
passing data from one testcase to another.
Note: conftest.py has a class_testsuite fixture where board_root is
defined as the directory which will be added in a separate PR.
Signed-off-by: Aastha Grover <aastha.grover@intel.com>
diff --git a/scripts/tests/sanitycheck/conftest.py b/scripts/tests/sanitycheck/conftest.py
new file mode 100644
index 0000000..96db650
--- /dev/null
+++ b/scripts/tests/sanitycheck/conftest.py
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+# Copyright (c) 2020 Intel Corporation
+#
+# SPDX-License-Identifier: Apache-2.0
+# pylint: disable=redefined-outer-name
+# pylint: disable=line-too-long
+'''Common fixtures for use in testing the sanitycheck tool.'''
+
+import os
+import sys
+import pytest
+
+ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
+sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/sanity_chk"))
+from sanitylib import TestSuite
+
+@pytest.fixture(name='test_data')
+def _test_data():
+ """ Pytest fixture to load the test data directory"""
+ data = ZEPHYR_BASE + "/scripts/tests/sanitycheck/test_data/"
+ return data
+
+@pytest.fixture
+def testcases_dir():
+ """ Pytest fixture to load the test data directory"""
+ return ZEPHYR_BASE + "/scripts/tests/sanitycheck/test_data/testcases"
+
+@pytest.fixture
+def class_testsuite(test_data, testcases_dir):
+ """ Pytest fixture to initialize and return the class TestSuite object"""
+ board_root = test_data +"board_config/1_level/2_level/"
+ testcase_root = [testcases_dir + '/tests', testcases_dir + '/samples']
+ outdir = test_data +'sanity_out_demo'
+ suite = TestSuite(board_root, testcase_root, outdir)
+ return suite
diff --git a/scripts/tests/sanitycheck/test_data/testcase_correct_schema.yaml b/scripts/tests/sanitycheck/test_data/testcase_correct_schema.yaml
index c44e3ec..8a00224 100644
--- a/scripts/tests/sanitycheck/test_data/testcase_correct_schema.yaml
+++ b/scripts/tests/sanitycheck/test_data/testcase_correct_schema.yaml
@@ -1,6 +1,4 @@
tests:
- logging.log_core:
- tags: log_core logging
- platform_exclude: nucleo_l053r8 nucleo_f030r8
- stm32f0_disco native_posix native_posix_64 nrf52_bsim
- qemu_riscv64
+ testing.correct_schema:
+ tags: demo_correct correct_tags
+ platform_exclude: demo_board_1
diff --git a/scripts/tests/sanitycheck/test_data/testcases/samples/test_app/test_sample_app.yaml b/scripts/tests/sanitycheck/test_data/testcases/samples/test_app/test_sample_app.yaml
new file mode 100644
index 0000000..e69d4fa
--- /dev/null
+++ b/scripts/tests/sanitycheck/test_data/testcases/samples/test_app/test_sample_app.yaml
@@ -0,0 +1,11 @@
+sample:
+ name: Sample Library
+tests:
+ sample_test.app:
+ tags: sample_tag
+ harness: console
+ harness_config:
+ type: multi_line
+ regex:
+ - "Hello World!"
+ - "Sample says: Hello World!"
diff --git a/scripts/tests/sanitycheck/test_data/testcases/tests/test_a/test_data.yaml b/scripts/tests/sanitycheck/test_data/testcases/tests/test_a/test_data.yaml
new file mode 100644
index 0000000..7c364b6
--- /dev/null
+++ b/scripts/tests/sanitycheck/test_data/testcases/tests/test_a/test_data.yaml
@@ -0,0 +1,6 @@
+tests:
+ test_a.check_1:
+ tags: test_a
+ test_a.check_2:
+ extra_args: CONF_FILE="test.conf"
+ tags: test_a
diff --git a/scripts/tests/sanitycheck/test_data/testcases/tests/test_b/test_data.yaml b/scripts/tests/sanitycheck/test_data/testcases/tests/test_b/test_data.yaml
new file mode 100644
index 0000000..c3c3940
--- /dev/null
+++ b/scripts/tests/sanitycheck/test_data/testcases/tests/test_b/test_data.yaml
@@ -0,0 +1,8 @@
+tests:
+ test_b.check_1:
+ min_ram: 32
+ tags: test_b
+ test_b.check_2:
+ min_ram: 32
+ extra_args: CONF_FILE="test.conf"
+ tags: test_b
diff --git a/scripts/tests/sanitycheck/test_data/testcases/tests/test_c/test_data.yaml b/scripts/tests/sanitycheck/test_data/testcases/tests/test_c/test_data.yaml
new file mode 100644
index 0000000..46e448b
--- /dev/null
+++ b/scripts/tests/sanitycheck/test_data/testcases/tests/test_c/test_data.yaml
@@ -0,0 +1,6 @@
+tests:
+ test_c.check_1:
+ tags: test_c
+ test_c.check_2:
+ extra_args: CONF_FILE="test.conf"
+ tags: test_c
diff --git a/scripts/tests/sanitycheck/test_sanitycheck.py b/scripts/tests/sanitycheck/test_sanitycheck.py
deleted file mode 100644
index ef264c2..0000000
--- a/scripts/tests/sanitycheck/test_sanitycheck.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (c) 2020 Intel Corporation
-#
-# SPDX-License-Identifier: Apache-2.0
-"""
-This test file contains foundational testcases for Sanitycheck tool
-"""
-
-import os
-import sys
-import pytest
-
-ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
-sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/sanity_chk"))
-
-import scl
-from sanitylib import SanityConfigParser
-
-@pytest.fixture(name='test_data')
-def _test_data():
- """ Pytest fixture to set the path of test_data"""
- data = ZEPHYR_BASE + "/scripts/tests/sanitycheck/test_data/"
- return data
-
-def test_yamlload():
- """ Test to check if loading the non-existent files raises the errors """
- filename = 'testcase_nc.yaml'
- with pytest.raises(FileNotFoundError):
- scl.yaml_load(filename)
-
-def test_correct_testcase_schema(test_data):
- """ Test to validate the testcase schema"""
- filename = test_data + 'testcase_correct_schema.yaml'
- schema = scl.yaml_load(ZEPHYR_BASE +'/scripts/sanity_chk/testcase-schema.yaml')
- data = SanityConfigParser(filename, schema)
- data.load()
- assert data
diff --git a/scripts/tests/sanitycheck/test_testsuite_class.py b/scripts/tests/sanitycheck/test_testsuite_class.py
new file mode 100755
index 0000000..02f24ff
--- /dev/null
+++ b/scripts/tests/sanitycheck/test_testsuite_class.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+# Copyright (c) 2020 Intel Corporation
+#
+# SPDX-License-Identifier: Apache-2.0
+# pylint: disable=line-too-long
+# pylint: disable=C0321
+'''
+This test file contains testcases for Testsuite class of sanitycheck
+'''
+import sys
+import os
+
+ZEPHYR_BASE = os.getenv("ZEPHYR_BASE")
+sys.path.insert(0, os.path.join(ZEPHYR_BASE, "scripts/sanity_chk"))
+
+from sanitylib import TestCase
+
+def test_testsuite_add_testcases(class_testsuite):
+ """ Testing add_testcase function of Testsuite class in sanitycheck """
+ # Test 1: Check the list of testcases after calling add testcases function is as expected
+ class_testsuite.SAMPLE_FILENAME = 'test_sample_app.yaml'
+ class_testsuite.TESTCASE_FILENAME = 'test_data.yaml'
+ class_testsuite.add_testcases()
+ tests_rel_dir = 'scripts/tests/sanitycheck/test_data/testcases/tests/'
+ expected_testcases = ['test_b.check_1',
+ 'test_b.check_2',
+ 'test_c.check_1',
+ 'test_c.check_2',
+ 'test_a.check_1',
+ 'test_a.check_2',
+ 'sample_test.app']
+ testcase_list = []
+ for key in sorted(class_testsuite.testcases.keys()):
+ testcase_list.append(os.path.basename(os.path.normpath(key)))
+ assert sorted(testcase_list) == sorted(expected_testcases)
+
+ # Test 2 : Assert Testcase name is expected & all the testcases values are testcase class objects
+ testcase = class_testsuite.testcases.get(tests_rel_dir + 'test_a/test_a.check_1')
+ assert testcase.name == tests_rel_dir + 'test_a/test_a.check_1'
+ assert all(isinstance(n, TestCase) for n in class_testsuite.testcases.values())