xref: /freebsd/lib/libutil++/tests/pidfile_test.cc (revision 7be913e00d79b3bf740049797fbc3f6ab8193995)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2025 Chelsio Communications, Inc.
5  * Written by: John Baldwin <jhb@FreeBSD.org>
6  */
7 
8 #include <atf-c++.hpp>
9 #include <sys/stat.h>
10 #include <libutil.h>
11 
12 #include <libutil++.hh>
13 
14 ATF_TEST_CASE_WITHOUT_HEAD(basic);
ATF_TEST_CASE_BODY(basic)15 ATF_TEST_CASE_BODY(basic)
16 {
17 	pid_t other;
18 	struct pidfh *pfh = pidfile_open("test_pidfile", 0600, &other);
19 	ATF_REQUIRE(pfh != nullptr);
20 	ATF_REQUIRE(pidfile_fileno(pfh) >= 0);
21 
22 	struct stat sb;
23 	ATF_REQUIRE(fstat(pidfile_fileno(pfh), &sb) == 0);
24 	ATF_REQUIRE_EQ(0, sb.st_size);
25 
26 	freebsd::pidfile pf(pfh);
27 	ATF_REQUIRE_EQ(pidfile_fileno(pfh), pf.fileno());
28 
29 	ATF_REQUIRE(pf.write() == 0);
30 
31 	ATF_REQUIRE(fstat(pf.fileno(), &sb) == 0);
32 	ATF_REQUIRE(sb.st_size > 0);
33 
34 	ATF_REQUIRE(pf.close() == 0);
35 	ATF_REQUIRE(pf.fileno() == -1);
36 	ATF_REQUIRE_EQ(EDOOFUS, errno);
37 
38 	ATF_REQUIRE(unlink("test_pidfile") == 0);
39 }
40 
ATF_INIT_TEST_CASES(tcs)41 ATF_INIT_TEST_CASES(tcs)
42 {
43 	ATF_ADD_TEST_CASE(tcs, basic);
44 }
45