test_program_test.cpp revision 1.1.1.1.4.3 1 1.1.1.1.4.2 tls // Copyright 2010 Google Inc.
2 1.1.1.1.4.2 tls // All rights reserved.
3 1.1.1.1.4.2 tls //
4 1.1.1.1.4.2 tls // Redistribution and use in source and binary forms, with or without
5 1.1.1.1.4.2 tls // modification, are permitted provided that the following conditions are
6 1.1.1.1.4.2 tls // met:
7 1.1.1.1.4.2 tls //
8 1.1.1.1.4.2 tls // * Redistributions of source code must retain the above copyright
9 1.1.1.1.4.2 tls // notice, this list of conditions and the following disclaimer.
10 1.1.1.1.4.2 tls // * Redistributions in binary form must reproduce the above copyright
11 1.1.1.1.4.2 tls // notice, this list of conditions and the following disclaimer in the
12 1.1.1.1.4.2 tls // documentation and/or other materials provided with the distribution.
13 1.1.1.1.4.2 tls // * Neither the name of Google Inc. nor the names of its contributors
14 1.1.1.1.4.2 tls // may be used to endorse or promote products derived from this software
15 1.1.1.1.4.2 tls // without specific prior written permission.
16 1.1.1.1.4.2 tls //
17 1.1.1.1.4.2 tls // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 1.1.1.1.4.2 tls // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 1.1.1.1.4.2 tls // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 1.1.1.1.4.2 tls // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 1.1.1.1.4.2 tls // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 1.1.1.1.4.2 tls // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 1.1.1.1.4.2 tls // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 1.1.1.1.4.2 tls // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 1.1.1.1.4.2 tls // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 1.1.1.1.4.2 tls // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 1.1.1.1.4.2 tls // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 1.1.1.1.4.2 tls
29 1.1.1.1.4.2 tls #include "engine/test_program.hpp"
30 1.1.1.1.4.2 tls
31 1.1.1.1.4.3 tls extern "C" {
32 1.1.1.1.4.3 tls #include <sys/stat.h>
33 1.1.1.1.4.3 tls
34 1.1.1.1.4.3 tls #include <signal.h>
35 1.1.1.1.4.3 tls }
36 1.1.1.1.4.3 tls
37 1.1.1.1.4.2 tls #include <sstream>
38 1.1.1.1.4.2 tls
39 1.1.1.1.4.2 tls #include <atf-c++.hpp>
40 1.1.1.1.4.2 tls
41 1.1.1.1.4.2 tls #include "engine/exceptions.hpp"
42 1.1.1.1.4.3 tls #include "engine/test_result.hpp"
43 1.1.1.1.4.3 tls #include "utils/env.hpp"
44 1.1.1.1.4.3 tls #include "utils/format/macros.hpp"
45 1.1.1.1.4.2 tls #include "utils/fs/operations.hpp"
46 1.1.1.1.4.2 tls #include "utils/fs/path.hpp"
47 1.1.1.1.4.3 tls #include "utils/optional.ipp"
48 1.1.1.1.4.2 tls
49 1.1.1.1.4.2 tls namespace fs = utils::fs;
50 1.1.1.1.4.2 tls
51 1.1.1.1.4.2 tls
52 1.1.1.1.4.3 tls namespace {
53 1.1.1.1.4.3 tls
54 1.1.1.1.4.3 tls
55 1.1.1.1.4.3 tls /// Creates a mock tester that receives a signal.
56 1.1.1.1.4.3 tls ///
57 1.1.1.1.4.3 tls /// \param term_sig Signal to deliver to the tester. If the tester does not
58 1.1.1.1.4.3 tls /// exit due to this reason, it exits with an arbitrary non-zero code.
59 1.1.1.1.4.3 tls static void
60 1.1.1.1.4.3 tls create_mock_tester_signal(const int term_sig)
61 1.1.1.1.4.3 tls {
62 1.1.1.1.4.3 tls const std::string tester_name = "kyua-mock-tester";
63 1.1.1.1.4.3 tls
64 1.1.1.1.4.3 tls atf::utils::create_file(
65 1.1.1.1.4.3 tls tester_name,
66 1.1.1.1.4.3 tls F("#! /bin/sh\n"
67 1.1.1.1.4.3 tls "kill -%s $$\n"
68 1.1.1.1.4.3 tls "exit 0\n") % term_sig);
69 1.1.1.1.4.3 tls ATF_REQUIRE(::chmod(tester_name.c_str(), 0755) != -1);
70 1.1.1.1.4.3 tls
71 1.1.1.1.4.3 tls utils::setenv("KYUA_TESTERSDIR", fs::current_path().str());
72 1.1.1.1.4.3 tls }
73 1.1.1.1.4.3 tls
74 1.1.1.1.4.3 tls
75 1.1.1.1.4.3 tls } // anonymous namespace
76 1.1.1.1.4.3 tls
77 1.1.1.1.4.3 tls
78 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(ctor_and_getters);
79 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(ctor_and_getters)
80 1.1.1.1.4.2 tls {
81 1.1.1.1.4.2 tls const engine::metadata md = engine::metadata_builder()
82 1.1.1.1.4.2 tls .add_custom("foo", "bar")
83 1.1.1.1.4.2 tls .build();
84 1.1.1.1.4.2 tls const engine::test_program test_program(
85 1.1.1.1.4.2 tls "mock", fs::path("binary"), fs::path("root"), "suite-name", md);
86 1.1.1.1.4.2 tls ATF_REQUIRE_EQ("mock", test_program.interface_name());
87 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(fs::path("binary"), test_program.relative_path());
88 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(fs::current_path() / "root/binary",
89 1.1.1.1.4.2 tls test_program.absolute_path());
90 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(fs::path("root"), test_program.root());
91 1.1.1.1.4.2 tls ATF_REQUIRE_EQ("suite-name", test_program.test_suite_name());
92 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(md, test_program.get_metadata());
93 1.1.1.1.4.2 tls }
94 1.1.1.1.4.2 tls
95 1.1.1.1.4.2 tls
96 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(find__ok);
97 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(find__ok)
98 1.1.1.1.4.2 tls {
99 1.1.1.1.4.2 tls const engine::test_program test_program(
100 1.1.1.1.4.2 tls "plain", fs::path("non-existent"), fs::path("."), "suite-name",
101 1.1.1.1.4.2 tls engine::metadata_builder().build());
102 1.1.1.1.4.2 tls const engine::test_case_ptr test_case = test_program.find("main");
103 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(fs::path("non-existent"),
104 1.1.1.1.4.2 tls test_case->container_test_program().relative_path());
105 1.1.1.1.4.2 tls ATF_REQUIRE_EQ("main", test_case->name());
106 1.1.1.1.4.2 tls }
107 1.1.1.1.4.2 tls
108 1.1.1.1.4.2 tls
109 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(find__missing);
110 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(find__missing)
111 1.1.1.1.4.2 tls {
112 1.1.1.1.4.2 tls const engine::test_program test_program(
113 1.1.1.1.4.2 tls "plain", fs::path("non-existent"), fs::path("."), "suite-name",
114 1.1.1.1.4.2 tls engine::metadata_builder().build());
115 1.1.1.1.4.2 tls ATF_REQUIRE_THROW_RE(engine::not_found_error,
116 1.1.1.1.4.2 tls "case.*abc.*program.*non-existent",
117 1.1.1.1.4.2 tls test_program.find("abc"));
118 1.1.1.1.4.2 tls }
119 1.1.1.1.4.2 tls
120 1.1.1.1.4.2 tls
121 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(test_cases__get);
122 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(test_cases__get)
123 1.1.1.1.4.2 tls {
124 1.1.1.1.4.2 tls const engine::test_program test_program(
125 1.1.1.1.4.2 tls "plain", fs::path("non-existent"), fs::path("."), "suite-name",
126 1.1.1.1.4.2 tls engine::metadata_builder().build());
127 1.1.1.1.4.2 tls const engine::test_cases_vector& test_cases = test_program.test_cases();
128 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(1, test_cases.size());
129 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(fs::path("non-existent"),
130 1.1.1.1.4.2 tls test_cases[0]->container_test_program().relative_path());
131 1.1.1.1.4.2 tls ATF_REQUIRE_EQ("main", test_cases[0]->name());
132 1.1.1.1.4.2 tls }
133 1.1.1.1.4.2 tls
134 1.1.1.1.4.2 tls
135 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(test_cases__some);
136 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(test_cases__some)
137 1.1.1.1.4.2 tls {
138 1.1.1.1.4.2 tls engine::test_program test_program(
139 1.1.1.1.4.2 tls "plain", fs::path("non-existent"), fs::path("."), "suite-name",
140 1.1.1.1.4.2 tls engine::metadata_builder().build());
141 1.1.1.1.4.2 tls
142 1.1.1.1.4.2 tls engine::test_cases_vector exp_test_cases;
143 1.1.1.1.4.2 tls const engine::test_case test_case("plain", test_program, "main",
144 1.1.1.1.4.2 tls engine::metadata_builder().build());
145 1.1.1.1.4.2 tls exp_test_cases.push_back(engine::test_case_ptr(
146 1.1.1.1.4.2 tls new engine::test_case(test_case)));
147 1.1.1.1.4.2 tls test_program.set_test_cases(exp_test_cases);
148 1.1.1.1.4.2 tls
149 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(exp_test_cases, test_program.test_cases());
150 1.1.1.1.4.2 tls }
151 1.1.1.1.4.2 tls
152 1.1.1.1.4.2 tls
153 1.1.1.1.4.3 tls ATF_TEST_CASE_WITHOUT_HEAD(test_cases__tester_fails);
154 1.1.1.1.4.3 tls ATF_TEST_CASE_BODY(test_cases__tester_fails)
155 1.1.1.1.4.3 tls {
156 1.1.1.1.4.3 tls engine::test_program test_program(
157 1.1.1.1.4.3 tls "mock", fs::path("non-existent"), fs::path("."), "suite-name",
158 1.1.1.1.4.3 tls engine::metadata_builder().build());
159 1.1.1.1.4.3 tls create_mock_tester_signal(SIGSEGV);
160 1.1.1.1.4.3 tls
161 1.1.1.1.4.3 tls const engine::test_cases_vector& test_cases = test_program.test_cases();
162 1.1.1.1.4.3 tls ATF_REQUIRE_EQ(1, test_cases.size());
163 1.1.1.1.4.3 tls
164 1.1.1.1.4.3 tls const engine::test_case_ptr& test_case = test_cases[0];
165 1.1.1.1.4.3 tls ATF_REQUIRE_EQ("__test_cases_list__", test_case->name());
166 1.1.1.1.4.3 tls
167 1.1.1.1.4.3 tls ATF_REQUIRE(test_case->fake_result());
168 1.1.1.1.4.3 tls const engine::test_result result = test_case->fake_result().get();
169 1.1.1.1.4.3 tls ATF_REQUIRE(engine::test_result::broken == result.type());
170 1.1.1.1.4.3 tls ATF_REQUIRE_MATCH("Tester did not exit cleanly", result.reason());
171 1.1.1.1.4.3 tls }
172 1.1.1.1.4.3 tls
173 1.1.1.1.4.3 tls
174 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(operators_eq_and_ne__copy);
175 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(operators_eq_and_ne__copy)
176 1.1.1.1.4.2 tls {
177 1.1.1.1.4.2 tls const engine::test_program tp1(
178 1.1.1.1.4.2 tls "plain", fs::path("non-existent"), fs::path("."), "suite-name",
179 1.1.1.1.4.2 tls engine::metadata_builder().build());
180 1.1.1.1.4.2 tls const engine::test_program tp2 = tp1;
181 1.1.1.1.4.2 tls ATF_REQUIRE( tp1 == tp2);
182 1.1.1.1.4.2 tls ATF_REQUIRE(!(tp1 != tp2));
183 1.1.1.1.4.2 tls }
184 1.1.1.1.4.2 tls
185 1.1.1.1.4.2 tls
186 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(operators_eq_and_ne__not_copy);
187 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(operators_eq_and_ne__not_copy)
188 1.1.1.1.4.2 tls {
189 1.1.1.1.4.2 tls const std::string base_interface("plain");
190 1.1.1.1.4.2 tls const fs::path base_relative_path("the/test/program");
191 1.1.1.1.4.2 tls const fs::path base_root("/the/root");
192 1.1.1.1.4.2 tls const std::string base_test_suite("suite-name");
193 1.1.1.1.4.2 tls const engine::metadata base_metadata = engine::metadata_builder()
194 1.1.1.1.4.2 tls .add_custom("X-foo", "bar")
195 1.1.1.1.4.2 tls .build();
196 1.1.1.1.4.2 tls
197 1.1.1.1.4.2 tls engine::test_program base_tp(
198 1.1.1.1.4.2 tls base_interface, base_relative_path, base_root, base_test_suite,
199 1.1.1.1.4.2 tls base_metadata);
200 1.1.1.1.4.2 tls
201 1.1.1.1.4.2 tls engine::test_cases_vector base_tcs;
202 1.1.1.1.4.2 tls {
203 1.1.1.1.4.2 tls const engine::test_case tc1("plain", base_tp, "main",
204 1.1.1.1.4.2 tls engine::metadata_builder().build());
205 1.1.1.1.4.2 tls base_tcs.push_back(engine::test_case_ptr(new engine::test_case(tc1)));
206 1.1.1.1.4.2 tls }
207 1.1.1.1.4.2 tls base_tp.set_test_cases(base_tcs);
208 1.1.1.1.4.2 tls
209 1.1.1.1.4.2 tls // Construct with all same values.
210 1.1.1.1.4.2 tls {
211 1.1.1.1.4.2 tls engine::test_program other_tp(
212 1.1.1.1.4.2 tls base_interface, base_relative_path, base_root, base_test_suite,
213 1.1.1.1.4.2 tls base_metadata);
214 1.1.1.1.4.2 tls
215 1.1.1.1.4.2 tls engine::test_cases_vector other_tcs;
216 1.1.1.1.4.2 tls {
217 1.1.1.1.4.2 tls const engine::test_case tc1("plain", other_tp, "main",
218 1.1.1.1.4.2 tls engine::metadata_builder().build());
219 1.1.1.1.4.2 tls other_tcs.push_back(engine::test_case_ptr(
220 1.1.1.1.4.2 tls new engine::test_case(tc1)));
221 1.1.1.1.4.2 tls }
222 1.1.1.1.4.2 tls other_tp.set_test_cases(other_tcs);
223 1.1.1.1.4.2 tls
224 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp == other_tp);
225 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp != other_tp));
226 1.1.1.1.4.2 tls }
227 1.1.1.1.4.2 tls
228 1.1.1.1.4.2 tls // Different interface.
229 1.1.1.1.4.2 tls {
230 1.1.1.1.4.2 tls engine::test_program other_tp(
231 1.1.1.1.4.2 tls "atf", base_relative_path, base_root, base_test_suite,
232 1.1.1.1.4.2 tls base_metadata);
233 1.1.1.1.4.2 tls other_tp.set_test_cases(base_tcs);
234 1.1.1.1.4.2 tls
235 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
236 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
237 1.1.1.1.4.2 tls }
238 1.1.1.1.4.2 tls
239 1.1.1.1.4.2 tls // Different relative path.
240 1.1.1.1.4.2 tls {
241 1.1.1.1.4.2 tls engine::test_program other_tp(
242 1.1.1.1.4.2 tls base_interface, fs::path("a/b/c"), base_root, base_test_suite,
243 1.1.1.1.4.2 tls base_metadata);
244 1.1.1.1.4.2 tls other_tp.set_test_cases(base_tcs);
245 1.1.1.1.4.2 tls
246 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
247 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
248 1.1.1.1.4.2 tls }
249 1.1.1.1.4.2 tls
250 1.1.1.1.4.2 tls // Different root.
251 1.1.1.1.4.2 tls {
252 1.1.1.1.4.2 tls engine::test_program other_tp(
253 1.1.1.1.4.2 tls base_interface, base_relative_path, fs::path("."), base_test_suite,
254 1.1.1.1.4.2 tls base_metadata);
255 1.1.1.1.4.2 tls other_tp.set_test_cases(base_tcs);
256 1.1.1.1.4.2 tls
257 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
258 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
259 1.1.1.1.4.2 tls }
260 1.1.1.1.4.2 tls
261 1.1.1.1.4.2 tls // Different test suite.
262 1.1.1.1.4.2 tls {
263 1.1.1.1.4.2 tls engine::test_program other_tp(
264 1.1.1.1.4.2 tls base_interface, base_relative_path, base_root, "different-suite",
265 1.1.1.1.4.2 tls base_metadata);
266 1.1.1.1.4.2 tls other_tp.set_test_cases(base_tcs);
267 1.1.1.1.4.2 tls
268 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
269 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
270 1.1.1.1.4.2 tls }
271 1.1.1.1.4.2 tls
272 1.1.1.1.4.2 tls // Different metadata.
273 1.1.1.1.4.2 tls {
274 1.1.1.1.4.2 tls engine::test_program other_tp(
275 1.1.1.1.4.2 tls base_interface, base_relative_path, base_root, base_test_suite,
276 1.1.1.1.4.2 tls engine::metadata_builder().build());
277 1.1.1.1.4.2 tls other_tp.set_test_cases(base_tcs);
278 1.1.1.1.4.2 tls
279 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
280 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
281 1.1.1.1.4.2 tls }
282 1.1.1.1.4.2 tls
283 1.1.1.1.4.2 tls // Different test cases.
284 1.1.1.1.4.2 tls {
285 1.1.1.1.4.2 tls engine::test_program other_tp(
286 1.1.1.1.4.2 tls base_interface, base_relative_path, base_root, base_test_suite,
287 1.1.1.1.4.2 tls base_metadata);
288 1.1.1.1.4.2 tls
289 1.1.1.1.4.2 tls engine::test_cases_vector other_tcs;
290 1.1.1.1.4.2 tls {
291 1.1.1.1.4.2 tls const engine::test_case tc1("atf", base_tp, "foo",
292 1.1.1.1.4.2 tls engine::metadata_builder().build());
293 1.1.1.1.4.2 tls other_tcs.push_back(engine::test_case_ptr(
294 1.1.1.1.4.2 tls new engine::test_case(tc1)));
295 1.1.1.1.4.2 tls }
296 1.1.1.1.4.2 tls other_tp.set_test_cases(other_tcs);
297 1.1.1.1.4.2 tls
298 1.1.1.1.4.2 tls ATF_REQUIRE(!(base_tp == other_tp));
299 1.1.1.1.4.2 tls ATF_REQUIRE( base_tp != other_tp);
300 1.1.1.1.4.2 tls }
301 1.1.1.1.4.2 tls }
302 1.1.1.1.4.2 tls
303 1.1.1.1.4.2 tls
304 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(output__no_test_cases);
305 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(output__no_test_cases)
306 1.1.1.1.4.2 tls {
307 1.1.1.1.4.2 tls engine::test_program tp(
308 1.1.1.1.4.2 tls "plain", fs::path("binary/path"), fs::path("/the/root"), "suite-name",
309 1.1.1.1.4.2 tls engine::metadata_builder().add_allowed_architecture("a").build());
310 1.1.1.1.4.2 tls tp.set_test_cases(engine::test_cases_vector());
311 1.1.1.1.4.2 tls
312 1.1.1.1.4.2 tls std::ostringstream str;
313 1.1.1.1.4.2 tls str << tp;
314 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(
315 1.1.1.1.4.2 tls "test_program{interface='plain', binary='binary/path', "
316 1.1.1.1.4.2 tls "root='/the/root', test_suite='suite-name', "
317 1.1.1.1.4.2 tls "metadata=metadata{allowed_architectures='a', allowed_platforms='', "
318 1.1.1.1.4.2 tls "description='', has_cleanup='false', "
319 1.1.1.1.4.2 tls "required_configs='', required_files='', required_memory='0', "
320 1.1.1.1.4.2 tls "required_programs='', required_user='', timeout='300'}, "
321 1.1.1.1.4.2 tls "test_cases=[]}",
322 1.1.1.1.4.2 tls str.str());
323 1.1.1.1.4.2 tls }
324 1.1.1.1.4.2 tls
325 1.1.1.1.4.2 tls
326 1.1.1.1.4.2 tls ATF_TEST_CASE_WITHOUT_HEAD(output__some_test_cases);
327 1.1.1.1.4.2 tls ATF_TEST_CASE_BODY(output__some_test_cases)
328 1.1.1.1.4.2 tls {
329 1.1.1.1.4.2 tls engine::test_program tp(
330 1.1.1.1.4.2 tls "plain", fs::path("binary/path"), fs::path("/the/root"), "suite-name",
331 1.1.1.1.4.2 tls engine::metadata_builder().add_allowed_architecture("a").build());
332 1.1.1.1.4.2 tls
333 1.1.1.1.4.2 tls const engine::test_case_ptr tc1(new engine::test_case(
334 1.1.1.1.4.2 tls "plain", tp, "the-name", engine::metadata_builder()
335 1.1.1.1.4.2 tls .add_allowed_platform("foo").add_custom("X-bar", "baz").build()));
336 1.1.1.1.4.2 tls const engine::test_case_ptr tc2(new engine::test_case(
337 1.1.1.1.4.2 tls "plain", tp, "another-name", engine::metadata_builder().build()));
338 1.1.1.1.4.2 tls engine::test_cases_vector tcs;
339 1.1.1.1.4.2 tls tcs.push_back(tc1);
340 1.1.1.1.4.2 tls tcs.push_back(tc2);
341 1.1.1.1.4.2 tls tp.set_test_cases(tcs);
342 1.1.1.1.4.2 tls
343 1.1.1.1.4.2 tls std::ostringstream str;
344 1.1.1.1.4.2 tls str << tp;
345 1.1.1.1.4.2 tls ATF_REQUIRE_EQ(
346 1.1.1.1.4.2 tls "test_program{interface='plain', binary='binary/path', "
347 1.1.1.1.4.2 tls "root='/the/root', test_suite='suite-name', "
348 1.1.1.1.4.2 tls "metadata=metadata{allowed_architectures='a', allowed_platforms='', "
349 1.1.1.1.4.2 tls "description='', has_cleanup='false', "
350 1.1.1.1.4.2 tls "required_configs='', required_files='', required_memory='0', "
351 1.1.1.1.4.2 tls "required_programs='', required_user='', timeout='300'}, "
352 1.1.1.1.4.2 tls "test_cases=["
353 1.1.1.1.4.2 tls "test_case{interface='plain', name='the-name', "
354 1.1.1.1.4.2 tls "metadata=metadata{allowed_architectures='', allowed_platforms='foo', "
355 1.1.1.1.4.2 tls "custom.X-bar='baz', description='', has_cleanup='false', "
356 1.1.1.1.4.2 tls "required_configs='', required_files='', required_memory='0', "
357 1.1.1.1.4.2 tls "required_programs='', required_user='', timeout='300'}}, "
358 1.1.1.1.4.2 tls "test_case{interface='plain', name='another-name', "
359 1.1.1.1.4.2 tls "metadata=metadata{allowed_architectures='', allowed_platforms='', "
360 1.1.1.1.4.2 tls "description='', has_cleanup='false', "
361 1.1.1.1.4.2 tls "required_configs='', required_files='', required_memory='0', "
362 1.1.1.1.4.2 tls "required_programs='', required_user='', timeout='300'}}]}",
363 1.1.1.1.4.2 tls str.str());
364 1.1.1.1.4.2 tls }
365 1.1.1.1.4.2 tls
366 1.1.1.1.4.2 tls
367 1.1.1.1.4.2 tls ATF_INIT_TEST_CASES(tcs)
368 1.1.1.1.4.2 tls {
369 1.1.1.1.4.2 tls // TODO(jmmv): These tests have ceased to be realistic with the move to
370 1.1.1.1.4.2 tls // TestersDesign. We probably should have some (few!) integration tests for
371 1.1.1.1.4.2 tls // the various known testers... or, alternatively, provide a mock tester to
372 1.1.1.1.4.2 tls // run our tests with.
373 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, ctor_and_getters);
374 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, find__ok);
375 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, find__missing);
376 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, test_cases__get);
377 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, test_cases__some);
378 1.1.1.1.4.3 tls ATF_ADD_TEST_CASE(tcs, test_cases__tester_fails);
379 1.1.1.1.4.2 tls
380 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, operators_eq_and_ne__copy);
381 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, operators_eq_and_ne__not_copy);
382 1.1.1.1.4.2 tls
383 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, output__no_test_cases);
384 1.1.1.1.4.2 tls ATF_ADD_TEST_CASE(tcs, output__some_test_cases);
385 1.1.1.1.4.2 tls }
386