1*d780102eSjmmv //
2*d780102eSjmmv // Automated Testing Framework (atf)
3*d780102eSjmmv //
4*d780102eSjmmv // Copyright (c) 2010 The NetBSD Foundation, Inc.
5*d780102eSjmmv // All rights reserved.
6*d780102eSjmmv //
7*d780102eSjmmv // Redistribution and use in source and binary forms, with or without
8*d780102eSjmmv // modification, are permitted provided that the following conditions
9*d780102eSjmmv // are met:
10*d780102eSjmmv // 1. Redistributions of source code must retain the above copyright
11*d780102eSjmmv // notice, this list of conditions and the following disclaimer.
12*d780102eSjmmv // 2. Redistributions in binary form must reproduce the above copyright
13*d780102eSjmmv // notice, this list of conditions and the following disclaimer in the
14*d780102eSjmmv // documentation and/or other materials provided with the distribution.
15*d780102eSjmmv //
16*d780102eSjmmv // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17*d780102eSjmmv // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18*d780102eSjmmv // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*d780102eSjmmv // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*d780102eSjmmv // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21*d780102eSjmmv // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*d780102eSjmmv // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*d780102eSjmmv // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*d780102eSjmmv // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25*d780102eSjmmv // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26*d780102eSjmmv // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*d780102eSjmmv // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*d780102eSjmmv //
29*d780102eSjmmv
30*d780102eSjmmv #include <atf-c++.hpp>
31*d780102eSjmmv
32*d780102eSjmmv #include "config.hpp"
33*d780102eSjmmv #include "requirements.hpp"
34*d780102eSjmmv #include "text.hpp"
35*d780102eSjmmv #include "user.hpp"
36*d780102eSjmmv
37*d780102eSjmmv namespace impl = tools;
38*d780102eSjmmv
39*d780102eSjmmv // -------------------------------------------------------------------------
40*d780102eSjmmv // Auxiliary functions.
41*d780102eSjmmv // -------------------------------------------------------------------------
42*d780102eSjmmv
43*d780102eSjmmv namespace {
44*d780102eSjmmv
45*d780102eSjmmv typedef std::map< std::string, std::string > vars_map;
46*d780102eSjmmv
47*d780102eSjmmv const vars_map no_config;
48*d780102eSjmmv
49*d780102eSjmmv void
do_check(const std::string & expected,const vars_map & metadata,const vars_map & config=no_config)50*d780102eSjmmv do_check(const std::string& expected, const vars_map& metadata,
51*d780102eSjmmv const vars_map& config = no_config)
52*d780102eSjmmv {
53*d780102eSjmmv const std::string actual = impl::check_requirements(metadata, config);
54*d780102eSjmmv if (!tools::text::match(actual, expected))
55*d780102eSjmmv ATF_FAIL("Requirements failure reason \"" + actual + "\" does not "
56*d780102eSjmmv "match \"" + expected + "\"");
57*d780102eSjmmv }
58*d780102eSjmmv
59*d780102eSjmmv } // anonymous namespace
60*d780102eSjmmv
61*d780102eSjmmv // -------------------------------------------------------------------------
62*d780102eSjmmv // Tests for the require.arch metadata property.
63*d780102eSjmmv // -------------------------------------------------------------------------
64*d780102eSjmmv
65*d780102eSjmmv ATF_TEST_CASE(require_arch_one_ok);
ATF_TEST_CASE_HEAD(require_arch_one_ok)66*d780102eSjmmv ATF_TEST_CASE_HEAD(require_arch_one_ok) {}
ATF_TEST_CASE_BODY(require_arch_one_ok)67*d780102eSjmmv ATF_TEST_CASE_BODY(require_arch_one_ok) {
68*d780102eSjmmv vars_map metadata;
69*d780102eSjmmv metadata["require.arch"] = tools::config::get("atf_arch");
70*d780102eSjmmv do_check("", metadata);
71*d780102eSjmmv }
72*d780102eSjmmv
73*d780102eSjmmv ATF_TEST_CASE(require_arch_one_fail);
ATF_TEST_CASE_HEAD(require_arch_one_fail)74*d780102eSjmmv ATF_TEST_CASE_HEAD(require_arch_one_fail) {}
ATF_TEST_CASE_BODY(require_arch_one_fail)75*d780102eSjmmv ATF_TEST_CASE_BODY(require_arch_one_fail) {
76*d780102eSjmmv vars_map metadata;
77*d780102eSjmmv metadata["require.arch"] = "__fake_arch__";
78*d780102eSjmmv do_check("Requires the '__fake_arch__' architecture", metadata);
79*d780102eSjmmv }
80*d780102eSjmmv
81*d780102eSjmmv ATF_TEST_CASE(require_arch_many_ok);
ATF_TEST_CASE_HEAD(require_arch_many_ok)82*d780102eSjmmv ATF_TEST_CASE_HEAD(require_arch_many_ok) {}
ATF_TEST_CASE_BODY(require_arch_many_ok)83*d780102eSjmmv ATF_TEST_CASE_BODY(require_arch_many_ok) {
84*d780102eSjmmv vars_map metadata;
85*d780102eSjmmv metadata["require.arch"] = "__foo__ " + tools::config::get("atf_arch") +
86*d780102eSjmmv " __bar__";
87*d780102eSjmmv do_check("", metadata);
88*d780102eSjmmv }
89*d780102eSjmmv
90*d780102eSjmmv ATF_TEST_CASE(require_arch_many_fail);
ATF_TEST_CASE_HEAD(require_arch_many_fail)91*d780102eSjmmv ATF_TEST_CASE_HEAD(require_arch_many_fail) {}
ATF_TEST_CASE_BODY(require_arch_many_fail)92*d780102eSjmmv ATF_TEST_CASE_BODY(require_arch_many_fail) {
93*d780102eSjmmv vars_map metadata;
94*d780102eSjmmv metadata["require.arch"] = "__foo__ __bar__ __baz__";
95*d780102eSjmmv do_check("Requires one of the '__foo__ __bar__ __baz__' architectures",
96*d780102eSjmmv metadata);
97*d780102eSjmmv }
98*d780102eSjmmv
99*d780102eSjmmv // -------------------------------------------------------------------------
100*d780102eSjmmv // Tests for the require.config metadata property.
101*d780102eSjmmv // -------------------------------------------------------------------------
102*d780102eSjmmv
103*d780102eSjmmv ATF_TEST_CASE(require_config_one_ok);
ATF_TEST_CASE_HEAD(require_config_one_ok)104*d780102eSjmmv ATF_TEST_CASE_HEAD(require_config_one_ok) {}
ATF_TEST_CASE_BODY(require_config_one_ok)105*d780102eSjmmv ATF_TEST_CASE_BODY(require_config_one_ok) {
106*d780102eSjmmv vars_map metadata, config;
107*d780102eSjmmv metadata["require.config"] = "var1";
108*d780102eSjmmv config["var1"] = "some-value";
109*d780102eSjmmv do_check("", metadata, config);
110*d780102eSjmmv }
111*d780102eSjmmv
112*d780102eSjmmv ATF_TEST_CASE(require_config_one_fail);
ATF_TEST_CASE_HEAD(require_config_one_fail)113*d780102eSjmmv ATF_TEST_CASE_HEAD(require_config_one_fail) {}
ATF_TEST_CASE_BODY(require_config_one_fail)114*d780102eSjmmv ATF_TEST_CASE_BODY(require_config_one_fail) {
115*d780102eSjmmv vars_map metadata, config;
116*d780102eSjmmv metadata["require.config"] = "var1";
117*d780102eSjmmv do_check("Required configuration variable 'var1' not defined", metadata,
118*d780102eSjmmv config);
119*d780102eSjmmv }
120*d780102eSjmmv
121*d780102eSjmmv ATF_TEST_CASE(require_config_many_ok);
ATF_TEST_CASE_HEAD(require_config_many_ok)122*d780102eSjmmv ATF_TEST_CASE_HEAD(require_config_many_ok) {}
ATF_TEST_CASE_BODY(require_config_many_ok)123*d780102eSjmmv ATF_TEST_CASE_BODY(require_config_many_ok) {
124*d780102eSjmmv vars_map metadata, config;
125*d780102eSjmmv metadata["require.config"] = "var1 var2 var3";
126*d780102eSjmmv config["var1"] = "first-value";
127*d780102eSjmmv config["var2"] = "second-value";
128*d780102eSjmmv config["var3"] = "third-value";
129*d780102eSjmmv do_check("", metadata, config);
130*d780102eSjmmv }
131*d780102eSjmmv
132*d780102eSjmmv ATF_TEST_CASE(require_config_many_fail);
ATF_TEST_CASE_HEAD(require_config_many_fail)133*d780102eSjmmv ATF_TEST_CASE_HEAD(require_config_many_fail) {}
ATF_TEST_CASE_BODY(require_config_many_fail)134*d780102eSjmmv ATF_TEST_CASE_BODY(require_config_many_fail) {
135*d780102eSjmmv vars_map metadata, config;
136*d780102eSjmmv metadata["require.config"] = "var1 var2 var3";
137*d780102eSjmmv config["var1"] = "first-value";
138*d780102eSjmmv config["var3"] = "third-value";
139*d780102eSjmmv do_check("Required configuration variable 'var2' not defined", metadata,
140*d780102eSjmmv config);
141*d780102eSjmmv }
142*d780102eSjmmv
143*d780102eSjmmv // -------------------------------------------------------------------------
144*d780102eSjmmv // Tests for the require.files metadata property.
145*d780102eSjmmv // -------------------------------------------------------------------------
146*d780102eSjmmv
147*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_one_ok);
ATF_TEST_CASE_BODY(require_files_one_ok)148*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_one_ok) {
149*d780102eSjmmv vars_map metadata;
150*d780102eSjmmv metadata["require.files"] = "/bin/ls";
151*d780102eSjmmv do_check("", metadata);
152*d780102eSjmmv }
153*d780102eSjmmv
154*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_one_missing);
ATF_TEST_CASE_BODY(require_files_one_missing)155*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_one_missing) {
156*d780102eSjmmv vars_map metadata;
157*d780102eSjmmv metadata["require.files"] = "/non-existent/foo";
158*d780102eSjmmv do_check("Required file '/non-existent/foo' not found", metadata);
159*d780102eSjmmv }
160*d780102eSjmmv
161*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_one_fail);
ATF_TEST_CASE_BODY(require_files_one_fail)162*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_one_fail) {
163*d780102eSjmmv vars_map metadata;
164*d780102eSjmmv metadata["require.files"] = "/bin/cp this-is-relative";
165*d780102eSjmmv ATF_REQUIRE_THROW_RE(std::runtime_error, "Relative.*(this-is-relative)",
166*d780102eSjmmv impl::check_requirements(metadata, no_config));
167*d780102eSjmmv }
168*d780102eSjmmv
169*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_many_ok);
ATF_TEST_CASE_BODY(require_files_many_ok)170*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_many_ok) {
171*d780102eSjmmv vars_map metadata;
172*d780102eSjmmv metadata["require.files"] = "/bin/ls /bin/cp";
173*d780102eSjmmv do_check("", metadata);
174*d780102eSjmmv }
175*d780102eSjmmv
176*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_many_missing);
ATF_TEST_CASE_BODY(require_files_many_missing)177*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_many_missing) {
178*d780102eSjmmv vars_map metadata;
179*d780102eSjmmv metadata["require.files"] = "/bin/ls /non-existent/bar /bin/cp";
180*d780102eSjmmv do_check("Required file '/non-existent/bar' not found", metadata);
181*d780102eSjmmv }
182*d780102eSjmmv
183*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_files_many_fail);
ATF_TEST_CASE_BODY(require_files_many_fail)184*d780102eSjmmv ATF_TEST_CASE_BODY(require_files_many_fail) {
185*d780102eSjmmv vars_map metadata;
186*d780102eSjmmv metadata["require.files"] = "/bin/cp also-relative";
187*d780102eSjmmv ATF_REQUIRE_THROW_RE(std::runtime_error, "Relative.*(also-relative)",
188*d780102eSjmmv impl::check_requirements(metadata, no_config));
189*d780102eSjmmv }
190*d780102eSjmmv
191*d780102eSjmmv // -------------------------------------------------------------------------
192*d780102eSjmmv // Tests for the require.machine metadata property.
193*d780102eSjmmv // -------------------------------------------------------------------------
194*d780102eSjmmv
195*d780102eSjmmv ATF_TEST_CASE(require_machine_one_ok);
ATF_TEST_CASE_HEAD(require_machine_one_ok)196*d780102eSjmmv ATF_TEST_CASE_HEAD(require_machine_one_ok) {}
ATF_TEST_CASE_BODY(require_machine_one_ok)197*d780102eSjmmv ATF_TEST_CASE_BODY(require_machine_one_ok) {
198*d780102eSjmmv vars_map metadata;
199*d780102eSjmmv metadata["require.machine"] = tools::config::get("atf_machine");
200*d780102eSjmmv do_check("", metadata);
201*d780102eSjmmv }
202*d780102eSjmmv
203*d780102eSjmmv ATF_TEST_CASE(require_machine_one_fail);
ATF_TEST_CASE_HEAD(require_machine_one_fail)204*d780102eSjmmv ATF_TEST_CASE_HEAD(require_machine_one_fail) {}
ATF_TEST_CASE_BODY(require_machine_one_fail)205*d780102eSjmmv ATF_TEST_CASE_BODY(require_machine_one_fail) {
206*d780102eSjmmv vars_map metadata;
207*d780102eSjmmv metadata["require.machine"] = "__fake_machine__";
208*d780102eSjmmv do_check("Requires the '__fake_machine__' machine type", metadata);
209*d780102eSjmmv }
210*d780102eSjmmv
211*d780102eSjmmv ATF_TEST_CASE(require_machine_many_ok);
ATF_TEST_CASE_HEAD(require_machine_many_ok)212*d780102eSjmmv ATF_TEST_CASE_HEAD(require_machine_many_ok) {}
ATF_TEST_CASE_BODY(require_machine_many_ok)213*d780102eSjmmv ATF_TEST_CASE_BODY(require_machine_many_ok) {
214*d780102eSjmmv vars_map metadata;
215*d780102eSjmmv metadata["require.machine"] = "__foo__ " +
216*d780102eSjmmv tools::config::get("atf_machine") + " __bar__";
217*d780102eSjmmv do_check("", metadata);
218*d780102eSjmmv }
219*d780102eSjmmv
220*d780102eSjmmv ATF_TEST_CASE(require_machine_many_fail);
ATF_TEST_CASE_HEAD(require_machine_many_fail)221*d780102eSjmmv ATF_TEST_CASE_HEAD(require_machine_many_fail) {}
ATF_TEST_CASE_BODY(require_machine_many_fail)222*d780102eSjmmv ATF_TEST_CASE_BODY(require_machine_many_fail) {
223*d780102eSjmmv vars_map metadata;
224*d780102eSjmmv metadata["require.machine"] = "__foo__ __bar__ __baz__";
225*d780102eSjmmv do_check("Requires one of the '__foo__ __bar__ __baz__' machine types",
226*d780102eSjmmv metadata);
227*d780102eSjmmv }
228*d780102eSjmmv
229*d780102eSjmmv // -------------------------------------------------------------------------
230*d780102eSjmmv // Tests for the require.memory metadata property.
231*d780102eSjmmv // -------------------------------------------------------------------------
232*d780102eSjmmv
233*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_memory_ok);
ATF_TEST_CASE_BODY(require_memory_ok)234*d780102eSjmmv ATF_TEST_CASE_BODY(require_memory_ok) {
235*d780102eSjmmv vars_map metadata;
236*d780102eSjmmv metadata["require.memory"] = "1m";
237*d780102eSjmmv do_check("", metadata);
238*d780102eSjmmv }
239*d780102eSjmmv
240*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_memory_not_enough);
ATF_TEST_CASE_BODY(require_memory_not_enough)241*d780102eSjmmv ATF_TEST_CASE_BODY(require_memory_not_enough) {
242*d780102eSjmmv vars_map metadata;
243*d780102eSjmmv metadata["require.memory"] = "128t";
244*d780102eSjmmv do_check("Not enough memory; needed 140737488355328, available [0-9]*",
245*d780102eSjmmv metadata);
246*d780102eSjmmv }
247*d780102eSjmmv
248*d780102eSjmmv ATF_TEST_CASE_WITHOUT_HEAD(require_memory_fail);
ATF_TEST_CASE_BODY(require_memory_fail)249*d780102eSjmmv ATF_TEST_CASE_BODY(require_memory_fail) {
250*d780102eSjmmv vars_map metadata;
251*d780102eSjmmv metadata["require.memory"] = "foo";
252*d780102eSjmmv ATF_REQUIRE_THROW(std::runtime_error,
253*d780102eSjmmv impl::check_requirements(metadata, no_config));
254*d780102eSjmmv }
255*d780102eSjmmv
256*d780102eSjmmv // -------------------------------------------------------------------------
257*d780102eSjmmv // Tests for the require.progs metadata property.
258*d780102eSjmmv // -------------------------------------------------------------------------
259*d780102eSjmmv
260*d780102eSjmmv ATF_TEST_CASE(require_progs_one_ok);
ATF_TEST_CASE_HEAD(require_progs_one_ok)261*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_one_ok) {}
ATF_TEST_CASE_BODY(require_progs_one_ok)262*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_one_ok) {
263*d780102eSjmmv vars_map metadata;
264*d780102eSjmmv metadata["require.progs"] = "cp";
265*d780102eSjmmv do_check("", metadata);
266*d780102eSjmmv }
267*d780102eSjmmv
268*d780102eSjmmv ATF_TEST_CASE(require_progs_one_missing);
ATF_TEST_CASE_HEAD(require_progs_one_missing)269*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_one_missing) {}
ATF_TEST_CASE_BODY(require_progs_one_missing)270*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_one_missing) {
271*d780102eSjmmv vars_map metadata;
272*d780102eSjmmv metadata["require.progs"] = "cp __non-existent__";
273*d780102eSjmmv do_check("Required program '__non-existent__' not found in the PATH",
274*d780102eSjmmv metadata);
275*d780102eSjmmv }
276*d780102eSjmmv
277*d780102eSjmmv ATF_TEST_CASE(require_progs_one_fail);
ATF_TEST_CASE_HEAD(require_progs_one_fail)278*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_one_fail) {}
ATF_TEST_CASE_BODY(require_progs_one_fail)279*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_one_fail) {
280*d780102eSjmmv vars_map metadata;
281*d780102eSjmmv metadata["require.progs"] = "bin/cp";
282*d780102eSjmmv ATF_REQUIRE_THROW(std::runtime_error,
283*d780102eSjmmv impl::check_requirements(metadata, no_config));
284*d780102eSjmmv }
285*d780102eSjmmv
286*d780102eSjmmv ATF_TEST_CASE(require_progs_many_ok);
ATF_TEST_CASE_HEAD(require_progs_many_ok)287*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_many_ok) {}
ATF_TEST_CASE_BODY(require_progs_many_ok)288*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_many_ok) {
289*d780102eSjmmv vars_map metadata;
290*d780102eSjmmv metadata["require.progs"] = "cp ls mv";
291*d780102eSjmmv do_check("", metadata);
292*d780102eSjmmv }
293*d780102eSjmmv
294*d780102eSjmmv ATF_TEST_CASE(require_progs_many_missing);
ATF_TEST_CASE_HEAD(require_progs_many_missing)295*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_many_missing) {}
ATF_TEST_CASE_BODY(require_progs_many_missing)296*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_many_missing) {
297*d780102eSjmmv vars_map metadata;
298*d780102eSjmmv metadata["require.progs"] = "mv ls __foo__ cp";
299*d780102eSjmmv do_check("Required program '__foo__' not found in the PATH", metadata);
300*d780102eSjmmv }
301*d780102eSjmmv
302*d780102eSjmmv ATF_TEST_CASE(require_progs_many_fail);
ATF_TEST_CASE_HEAD(require_progs_many_fail)303*d780102eSjmmv ATF_TEST_CASE_HEAD(require_progs_many_fail) {}
ATF_TEST_CASE_BODY(require_progs_many_fail)304*d780102eSjmmv ATF_TEST_CASE_BODY(require_progs_many_fail) {
305*d780102eSjmmv vars_map metadata;
306*d780102eSjmmv metadata["require.progs"] = "ls cp ../bin/cp";
307*d780102eSjmmv ATF_REQUIRE_THROW(std::runtime_error,
308*d780102eSjmmv impl::check_requirements(metadata, no_config));
309*d780102eSjmmv }
310*d780102eSjmmv
311*d780102eSjmmv // -------------------------------------------------------------------------
312*d780102eSjmmv // Tests for the require.user metadata property.
313*d780102eSjmmv // -------------------------------------------------------------------------
314*d780102eSjmmv
315*d780102eSjmmv ATF_TEST_CASE(require_user_root);
ATF_TEST_CASE_HEAD(require_user_root)316*d780102eSjmmv ATF_TEST_CASE_HEAD(require_user_root) {}
ATF_TEST_CASE_BODY(require_user_root)317*d780102eSjmmv ATF_TEST_CASE_BODY(require_user_root) {
318*d780102eSjmmv vars_map metadata;
319*d780102eSjmmv metadata["require.user"] = "root";
320*d780102eSjmmv if (tools::user::is_root())
321*d780102eSjmmv do_check("", metadata);
322*d780102eSjmmv else
323*d780102eSjmmv do_check("Requires root privileges", metadata);
324*d780102eSjmmv }
325*d780102eSjmmv
326*d780102eSjmmv ATF_TEST_CASE(require_user_unprivileged);
ATF_TEST_CASE_HEAD(require_user_unprivileged)327*d780102eSjmmv ATF_TEST_CASE_HEAD(require_user_unprivileged) {}
ATF_TEST_CASE_BODY(require_user_unprivileged)328*d780102eSjmmv ATF_TEST_CASE_BODY(require_user_unprivileged) {
329*d780102eSjmmv vars_map metadata;
330*d780102eSjmmv metadata["require.user"] = "unprivileged";
331*d780102eSjmmv if (tools::user::is_root())
332*d780102eSjmmv do_check("Requires an unprivileged user and the 'unprivileged-user' "
333*d780102eSjmmv "configuration variable is not set", metadata);
334*d780102eSjmmv else
335*d780102eSjmmv do_check("", metadata);
336*d780102eSjmmv }
337*d780102eSjmmv
338*d780102eSjmmv ATF_TEST_CASE(require_user_fail);
ATF_TEST_CASE_HEAD(require_user_fail)339*d780102eSjmmv ATF_TEST_CASE_HEAD(require_user_fail) {}
ATF_TEST_CASE_BODY(require_user_fail)340*d780102eSjmmv ATF_TEST_CASE_BODY(require_user_fail) {
341*d780102eSjmmv vars_map metadata;
342*d780102eSjmmv metadata["require.user"] = "nobody";
343*d780102eSjmmv ATF_REQUIRE_THROW(std::runtime_error,
344*d780102eSjmmv impl::check_requirements(metadata, no_config));
345*d780102eSjmmv }
346*d780102eSjmmv
347*d780102eSjmmv // -------------------------------------------------------------------------
348*d780102eSjmmv // Main.
349*d780102eSjmmv // -------------------------------------------------------------------------
350*d780102eSjmmv
ATF_INIT_TEST_CASES(tcs)351*d780102eSjmmv ATF_INIT_TEST_CASES(tcs)
352*d780102eSjmmv {
353*d780102eSjmmv // Add test cases for require.arch.
354*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_arch_one_ok);
355*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_arch_one_fail);
356*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_arch_many_ok);
357*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_arch_many_fail);
358*d780102eSjmmv
359*d780102eSjmmv // Add test cases for require.config.
360*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_config_one_ok);
361*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_config_one_fail);
362*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_config_many_ok);
363*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_config_many_fail);
364*d780102eSjmmv
365*d780102eSjmmv // Add test cases for require.files.
366*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_one_ok);
367*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_one_missing);
368*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_one_fail);
369*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_many_ok);
370*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_many_missing);
371*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_files_many_fail);
372*d780102eSjmmv
373*d780102eSjmmv // Add test cases for require.machine.
374*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_machine_one_ok);
375*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_machine_one_fail);
376*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_machine_many_ok);
377*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_machine_many_fail);
378*d780102eSjmmv
379*d780102eSjmmv // Add test cases for require.memory.
380*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_memory_ok);
381*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_memory_not_enough);
382*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_memory_fail);
383*d780102eSjmmv
384*d780102eSjmmv // Add test cases for require.progs.
385*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_one_ok);
386*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_one_missing);
387*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_one_fail);
388*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_many_ok);
389*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_many_missing);
390*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_progs_many_fail);
391*d780102eSjmmv
392*d780102eSjmmv // Add test cases for require.user.
393*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_user_root);
394*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_user_unprivileged);
395*d780102eSjmmv ATF_ADD_TEST_CASE(tcs, require_user_fail);
396*d780102eSjmmv }
397