xref: /netbsd-src/external/bsd/atf/dist/tools/fs_test.cpp (revision d780102efefa02003390cc43ea410dbd0ebb4a85)
1*d780102eSjmmv //
2*d780102eSjmmv // Automated Testing Framework (atf)
3*d780102eSjmmv //
4*d780102eSjmmv // Copyright (c) 2007 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 extern "C" {
31*d780102eSjmmv #include <sys/types.h>
32*d780102eSjmmv #include <sys/stat.h>
33*d780102eSjmmv }
34*d780102eSjmmv 
35*d780102eSjmmv #include <cerrno>
36*d780102eSjmmv #include <cstdio>
37*d780102eSjmmv #include <fstream>
38*d780102eSjmmv 
39*d780102eSjmmv #include <atf-c++.hpp>
40*d780102eSjmmv 
41*d780102eSjmmv #include "exceptions.hpp"
42*d780102eSjmmv #include "fs.hpp"
43*d780102eSjmmv #include "user.hpp"
44*d780102eSjmmv 
45*d780102eSjmmv // ------------------------------------------------------------------------
46*d780102eSjmmv // Auxiliary functions.
47*d780102eSjmmv // ------------------------------------------------------------------------
48*d780102eSjmmv 
49*d780102eSjmmv static
50*d780102eSjmmv void
create_file(const char * name)51*d780102eSjmmv create_file(const char *name)
52*d780102eSjmmv {
53*d780102eSjmmv     std::ofstream os(name);
54*d780102eSjmmv     os.close();
55*d780102eSjmmv }
56*d780102eSjmmv 
57*d780102eSjmmv static
58*d780102eSjmmv void
create_files(void)59*d780102eSjmmv create_files(void)
60*d780102eSjmmv {
61*d780102eSjmmv     ::mkdir("files", 0755);
62*d780102eSjmmv     ::mkdir("files/dir", 0755);
63*d780102eSjmmv 
64*d780102eSjmmv     std::ofstream os("files/reg");
65*d780102eSjmmv     os.close();
66*d780102eSjmmv 
67*d780102eSjmmv     // TODO: Should create all other file types (blk, chr, fifo, lnk, sock)
68*d780102eSjmmv     // and test for them... but the underlying file system may not support
69*d780102eSjmmv     // most of these.  Specially as we are working on /tmp, which can be
70*d780102eSjmmv     // mounted with flags such as "nodev".  See how to deal with this
71*d780102eSjmmv     // situation.
72*d780102eSjmmv }
73*d780102eSjmmv 
74*d780102eSjmmv // ------------------------------------------------------------------------
75*d780102eSjmmv // Test cases for the "path" class.
76*d780102eSjmmv // ------------------------------------------------------------------------
77*d780102eSjmmv 
78*d780102eSjmmv ATF_TEST_CASE(path_normalize);
ATF_TEST_CASE_HEAD(path_normalize)79*d780102eSjmmv ATF_TEST_CASE_HEAD(path_normalize)
80*d780102eSjmmv {
81*d780102eSjmmv     set_md_var("descr", "Tests the path's normalization");
82*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_normalize)83*d780102eSjmmv ATF_TEST_CASE_BODY(path_normalize)
84*d780102eSjmmv {
85*d780102eSjmmv     using tools::fs::path;
86*d780102eSjmmv 
87*d780102eSjmmv     ATF_REQUIRE_EQ(path(".").str(), ".");
88*d780102eSjmmv     ATF_REQUIRE_EQ(path("..").str(), "..");
89*d780102eSjmmv 
90*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo").str(), "foo");
91*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo/bar").str(), "foo/bar");
92*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo/bar/").str(), "foo/bar");
93*d780102eSjmmv 
94*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo").str(), "/foo");
95*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo/bar").str(), "/foo/bar");
96*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo/bar/").str(), "/foo/bar");
97*d780102eSjmmv 
98*d780102eSjmmv     ATF_REQUIRE_EQ(path("///foo").str(), "/foo");
99*d780102eSjmmv     ATF_REQUIRE_EQ(path("///foo///bar").str(), "/foo/bar");
100*d780102eSjmmv     ATF_REQUIRE_EQ(path("///foo///bar///").str(), "/foo/bar");
101*d780102eSjmmv }
102*d780102eSjmmv 
103*d780102eSjmmv ATF_TEST_CASE(path_is_absolute);
ATF_TEST_CASE_HEAD(path_is_absolute)104*d780102eSjmmv ATF_TEST_CASE_HEAD(path_is_absolute)
105*d780102eSjmmv {
106*d780102eSjmmv     set_md_var("descr", "Tests the path::is_absolute function");
107*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_is_absolute)108*d780102eSjmmv ATF_TEST_CASE_BODY(path_is_absolute)
109*d780102eSjmmv {
110*d780102eSjmmv     using tools::fs::path;
111*d780102eSjmmv 
112*d780102eSjmmv     ATF_REQUIRE( path("/").is_absolute());
113*d780102eSjmmv     ATF_REQUIRE( path("////").is_absolute());
114*d780102eSjmmv     ATF_REQUIRE( path("////a").is_absolute());
115*d780102eSjmmv     ATF_REQUIRE( path("//a//").is_absolute());
116*d780102eSjmmv     ATF_REQUIRE(!path("a////").is_absolute());
117*d780102eSjmmv     ATF_REQUIRE(!path("../foo").is_absolute());
118*d780102eSjmmv }
119*d780102eSjmmv 
120*d780102eSjmmv ATF_TEST_CASE(path_is_root);
ATF_TEST_CASE_HEAD(path_is_root)121*d780102eSjmmv ATF_TEST_CASE_HEAD(path_is_root)
122*d780102eSjmmv {
123*d780102eSjmmv     set_md_var("descr", "Tests the path::is_root function");
124*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_is_root)125*d780102eSjmmv ATF_TEST_CASE_BODY(path_is_root)
126*d780102eSjmmv {
127*d780102eSjmmv     using tools::fs::path;
128*d780102eSjmmv 
129*d780102eSjmmv     ATF_REQUIRE( path("/").is_root());
130*d780102eSjmmv     ATF_REQUIRE( path("////").is_root());
131*d780102eSjmmv     ATF_REQUIRE(!path("////a").is_root());
132*d780102eSjmmv     ATF_REQUIRE(!path("//a//").is_root());
133*d780102eSjmmv     ATF_REQUIRE(!path("a////").is_root());
134*d780102eSjmmv     ATF_REQUIRE(!path("../foo").is_root());
135*d780102eSjmmv }
136*d780102eSjmmv 
137*d780102eSjmmv ATF_TEST_CASE(path_branch_path);
ATF_TEST_CASE_HEAD(path_branch_path)138*d780102eSjmmv ATF_TEST_CASE_HEAD(path_branch_path)
139*d780102eSjmmv {
140*d780102eSjmmv     set_md_var("descr", "Tests the path::branch_path function");
141*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_branch_path)142*d780102eSjmmv ATF_TEST_CASE_BODY(path_branch_path)
143*d780102eSjmmv {
144*d780102eSjmmv     using tools::fs::path;
145*d780102eSjmmv 
146*d780102eSjmmv     ATF_REQUIRE_EQ(path(".").branch_path().str(), ".");
147*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo").branch_path().str(), ".");
148*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo/bar").branch_path().str(), "foo");
149*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo").branch_path().str(), "/");
150*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo/bar").branch_path().str(), "/foo");
151*d780102eSjmmv }
152*d780102eSjmmv 
153*d780102eSjmmv ATF_TEST_CASE(path_leaf_name);
ATF_TEST_CASE_HEAD(path_leaf_name)154*d780102eSjmmv ATF_TEST_CASE_HEAD(path_leaf_name)
155*d780102eSjmmv {
156*d780102eSjmmv     set_md_var("descr", "Tests the path::leaf_name function");
157*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_leaf_name)158*d780102eSjmmv ATF_TEST_CASE_BODY(path_leaf_name)
159*d780102eSjmmv {
160*d780102eSjmmv     using tools::fs::path;
161*d780102eSjmmv 
162*d780102eSjmmv     ATF_REQUIRE_EQ(path(".").leaf_name(), ".");
163*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo").leaf_name(), "foo");
164*d780102eSjmmv     ATF_REQUIRE_EQ(path("foo/bar").leaf_name(), "bar");
165*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo").leaf_name(), "foo");
166*d780102eSjmmv     ATF_REQUIRE_EQ(path("/foo/bar").leaf_name(), "bar");
167*d780102eSjmmv }
168*d780102eSjmmv 
169*d780102eSjmmv ATF_TEST_CASE(path_compare_equal);
ATF_TEST_CASE_HEAD(path_compare_equal)170*d780102eSjmmv ATF_TEST_CASE_HEAD(path_compare_equal)
171*d780102eSjmmv {
172*d780102eSjmmv     set_md_var("descr", "Tests the comparison for equality between paths");
173*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_compare_equal)174*d780102eSjmmv ATF_TEST_CASE_BODY(path_compare_equal)
175*d780102eSjmmv {
176*d780102eSjmmv     using tools::fs::path;
177*d780102eSjmmv 
178*d780102eSjmmv     ATF_REQUIRE(path("/") == path("///"));
179*d780102eSjmmv     ATF_REQUIRE(path("/a") == path("///a"));
180*d780102eSjmmv     ATF_REQUIRE(path("/a") == path("///a///"));
181*d780102eSjmmv 
182*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") == path("a//b//c"));
183*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") == path("a//b//c///"));
184*d780102eSjmmv }
185*d780102eSjmmv 
186*d780102eSjmmv ATF_TEST_CASE(path_compare_different);
ATF_TEST_CASE_HEAD(path_compare_different)187*d780102eSjmmv ATF_TEST_CASE_HEAD(path_compare_different)
188*d780102eSjmmv {
189*d780102eSjmmv     set_md_var("descr", "Tests the comparison for difference between paths");
190*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_compare_different)191*d780102eSjmmv ATF_TEST_CASE_BODY(path_compare_different)
192*d780102eSjmmv {
193*d780102eSjmmv     using tools::fs::path;
194*d780102eSjmmv 
195*d780102eSjmmv     ATF_REQUIRE(path("/") != path("//a/"));
196*d780102eSjmmv     ATF_REQUIRE(path("/a") != path("a///"));
197*d780102eSjmmv 
198*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") != path("a/b"));
199*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") != path("a//b"));
200*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") != path("/a/b/c"));
201*d780102eSjmmv     ATF_REQUIRE(path("a/b/c") != path("/a//b//c"));
202*d780102eSjmmv }
203*d780102eSjmmv 
204*d780102eSjmmv ATF_TEST_CASE(path_concat);
ATF_TEST_CASE_HEAD(path_concat)205*d780102eSjmmv ATF_TEST_CASE_HEAD(path_concat)
206*d780102eSjmmv {
207*d780102eSjmmv     set_md_var("descr", "Tests the concatenation of multiple paths");
208*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_concat)209*d780102eSjmmv ATF_TEST_CASE_BODY(path_concat)
210*d780102eSjmmv {
211*d780102eSjmmv     using tools::fs::path;
212*d780102eSjmmv 
213*d780102eSjmmv     ATF_REQUIRE_EQ((path("foo") / "bar").str(), "foo/bar");
214*d780102eSjmmv     ATF_REQUIRE_EQ((path("foo/") / "/bar").str(), "foo/bar");
215*d780102eSjmmv     ATF_REQUIRE_EQ((path("foo/") / "/bar/baz").str(), "foo/bar/baz");
216*d780102eSjmmv     ATF_REQUIRE_EQ((path("foo/") / "///bar///baz").str(), "foo/bar/baz");
217*d780102eSjmmv }
218*d780102eSjmmv 
219*d780102eSjmmv ATF_TEST_CASE(path_to_absolute);
ATF_TEST_CASE_HEAD(path_to_absolute)220*d780102eSjmmv ATF_TEST_CASE_HEAD(path_to_absolute)
221*d780102eSjmmv {
222*d780102eSjmmv     set_md_var("descr", "Tests the conversion of a relative path to an "
223*d780102eSjmmv                "absolute one");
224*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_to_absolute)225*d780102eSjmmv ATF_TEST_CASE_BODY(path_to_absolute)
226*d780102eSjmmv {
227*d780102eSjmmv     using tools::fs::file_info;
228*d780102eSjmmv     using tools::fs::path;
229*d780102eSjmmv 
230*d780102eSjmmv     create_files();
231*d780102eSjmmv 
232*d780102eSjmmv     {
233*d780102eSjmmv         const path p(".");
234*d780102eSjmmv         path pa = p.to_absolute();
235*d780102eSjmmv         ATF_REQUIRE(pa.is_absolute());
236*d780102eSjmmv 
237*d780102eSjmmv         file_info fi(p);
238*d780102eSjmmv         file_info fia(pa);
239*d780102eSjmmv         ATF_REQUIRE_EQ(fi.get_device(), fia.get_device());
240*d780102eSjmmv         ATF_REQUIRE_EQ(fi.get_inode(), fia.get_inode());
241*d780102eSjmmv     }
242*d780102eSjmmv 
243*d780102eSjmmv     {
244*d780102eSjmmv         const path p("files/reg");
245*d780102eSjmmv         path pa = p.to_absolute();
246*d780102eSjmmv         ATF_REQUIRE(pa.is_absolute());
247*d780102eSjmmv 
248*d780102eSjmmv         file_info fi(p);
249*d780102eSjmmv         file_info fia(pa);
250*d780102eSjmmv         ATF_REQUIRE_EQ(fi.get_device(), fia.get_device());
251*d780102eSjmmv         ATF_REQUIRE_EQ(fi.get_inode(), fia.get_inode());
252*d780102eSjmmv     }
253*d780102eSjmmv }
254*d780102eSjmmv 
255*d780102eSjmmv ATF_TEST_CASE(path_op_less);
ATF_TEST_CASE_HEAD(path_op_less)256*d780102eSjmmv ATF_TEST_CASE_HEAD(path_op_less)
257*d780102eSjmmv {
258*d780102eSjmmv     set_md_var("descr", "Tests that the path's less-than operator works");
259*d780102eSjmmv }
ATF_TEST_CASE_BODY(path_op_less)260*d780102eSjmmv ATF_TEST_CASE_BODY(path_op_less)
261*d780102eSjmmv {
262*d780102eSjmmv     using tools::fs::path;
263*d780102eSjmmv 
264*d780102eSjmmv     create_files();
265*d780102eSjmmv 
266*d780102eSjmmv     ATF_REQUIRE(!(path("aaa") < path("aaa")));
267*d780102eSjmmv 
268*d780102eSjmmv     ATF_REQUIRE(  path("aab") < path("abc"));
269*d780102eSjmmv     ATF_REQUIRE(!(path("abc") < path("aab")));
270*d780102eSjmmv }
271*d780102eSjmmv 
272*d780102eSjmmv // ------------------------------------------------------------------------
273*d780102eSjmmv // Test cases for the "directory" class.
274*d780102eSjmmv // ------------------------------------------------------------------------
275*d780102eSjmmv 
276*d780102eSjmmv ATF_TEST_CASE(directory_read);
ATF_TEST_CASE_HEAD(directory_read)277*d780102eSjmmv ATF_TEST_CASE_HEAD(directory_read)
278*d780102eSjmmv {
279*d780102eSjmmv     set_md_var("descr", "Tests the directory class creation, which reads "
280*d780102eSjmmv                "the contents of a directory");
281*d780102eSjmmv }
ATF_TEST_CASE_BODY(directory_read)282*d780102eSjmmv ATF_TEST_CASE_BODY(directory_read)
283*d780102eSjmmv {
284*d780102eSjmmv     using tools::fs::directory;
285*d780102eSjmmv     using tools::fs::path;
286*d780102eSjmmv 
287*d780102eSjmmv     create_files();
288*d780102eSjmmv 
289*d780102eSjmmv     directory d(path("files"));
290*d780102eSjmmv     ATF_REQUIRE_EQ(d.size(), 4);
291*d780102eSjmmv     ATF_REQUIRE(d.find(".") != d.end());
292*d780102eSjmmv     ATF_REQUIRE(d.find("..") != d.end());
293*d780102eSjmmv     ATF_REQUIRE(d.find("dir") != d.end());
294*d780102eSjmmv     ATF_REQUIRE(d.find("reg") != d.end());
295*d780102eSjmmv }
296*d780102eSjmmv 
297*d780102eSjmmv ATF_TEST_CASE(directory_file_info);
ATF_TEST_CASE_HEAD(directory_file_info)298*d780102eSjmmv ATF_TEST_CASE_HEAD(directory_file_info)
299*d780102eSjmmv {
300*d780102eSjmmv     set_md_var("descr", "Tests that the file_info objects attached to the "
301*d780102eSjmmv                "directory are valid");
302*d780102eSjmmv }
ATF_TEST_CASE_BODY(directory_file_info)303*d780102eSjmmv ATF_TEST_CASE_BODY(directory_file_info)
304*d780102eSjmmv {
305*d780102eSjmmv     using tools::fs::directory;
306*d780102eSjmmv     using tools::fs::file_info;
307*d780102eSjmmv     using tools::fs::path;
308*d780102eSjmmv 
309*d780102eSjmmv     create_files();
310*d780102eSjmmv 
311*d780102eSjmmv     directory d(path("files"));
312*d780102eSjmmv 
313*d780102eSjmmv     {
314*d780102eSjmmv         directory::const_iterator iter = d.find("dir");
315*d780102eSjmmv         ATF_REQUIRE(iter != d.end());
316*d780102eSjmmv         const file_info& fi = (*iter).second;
317*d780102eSjmmv         ATF_REQUIRE(fi.get_type() == file_info::dir_type);
318*d780102eSjmmv     }
319*d780102eSjmmv 
320*d780102eSjmmv     {
321*d780102eSjmmv         directory::const_iterator iter = d.find("reg");
322*d780102eSjmmv         ATF_REQUIRE(iter != d.end());
323*d780102eSjmmv         const file_info& fi = (*iter).second;
324*d780102eSjmmv         ATF_REQUIRE(fi.get_type() == file_info::reg_type);
325*d780102eSjmmv     }
326*d780102eSjmmv }
327*d780102eSjmmv 
328*d780102eSjmmv ATF_TEST_CASE(directory_names);
ATF_TEST_CASE_HEAD(directory_names)329*d780102eSjmmv ATF_TEST_CASE_HEAD(directory_names)
330*d780102eSjmmv {
331*d780102eSjmmv     set_md_var("descr", "Tests the directory's names method");
332*d780102eSjmmv }
ATF_TEST_CASE_BODY(directory_names)333*d780102eSjmmv ATF_TEST_CASE_BODY(directory_names)
334*d780102eSjmmv {
335*d780102eSjmmv     using tools::fs::directory;
336*d780102eSjmmv     using tools::fs::path;
337*d780102eSjmmv 
338*d780102eSjmmv     create_files();
339*d780102eSjmmv 
340*d780102eSjmmv     directory d(path("files"));
341*d780102eSjmmv     std::set< std::string > ns = d.names();
342*d780102eSjmmv     ATF_REQUIRE_EQ(ns.size(), 4);
343*d780102eSjmmv     ATF_REQUIRE(ns.find(".") != ns.end());
344*d780102eSjmmv     ATF_REQUIRE(ns.find("..") != ns.end());
345*d780102eSjmmv     ATF_REQUIRE(ns.find("dir") != ns.end());
346*d780102eSjmmv     ATF_REQUIRE(ns.find("reg") != ns.end());
347*d780102eSjmmv }
348*d780102eSjmmv 
349*d780102eSjmmv // ------------------------------------------------------------------------
350*d780102eSjmmv // Test cases for the "file_info" class.
351*d780102eSjmmv // ------------------------------------------------------------------------
352*d780102eSjmmv 
353*d780102eSjmmv ATF_TEST_CASE(file_info_stat);
ATF_TEST_CASE_HEAD(file_info_stat)354*d780102eSjmmv ATF_TEST_CASE_HEAD(file_info_stat)
355*d780102eSjmmv {
356*d780102eSjmmv     set_md_var("descr", "Tests the file_info creation and its basic contents");
357*d780102eSjmmv }
ATF_TEST_CASE_BODY(file_info_stat)358*d780102eSjmmv ATF_TEST_CASE_BODY(file_info_stat)
359*d780102eSjmmv {
360*d780102eSjmmv     using tools::fs::file_info;
361*d780102eSjmmv     using tools::fs::path;
362*d780102eSjmmv 
363*d780102eSjmmv     create_files();
364*d780102eSjmmv 
365*d780102eSjmmv     {
366*d780102eSjmmv         path p("files/dir");
367*d780102eSjmmv         file_info fi(p);
368*d780102eSjmmv         ATF_REQUIRE(fi.get_type() == file_info::dir_type);
369*d780102eSjmmv     }
370*d780102eSjmmv 
371*d780102eSjmmv     {
372*d780102eSjmmv         path p("files/reg");
373*d780102eSjmmv         file_info fi(p);
374*d780102eSjmmv         ATF_REQUIRE(fi.get_type() == file_info::reg_type);
375*d780102eSjmmv     }
376*d780102eSjmmv }
377*d780102eSjmmv 
378*d780102eSjmmv ATF_TEST_CASE(file_info_perms);
ATF_TEST_CASE_HEAD(file_info_perms)379*d780102eSjmmv ATF_TEST_CASE_HEAD(file_info_perms)
380*d780102eSjmmv {
381*d780102eSjmmv     set_md_var("descr", "Tests the file_info methods to get the file's "
382*d780102eSjmmv                "permissions");
383*d780102eSjmmv }
ATF_TEST_CASE_BODY(file_info_perms)384*d780102eSjmmv ATF_TEST_CASE_BODY(file_info_perms)
385*d780102eSjmmv {
386*d780102eSjmmv     using tools::fs::file_info;
387*d780102eSjmmv     using tools::fs::path;
388*d780102eSjmmv 
389*d780102eSjmmv     path p("file");
390*d780102eSjmmv 
391*d780102eSjmmv     std::ofstream os(p.c_str());
392*d780102eSjmmv     os.close();
393*d780102eSjmmv 
394*d780102eSjmmv #define perms(ur, uw, ux, gr, gw, gx, othr, othw, othx) \
395*d780102eSjmmv     { \
396*d780102eSjmmv         file_info fi(p); \
397*d780102eSjmmv         ATF_REQUIRE(fi.is_owner_readable() == ur); \
398*d780102eSjmmv         ATF_REQUIRE(fi.is_owner_writable() == uw); \
399*d780102eSjmmv         ATF_REQUIRE(fi.is_owner_executable() == ux); \
400*d780102eSjmmv         ATF_REQUIRE(fi.is_group_readable() == gr); \
401*d780102eSjmmv         ATF_REQUIRE(fi.is_group_writable() == gw); \
402*d780102eSjmmv         ATF_REQUIRE(fi.is_group_executable() == gx); \
403*d780102eSjmmv         ATF_REQUIRE(fi.is_other_readable() == othr); \
404*d780102eSjmmv         ATF_REQUIRE(fi.is_other_writable() == othw); \
405*d780102eSjmmv         ATF_REQUIRE(fi.is_other_executable() == othx); \
406*d780102eSjmmv     }
407*d780102eSjmmv 
408*d780102eSjmmv     ::chmod(p.c_str(), 0000);
409*d780102eSjmmv     perms(false, false, false, false, false, false, false, false, false);
410*d780102eSjmmv 
411*d780102eSjmmv     ::chmod(p.c_str(), 0001);
412*d780102eSjmmv     perms(false, false, false, false, false, false, false, false, true);
413*d780102eSjmmv 
414*d780102eSjmmv     ::chmod(p.c_str(), 0010);
415*d780102eSjmmv     perms(false, false, false, false, false, true, false, false, false);
416*d780102eSjmmv 
417*d780102eSjmmv     ::chmod(p.c_str(), 0100);
418*d780102eSjmmv     perms(false, false, true, false, false, false, false, false, false);
419*d780102eSjmmv 
420*d780102eSjmmv     ::chmod(p.c_str(), 0002);
421*d780102eSjmmv     perms(false, false, false, false, false, false, false, true, false);
422*d780102eSjmmv 
423*d780102eSjmmv     ::chmod(p.c_str(), 0020);
424*d780102eSjmmv     perms(false, false, false, false, true, false, false, false, false);
425*d780102eSjmmv 
426*d780102eSjmmv     ::chmod(p.c_str(), 0200);
427*d780102eSjmmv     perms(false, true, false, false, false, false, false, false, false);
428*d780102eSjmmv 
429*d780102eSjmmv     ::chmod(p.c_str(), 0004);
430*d780102eSjmmv     perms(false, false, false, false, false, false, true, false, false);
431*d780102eSjmmv 
432*d780102eSjmmv     ::chmod(p.c_str(), 0040);
433*d780102eSjmmv     perms(false, false, false, true, false, false, false, false, false);
434*d780102eSjmmv 
435*d780102eSjmmv     ::chmod(p.c_str(), 0400);
436*d780102eSjmmv     perms(true, false, false, false, false, false, false, false, false);
437*d780102eSjmmv 
438*d780102eSjmmv     ::chmod(p.c_str(), 0644);
439*d780102eSjmmv     perms(true, true, false, true, false, false, true, false, false);
440*d780102eSjmmv 
441*d780102eSjmmv     ::chmod(p.c_str(), 0755);
442*d780102eSjmmv     perms(true, true, true, true, false, true, true, false, true);
443*d780102eSjmmv 
444*d780102eSjmmv     ::chmod(p.c_str(), 0777);
445*d780102eSjmmv     perms(true, true, true, true, true, true, true, true, true);
446*d780102eSjmmv 
447*d780102eSjmmv #undef perms
448*d780102eSjmmv }
449*d780102eSjmmv 
450*d780102eSjmmv // ------------------------------------------------------------------------
451*d780102eSjmmv // Test cases for the "temp_dir" class.
452*d780102eSjmmv // ------------------------------------------------------------------------
453*d780102eSjmmv 
454*d780102eSjmmv ATF_TEST_CASE(temp_dir_raii);
ATF_TEST_CASE_HEAD(temp_dir_raii)455*d780102eSjmmv ATF_TEST_CASE_HEAD(temp_dir_raii)
456*d780102eSjmmv {
457*d780102eSjmmv     set_md_var("descr", "Tests the RAII behavior of the temp_dir class");
458*d780102eSjmmv }
ATF_TEST_CASE_BODY(temp_dir_raii)459*d780102eSjmmv ATF_TEST_CASE_BODY(temp_dir_raii)
460*d780102eSjmmv {
461*d780102eSjmmv     tools::fs::path t1("non-existent");
462*d780102eSjmmv     tools::fs::path t2("non-existent");
463*d780102eSjmmv 
464*d780102eSjmmv     {
465*d780102eSjmmv         tools::fs::path tmpl("testdir.XXXXXX");
466*d780102eSjmmv         tools::fs::temp_dir td1(tmpl);
467*d780102eSjmmv         tools::fs::temp_dir td2(tmpl);
468*d780102eSjmmv         t1 = td1.get_path();
469*d780102eSjmmv         t2 = td2.get_path();
470*d780102eSjmmv         ATF_REQUIRE(t1.str().find("XXXXXX") == std::string::npos);
471*d780102eSjmmv         ATF_REQUIRE(t2.str().find("XXXXXX") == std::string::npos);
472*d780102eSjmmv         ATF_REQUIRE(t1 != t2);
473*d780102eSjmmv         ATF_REQUIRE(!tools::fs::exists(tmpl));
474*d780102eSjmmv         ATF_REQUIRE( tools::fs::exists(t1));
475*d780102eSjmmv         ATF_REQUIRE( tools::fs::exists(t2));
476*d780102eSjmmv 
477*d780102eSjmmv         tools::fs::file_info fi1(t1);
478*d780102eSjmmv         ATF_REQUIRE( fi1.is_owner_readable());
479*d780102eSjmmv         ATF_REQUIRE( fi1.is_owner_writable());
480*d780102eSjmmv         ATF_REQUIRE( fi1.is_owner_executable());
481*d780102eSjmmv         ATF_REQUIRE(!fi1.is_group_readable());
482*d780102eSjmmv         ATF_REQUIRE(!fi1.is_group_writable());
483*d780102eSjmmv         ATF_REQUIRE(!fi1.is_group_executable());
484*d780102eSjmmv         ATF_REQUIRE(!fi1.is_other_readable());
485*d780102eSjmmv         ATF_REQUIRE(!fi1.is_other_writable());
486*d780102eSjmmv         ATF_REQUIRE(!fi1.is_other_executable());
487*d780102eSjmmv 
488*d780102eSjmmv         tools::fs::file_info fi2(t2);
489*d780102eSjmmv         ATF_REQUIRE( fi2.is_owner_readable());
490*d780102eSjmmv         ATF_REQUIRE( fi2.is_owner_writable());
491*d780102eSjmmv         ATF_REQUIRE( fi2.is_owner_executable());
492*d780102eSjmmv         ATF_REQUIRE(!fi2.is_group_readable());
493*d780102eSjmmv         ATF_REQUIRE(!fi2.is_group_writable());
494*d780102eSjmmv         ATF_REQUIRE(!fi2.is_group_executable());
495*d780102eSjmmv         ATF_REQUIRE(!fi2.is_other_readable());
496*d780102eSjmmv         ATF_REQUIRE(!fi2.is_other_writable());
497*d780102eSjmmv         ATF_REQUIRE(!fi2.is_other_executable());
498*d780102eSjmmv     }
499*d780102eSjmmv 
500*d780102eSjmmv     ATF_REQUIRE(t1.str() != "non-existent");
501*d780102eSjmmv     ATF_REQUIRE(!tools::fs::exists(t1));
502*d780102eSjmmv     ATF_REQUIRE(t2.str() != "non-existent");
503*d780102eSjmmv     ATF_REQUIRE(!tools::fs::exists(t2));
504*d780102eSjmmv }
505*d780102eSjmmv 
506*d780102eSjmmv 
507*d780102eSjmmv // ------------------------------------------------------------------------
508*d780102eSjmmv // Test cases for the free functions.
509*d780102eSjmmv // ------------------------------------------------------------------------
510*d780102eSjmmv 
511*d780102eSjmmv ATF_TEST_CASE(exists);
ATF_TEST_CASE_HEAD(exists)512*d780102eSjmmv ATF_TEST_CASE_HEAD(exists)
513*d780102eSjmmv {
514*d780102eSjmmv     set_md_var("descr", "Tests the exists function");
515*d780102eSjmmv }
ATF_TEST_CASE_BODY(exists)516*d780102eSjmmv ATF_TEST_CASE_BODY(exists)
517*d780102eSjmmv {
518*d780102eSjmmv     using tools::fs::exists;
519*d780102eSjmmv     using tools::fs::path;
520*d780102eSjmmv 
521*d780102eSjmmv     create_files();
522*d780102eSjmmv 
523*d780102eSjmmv     ATF_REQUIRE( exists(path("files")));
524*d780102eSjmmv     ATF_REQUIRE(!exists(path("file")));
525*d780102eSjmmv     ATF_REQUIRE(!exists(path("files2")));
526*d780102eSjmmv 
527*d780102eSjmmv     ATF_REQUIRE( exists(path("files/.")));
528*d780102eSjmmv     ATF_REQUIRE( exists(path("files/..")));
529*d780102eSjmmv     ATF_REQUIRE( exists(path("files/dir")));
530*d780102eSjmmv     ATF_REQUIRE( exists(path("files/reg")));
531*d780102eSjmmv     ATF_REQUIRE(!exists(path("files/foo")));
532*d780102eSjmmv }
533*d780102eSjmmv 
534*d780102eSjmmv ATF_TEST_CASE(is_executable);
ATF_TEST_CASE_HEAD(is_executable)535*d780102eSjmmv ATF_TEST_CASE_HEAD(is_executable)
536*d780102eSjmmv {
537*d780102eSjmmv     set_md_var("descr", "Tests the is_executable function");
538*d780102eSjmmv }
ATF_TEST_CASE_BODY(is_executable)539*d780102eSjmmv ATF_TEST_CASE_BODY(is_executable)
540*d780102eSjmmv {
541*d780102eSjmmv     using tools::fs::is_executable;
542*d780102eSjmmv     using tools::fs::path;
543*d780102eSjmmv 
544*d780102eSjmmv     create_files();
545*d780102eSjmmv 
546*d780102eSjmmv     ATF_REQUIRE( is_executable(path("files")));
547*d780102eSjmmv     ATF_REQUIRE( is_executable(path("files/.")));
548*d780102eSjmmv     ATF_REQUIRE( is_executable(path("files/..")));
549*d780102eSjmmv     ATF_REQUIRE( is_executable(path("files/dir")));
550*d780102eSjmmv 
551*d780102eSjmmv     ATF_REQUIRE(!is_executable(path("non-existent")));
552*d780102eSjmmv 
553*d780102eSjmmv     ATF_REQUIRE(!is_executable(path("files/reg")));
554*d780102eSjmmv     ATF_REQUIRE(::chmod("files/reg", 0755) != -1);
555*d780102eSjmmv     ATF_REQUIRE( is_executable(path("files/reg")));
556*d780102eSjmmv }
557*d780102eSjmmv 
558*d780102eSjmmv ATF_TEST_CASE(remove);
ATF_TEST_CASE_HEAD(remove)559*d780102eSjmmv ATF_TEST_CASE_HEAD(remove)
560*d780102eSjmmv {
561*d780102eSjmmv     set_md_var("descr", "Tests the remove function");
562*d780102eSjmmv }
ATF_TEST_CASE_BODY(remove)563*d780102eSjmmv ATF_TEST_CASE_BODY(remove)
564*d780102eSjmmv {
565*d780102eSjmmv     using tools::fs::exists;
566*d780102eSjmmv     using tools::fs::path;
567*d780102eSjmmv     using tools::fs::remove;
568*d780102eSjmmv 
569*d780102eSjmmv     create_files();
570*d780102eSjmmv 
571*d780102eSjmmv     ATF_REQUIRE( exists(path("files/reg")));
572*d780102eSjmmv     remove(path("files/reg"));
573*d780102eSjmmv     ATF_REQUIRE(!exists(path("files/reg")));
574*d780102eSjmmv 
575*d780102eSjmmv     ATF_REQUIRE( exists(path("files/dir")));
576*d780102eSjmmv     ATF_REQUIRE_THROW(tools::system_error, remove(path("files/dir")));
577*d780102eSjmmv     ATF_REQUIRE( exists(path("files/dir")));
578*d780102eSjmmv }
579*d780102eSjmmv 
580*d780102eSjmmv ATF_TEST_CASE(cleanup);
ATF_TEST_CASE_HEAD(cleanup)581*d780102eSjmmv ATF_TEST_CASE_HEAD(cleanup)
582*d780102eSjmmv {
583*d780102eSjmmv     set_md_var("descr", "Tests the cleanup function");
584*d780102eSjmmv }
ATF_TEST_CASE_BODY(cleanup)585*d780102eSjmmv ATF_TEST_CASE_BODY(cleanup)
586*d780102eSjmmv {
587*d780102eSjmmv     using tools::fs::cleanup;
588*d780102eSjmmv 
589*d780102eSjmmv     ::mkdir("root", 0755);
590*d780102eSjmmv     ::mkdir("root/dir", 0755);
591*d780102eSjmmv     ::mkdir("root/dir/1", 0100);
592*d780102eSjmmv     ::mkdir("root/dir/2", 0644);
593*d780102eSjmmv     create_file("root/reg");
594*d780102eSjmmv 
595*d780102eSjmmv     tools::fs::path p("root");
596*d780102eSjmmv     ATF_REQUIRE(tools::fs::exists(p));
597*d780102eSjmmv     ATF_REQUIRE(tools::fs::exists(p / "dir"));
598*d780102eSjmmv     ATF_REQUIRE(tools::fs::exists(p / "dir/1"));
599*d780102eSjmmv     ATF_REQUIRE(tools::fs::exists(p / "dir/2"));
600*d780102eSjmmv     ATF_REQUIRE(tools::fs::exists(p / "reg"));
601*d780102eSjmmv     cleanup(p);
602*d780102eSjmmv     ATF_REQUIRE(!tools::fs::exists(p));
603*d780102eSjmmv }
604*d780102eSjmmv 
605*d780102eSjmmv ATF_TEST_CASE(cleanup_eacces_on_root);
ATF_TEST_CASE_HEAD(cleanup_eacces_on_root)606*d780102eSjmmv ATF_TEST_CASE_HEAD(cleanup_eacces_on_root)
607*d780102eSjmmv {
608*d780102eSjmmv     set_md_var("descr", "Tests the cleanup function");
609*d780102eSjmmv }
ATF_TEST_CASE_BODY(cleanup_eacces_on_root)610*d780102eSjmmv ATF_TEST_CASE_BODY(cleanup_eacces_on_root)
611*d780102eSjmmv {
612*d780102eSjmmv     using tools::fs::cleanup;
613*d780102eSjmmv 
614*d780102eSjmmv     ::mkdir("aux", 0755);
615*d780102eSjmmv     ::mkdir("aux/root", 0755);
616*d780102eSjmmv     ATF_REQUIRE(::chmod("aux", 0555) != -1);
617*d780102eSjmmv 
618*d780102eSjmmv     try {
619*d780102eSjmmv         cleanup(tools::fs::path("aux/root"));
620*d780102eSjmmv         ATF_REQUIRE(tools::user::is_root());
621*d780102eSjmmv     } catch (const tools::system_error& e) {
622*d780102eSjmmv         ATF_REQUIRE(!tools::user::is_root());
623*d780102eSjmmv         ATF_REQUIRE_EQ(EACCES, e.code());
624*d780102eSjmmv     }
625*d780102eSjmmv }
626*d780102eSjmmv 
627*d780102eSjmmv ATF_TEST_CASE(cleanup_eacces_on_subdir);
ATF_TEST_CASE_HEAD(cleanup_eacces_on_subdir)628*d780102eSjmmv ATF_TEST_CASE_HEAD(cleanup_eacces_on_subdir)
629*d780102eSjmmv {
630*d780102eSjmmv     set_md_var("descr", "Tests the cleanup function");
631*d780102eSjmmv }
ATF_TEST_CASE_BODY(cleanup_eacces_on_subdir)632*d780102eSjmmv ATF_TEST_CASE_BODY(cleanup_eacces_on_subdir)
633*d780102eSjmmv {
634*d780102eSjmmv     using tools::fs::cleanup;
635*d780102eSjmmv 
636*d780102eSjmmv     ::mkdir("root", 0755);
637*d780102eSjmmv     ::mkdir("root/1", 0755);
638*d780102eSjmmv     ::mkdir("root/1/2", 0755);
639*d780102eSjmmv     ::mkdir("root/1/2/3", 0755);
640*d780102eSjmmv     ATF_REQUIRE(::chmod("root/1/2", 0555) != -1);
641*d780102eSjmmv     ATF_REQUIRE(::chmod("root/1", 0555) != -1);
642*d780102eSjmmv 
643*d780102eSjmmv     const tools::fs::path p("root");
644*d780102eSjmmv     cleanup(p);
645*d780102eSjmmv     ATF_REQUIRE(!tools::fs::exists(p));
646*d780102eSjmmv }
647*d780102eSjmmv 
648*d780102eSjmmv ATF_TEST_CASE(change_directory);
ATF_TEST_CASE_HEAD(change_directory)649*d780102eSjmmv ATF_TEST_CASE_HEAD(change_directory)
650*d780102eSjmmv {
651*d780102eSjmmv     set_md_var("descr", "Tests the change_directory function");
652*d780102eSjmmv }
ATF_TEST_CASE_BODY(change_directory)653*d780102eSjmmv ATF_TEST_CASE_BODY(change_directory)
654*d780102eSjmmv {
655*d780102eSjmmv     using tools::fs::change_directory;
656*d780102eSjmmv     using tools::fs::get_current_dir;
657*d780102eSjmmv 
658*d780102eSjmmv     ::mkdir("files", 0755);
659*d780102eSjmmv     ::mkdir("files/dir", 0755);
660*d780102eSjmmv     create_file("files/reg");
661*d780102eSjmmv 
662*d780102eSjmmv     const tools::fs::path old = get_current_dir();
663*d780102eSjmmv 
664*d780102eSjmmv     ATF_REQUIRE_THROW(tools::system_error,
665*d780102eSjmmv                     change_directory(tools::fs::path("files/reg")));
666*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == old);
667*d780102eSjmmv 
668*d780102eSjmmv     tools::fs::path old2 = change_directory(tools::fs::path("files"));
669*d780102eSjmmv     ATF_REQUIRE(old2 == old);
670*d780102eSjmmv     tools::fs::path old3 = change_directory(tools::fs::path("dir"));
671*d780102eSjmmv     ATF_REQUIRE(old3 == old2 / "files");
672*d780102eSjmmv     tools::fs::path old4 = change_directory(tools::fs::path("../.."));
673*d780102eSjmmv     ATF_REQUIRE(old4 == old3 / "dir");
674*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == old);
675*d780102eSjmmv }
676*d780102eSjmmv 
677*d780102eSjmmv ATF_TEST_CASE(get_current_dir);
ATF_TEST_CASE_HEAD(get_current_dir)678*d780102eSjmmv ATF_TEST_CASE_HEAD(get_current_dir)
679*d780102eSjmmv {
680*d780102eSjmmv     set_md_var("descr", "Tests the get_current_dir function");
681*d780102eSjmmv }
ATF_TEST_CASE_BODY(get_current_dir)682*d780102eSjmmv ATF_TEST_CASE_BODY(get_current_dir)
683*d780102eSjmmv {
684*d780102eSjmmv     using tools::fs::change_directory;
685*d780102eSjmmv     using tools::fs::get_current_dir;
686*d780102eSjmmv 
687*d780102eSjmmv     ::mkdir("files", 0755);
688*d780102eSjmmv     ::mkdir("files/dir", 0755);
689*d780102eSjmmv     create_file("files/reg");
690*d780102eSjmmv 
691*d780102eSjmmv     tools::fs::path curdir = get_current_dir();
692*d780102eSjmmv     change_directory(tools::fs::path("."));
693*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == curdir);
694*d780102eSjmmv     change_directory(tools::fs::path("files"));
695*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == curdir / "files");
696*d780102eSjmmv     change_directory(tools::fs::path("dir"));
697*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == curdir / "files/dir");
698*d780102eSjmmv     change_directory(tools::fs::path(".."));
699*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == curdir / "files");
700*d780102eSjmmv     change_directory(tools::fs::path(".."));
701*d780102eSjmmv     ATF_REQUIRE(get_current_dir() == curdir);
702*d780102eSjmmv }
703*d780102eSjmmv 
704*d780102eSjmmv // ------------------------------------------------------------------------
705*d780102eSjmmv // Main.
706*d780102eSjmmv // ------------------------------------------------------------------------
707*d780102eSjmmv 
ATF_INIT_TEST_CASES(tcs)708*d780102eSjmmv ATF_INIT_TEST_CASES(tcs)
709*d780102eSjmmv {
710*d780102eSjmmv     // Add the tests for the "path" class.
711*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_normalize);
712*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_is_absolute);
713*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_is_root);
714*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_branch_path);
715*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_leaf_name);
716*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_compare_equal);
717*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_compare_different);
718*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_concat);
719*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_to_absolute);
720*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, path_op_less);
721*d780102eSjmmv 
722*d780102eSjmmv     // Add the tests for the "file_info" class.
723*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, file_info_stat);
724*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, file_info_perms);
725*d780102eSjmmv 
726*d780102eSjmmv     // Add the tests for the "directory" class.
727*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, directory_read);
728*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, directory_names);
729*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, directory_file_info);
730*d780102eSjmmv 
731*d780102eSjmmv     // Add the tests for the "temp_dir" class.
732*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, temp_dir_raii);
733*d780102eSjmmv 
734*d780102eSjmmv     // Add the tests for the free functions.
735*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, exists);
736*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, is_executable);
737*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, remove);
738*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, cleanup);
739*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, cleanup_eacces_on_root);
740*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, cleanup_eacces_on_subdir);
741*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, change_directory);
742*d780102eSjmmv     ATF_ADD_TEST_CASE(tcs, get_current_dir);
743*d780102eSjmmv }
744