Merge branch '4524_cleanup'
[midnight-commander.git] / tests / lib / utilunix__my_system-fork_child.c
blob8c44bc7813c2802bfd8ab76ab6b2e9786dff5cb8
1 /*
2 lib - tests lib/utilinux:my_system() function
4 Copyright (C) 2013-2024
5 Free Software Foundation, Inc.
7 Written by:
8 Slava Zanko <slavazanko@gmail.com>, 2013
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software: you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation, either version 3 of the License,
15 or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program. If not, see <http://www.gnu.org/licenses/>.
26 #define TEST_SUITE_NAME "/lib/utilunix"
28 #include "tests/mctest.h"
30 #include "lib/util.h"
32 #include "utilunix__my_system-common.c"
34 /* --------------------------------------------------------------------------------------------- */
36 /* *INDENT-OFF* */
37 START_TEST (fork_child)
38 /* *INDENT-ON* */
40 int actual_value;
41 /* given */
42 fork__return_value = 0;
44 /* when */
45 actual_value = my_system (0, "/bin/some-command", "some parameter");
47 /* then */
48 ck_assert_int_eq (actual_value, 0);
50 VERIFY_SIGACTION_CALLS ();
51 VERIFY_SIGNAL_CALLS ();
53 mctest_assert_str_eq (execvp__file__captured, "/bin/some-command");
54 ck_assert_int_eq (execvp__args__captured->len, 2);
56 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 0), "/bin/some-command");
57 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 1), "some parameter");
59 /* All exec* calls is mocked, so call to _exit() function with 127 status code it's a normal situation */
60 ck_assert_int_eq (my_exit__status__captured, 127);
62 /* *INDENT-OFF* */
63 END_TEST
64 /* *INDENT-ON* */
66 /* --------------------------------------------------------------------------------------------- */
68 /* *INDENT-OFF* */
69 START_TEST (fork_child_tokens)
70 /* *INDENT-ON* */
72 int actual_value;
73 /* given */
74 fork__return_value = 0;
76 /* when */
77 actual_value = my_system (0, "vi +", "foo.txt");
79 /* then */
80 ck_assert_int_eq (actual_value, 0);
82 VERIFY_SIGACTION_CALLS ();
83 VERIFY_SIGNAL_CALLS ();
85 mctest_assert_str_eq (execvp__file__captured, "vi");
86 ck_assert_int_eq (execvp__args__captured->len, 3);
88 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 0), "vi");
89 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 1), "+");
90 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 2), "foo.txt");
92 /* All exec* calls is mocked, so call to _exit() function with 127 status code it's a normal situation */
93 ck_assert_int_eq (my_exit__status__captured, 127);
95 /* *INDENT-OFF* */
96 END_TEST
97 /* *INDENT-ON* */
99 /* --------------------------------------------------------------------------------------------- */
101 /* *INDENT-OFF* */
102 START_TEST (fork_child_tokens2)
103 /* *INDENT-ON* */
105 int actual_value;
106 /* given */
107 fork__return_value = 0;
109 /* when */
110 actual_value = my_system (0, "qwe -a 'aa bb' -b -c cc -d \"dd ee\" -f ff\\ gg", "foo.txt");
112 /* then */
113 ck_assert_int_eq (actual_value, 0);
115 VERIFY_SIGACTION_CALLS ();
116 VERIFY_SIGNAL_CALLS ();
118 mctest_assert_str_eq (execvp__file__captured, "qwe");
119 ck_assert_int_eq (execvp__args__captured->len, 11);
121 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 0), "qwe");
122 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 1), "-a");
123 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 2), "'aa bb'");
124 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 3), "-b");
125 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 4), "-c");
126 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 5), "cc");
127 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 6), "-d");
128 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 7), "\"dd ee\"");
129 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 8), "-f");
130 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 9), "ff\\ gg");
131 mctest_assert_str_eq (g_ptr_array_index (execvp__args__captured, 10), "foo.txt");
133 /* All exec* calls is mocked, so call to _exit() function with 127 status code it's a normal situation */
134 ck_assert_int_eq (my_exit__status__captured, 127);
136 /* *INDENT-OFF* */
137 END_TEST
138 /* *INDENT-ON* */
140 /* --------------------------------------------------------------------------------------------- */
143 main (void)
145 TCase *tc_core;
147 tc_core = tcase_create ("Core");
149 tcase_add_checked_fixture (tc_core, setup, teardown);
151 /* Add new tests here: *************** */
152 tcase_add_test (tc_core, fork_child);
153 tcase_add_test (tc_core, fork_child_tokens);
154 tcase_add_test (tc_core, fork_child_tokens2);
155 /* *********************************** */
157 return mctest_run_all (tc_core);
160 /* --------------------------------------------------------------------------------------------- */