1 README for security-tests project
3 ==WHAT IS======================================================================
5 security-tests is repository for testing packages from domain Security.
7 ==WHAT FOR=====================================================================
9 The security-tests repository is designed for testing packages mentioned below
10 with binaries provided for testing them:
15 security-manager-tests
21 There are also inner-tests for testing complex security-tests framework
22 mechanisms with binary:
23 security-tests-inner-test
25 ==HOW TO RUN===================================================================
27 Each test suite may be run with options:
28 --output=<output type> --output=<output type> ...
31 test-binary --output=text --output=xml --file=output.xml
32 --only-from-xml=<xml file> Run only testcases specified in XML file
33 --regexp='regexp' Only selected tests which names match regexp run
34 --start=<test id> Start from concrete test id
35 --group=<group name> Run tests only from one group
36 --runignored Run also ignored tests
37 --list Show a list of Test IDs
38 --listgroups Show a list of Test Group names
39 --only-from-xml=<xml file> Run only testcases specified in XML file
40 XML name is taken from attribute id="part1_part2" as whole.
41 If part1 is not found (no _) then it is implicitily set according to
42 suite part1 from binary tests
43 --listingroup=<group name> Show a list of Test IDS in one group
44 --allowchildlogs Allow to print logs from child process on screen.
45 When active child process will be able to print logs on stdout and
46 stderr. Both descriptors will be closed after test.
49 They can be run also by scripts:
53 Each test can end with one of three possible statuses:
58 ==HOW TO WRITE=================================================================
60 security-tests is based on extended dpl framework providing different macros.
61 Below are categories with macros listed as below:
67 --Test group registering macro-------------------------------------------------
71 RUNNER_TEST_GROUP_INIT
72 Registers group of tests. Test are registered under this group until
73 another group registering macro is called.
75 --Test registering macros------------------------------------------------------
76 Adding/removing those macro calls will add/remove test cases they provide. To
77 change tests, change body of those macro calls. Registered tests are run within
79 Those macros allow additional arguments which are classes with mandatory
82 Called while registering test.
83 Should not throw any exceptions
84 * init(const std::string &testName)
85 Called before test case function in order of classes passed to macro.
87 testName argument is name of the test (first macro argument).
89 called after test case function in reversed order of classes passed to
92 Created instances of those classes may be accessed from within test case body
93 as argument of test case funtion is
94 std::tuple<ClassesPassed> &optionalArgsTuple
99 Function registered by this macro will be run in the same process as
100 framework. No forking allowed unless forked process does not throw
104 Function registered by this macro will be run in child process. No
105 forking allowed unless forked process does not throw any exception.
106 test_runner_multiprocess.h
107 RUNNER_MULTIPROCESS_TEST
108 Function registered by this macro will be run in the same process as
109 framework. Forking allowed. Exception of every process will be
114 Same as RUNNER_TEST but run only with smack enabled.
116 Same as RUNNER_TEST but run only with smack disabled.
117 RUNNER_CHILD_TEST_SMACK
118 Same as RUNNER_TEST_CHILD but run only with smack enabled.
119 RUNNER_CHILD_TEST_NOSMACK
120 Same as RUNNER_TEST_CHILD but run only with smack disabled.
121 RUNNER_MULTIPROCESS_TEST_SMACK
122 Same as RUNNER_TEST_MULTIPROCESS but run only with smack enabled.
123 RUNNER_MULTIPROCESS_TEST_NOSMACK
124 Same as RUNNER_TEST_MULTIPROCESS but run only with smack disabled.
126 --Assert macros----------------------------------------------------------------
127 Used within test registering macros.
129 First failed assertion throws test failed exception. If another assertions
130 fail, information about fail conditions and backtrace is cumulated and
131 presented together with already thrown exception message.
136 Assertion with message with backtrace information appended.
137 RUNNER_ASSERT_ERRNO_MSG
138 Assertion with message, error string and backtrace information
141 Assertion with error string and backtrace information appended.
143 Fail with message and backtrace information appended.
145 Assertion with backtrace information appended.
147 Assertion with message classified as ignored.
149 --Performence macros-----------------------------------------------------------
150 Used to do the time measurement.
154 RUNNER_PERF_TEST_BEGIN
155 Start time measurement.
157 End time measurement.
159 --Message macros---------------------------------------------------------------
160 Used to print error messages during test run time.
165 Print error message using red color.
167 --Defer macros-----------------------------------------------------------------
168 Used to defer throwing TestException exceptions (TestFailed, TestIgnored)
169 by catching them and rethrowing later. This mechanism can help in breaking
170 test and passing test result from places where throwing exceptions
175 RUNNER_DEFER_TRYCATCH
176 Catches thrown TestException exceptions and stores them in TestRunner
177 structures for later use. This macro works only inside deffered scope
178 defined by RUNNER_DEFER_SCOPE, otherwise it won't catch exceptions
180 Defines deferred scope. All RUNNER_DEFER_TRYCATCH macros used inside
181 the scope catch and save TestException exceptions. After scope is left
182 all saved exceptions take part in setting result of test. If there
183 is no any uncaught exception then additionally first of saved
184 exceptions is thrown.
186 --Collectors-------------------------------------------------------------------
187 Collectors are classes which collect test results. Each class does it differently.
188 Collectors can be registered by --output parameter (see HOW TO RUN section) but
189 there is also another collector created to write summary.
192 test_results_collector_summary.h
194 Collector writing tests summary. Call SummaryCollector::Register() to
197 --Usage example----------------------------------------------------------------
199 #include <test_runner.h>
200 #include <tests_common.h>
201 #include <summary_collector.h>
203 #include <sys/stat.h>
207 RUNNER_TEST_GROUP_INIT(foo_module)
209 RUNNER_TEST_SMACK(bar_allways_fails)
211 RUNNER_ASSERT(false);
214 RUNNER_TEST(bar_allways_passses)
219 RUNNER_TEST(bar_file1)
221 cosnt char *file = "bar_file1";
222 int fd = TEMP_FAILURE_RETRY(open(file, O_RDONLY));
223 RUNNER_ASSERT_ERRNO_MSG(fd != -1, "Cannot open " << file << " file");
227 RUNNER_CHILD_TEST_NOSMACK(bar_file2_dropped_root)
229 RUNNER_ASSERT_ERRNO(setgid(5000) == 0);
230 RUNNER_ASSERT_ERRNO(setuid(5000) == 0);
232 cosnt char *file = "bar_file2";
233 int fd = TEMP_FAILURE_RETRY(open(file, O_RDONLY));
236 RUNNER_FAIL_MSG("file " << file << "should not be opened");
238 RUNNER_ASSERT_ERRNO_MSG(errno == EACCESS,
239 "Wrong errno on opening " << " file");
246 void init(const std::string &testName) { ... }
247 void finish() { ... }
255 void init(const std::string &testName) { ... }
256 void finish() { ... }
257 void doRestore() { ... }
260 RUNNER_TEST(bar_optional_args, Env, Restore)
262 std::get<0>(optionalArgsTuple).doEnv();
263 std::get<1>(optionalArgsTuple).doRestore();
266 int main(int argc, char *argv[])
268 SummaryCollector::Register();
269 return DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
272 --Notes------------------------------------------------------------------------
274 While changing body of test cases, be sure to remove functions and global
275 variables if not used by any other tests.
276 Use const variables instead of #define's.
277 Use mechanisms already provided in common library.