Return to test_process.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / tests / suites |
1.1 misho 1: /* 2: * Copyright (C) 2014 Martin Willi 3: * Copyright (C) 2014 revosec AG 4: * 5: * This program is free software; you can redistribute it and/or modify it 6: * under the terms of the GNU General Public License as published by the 7: * Free Software Foundation; either version 2 of the License, or (at your 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. 9: * 10: * This program is distributed in the hope that it will be useful, but 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13: * for more details. 14: */ 15: 16: #include "test_suite.h" 17: 18: #include <unistd.h> 19: 20: #include <utils/process.h> 21: 22: START_TEST(test_retval_true) 23: { 24: process_t *process; 25: char *argv[] = { 26: #ifdef WIN32 27: "C:\\Windows\\system32\\cmd.exe", 28: "/C", 29: "exit 0", 30: #else 31: "/bin/sh", 32: "-c", 33: "true", 34: #endif 35: NULL 36: }; 37: int retval; 38: 39: process = process_start(argv, NULL, NULL, NULL, NULL, TRUE); 40: ck_assert(process != NULL); 41: ck_assert(process->wait(process, &retval)); 42: ck_assert_int_eq(retval, 0); 43: } 44: END_TEST 45: 46: START_TEST(test_retval_false) 47: { 48: process_t *process; 49: char *argv[] = { 50: #ifdef WIN32 51: "C:\\Windows\\system32\\cmd.exe", 52: "/C", 53: "exit 1", 54: #else 55: "/bin/sh", 56: "-c", 57: "false", 58: #endif 59: NULL 60: }; 61: int retval; 62: 63: process = process_start(argv, NULL, NULL, NULL, NULL, TRUE); 64: ck_assert(process != NULL); 65: ck_assert(process->wait(process, &retval)); 66: ck_assert(retval != 0); 67: } 68: END_TEST 69: 70: START_TEST(test_not_found) 71: { 72: process_t *process; 73: char *argv[] = { 74: "/bin/does-not-exist", 75: NULL 76: }; 77: 78: process = process_start(argv, NULL, NULL, NULL, NULL, TRUE); 79: /* both is acceptable behavior */ 80: ck_assert(process == NULL || !process->wait(process, NULL)); 81: } 82: END_TEST 83: 84: START_TEST(test_echo) 85: { 86: process_t *process; 87: char *argv[] = { 88: #ifdef WIN32 89: "C:\\Windows\\system32\\more.com", 90: #else 91: "/bin/sh", 92: "-c", 93: "cat", 94: #endif 95: NULL 96: }; 97: int retval, in, out; 98: char *msg = "test"; 99: char buf[strlen(msg) + 1]; 100: 101: memset(buf, 0, strlen(msg) + 1); 102: 103: process = process_start(argv, NULL, &in, &out, NULL, TRUE); 104: ck_assert(process != NULL); 105: ck_assert_int_eq(write(in, msg, strlen(msg)), strlen(msg)); 106: ck_assert(close(in) == 0); 107: ck_assert_int_eq(read(out, buf, strlen(msg) + 1), strlen(msg)); 108: ck_assert_str_eq(buf, msg); 109: ck_assert(close(out) == 0); 110: ck_assert(process->wait(process, &retval)); 111: ck_assert_int_eq(retval, 0); 112: } 113: END_TEST 114: 115: START_TEST(test_echo_err) 116: { 117: process_t *process; 118: char *argv[] = { 119: #ifdef WIN32 120: "C:\\Windows\\system32\\cmd.exe", 121: "/C", 122: "1>&2 C:\\Windows\\system32\\more.com", 123: #else 124: "/bin/sh", 125: "-c", 126: "1>&2 cat", 127: #endif 128: NULL 129: }; 130: int retval, in, err; 131: char *msg = "a longer test message"; 132: char buf[strlen(msg) + 1]; 133: 134: memset(buf, 0, strlen(msg) + 1); 135: 136: process = process_start(argv, NULL, &in, NULL, &err, TRUE); 137: ck_assert(process != NULL); 138: ck_assert_int_eq(write(in, msg, strlen(msg)), strlen(msg)); 139: ck_assert(close(in) == 0); 140: ck_assert_int_eq(read(err, buf, strlen(msg) + 1), strlen(msg)); 141: ck_assert_str_eq(buf, msg); 142: ck_assert(close(err) == 0); 143: ck_assert(process->wait(process, &retval)); 144: ck_assert_int_eq(retval, 0); 145: } 146: END_TEST 147: 148: START_TEST(test_env) 149: { 150: process_t *process; 151: char *argv[] = { 152: #ifdef WIN32 153: "C:\\Windows\\system32\\cmd.exe", 154: "/C", 155: "echo %A% %B%", 156: #else 157: "/bin/sh", 158: "-c", 159: "/bin/echo -n $A $B", 160: #endif 161: NULL 162: }; 163: char *envp[] = { 164: "A=atest", 165: "B=bstring", 166: NULL 167: }; 168: int retval, out; 169: char buf[64] = {}; 170: 171: process = process_start(argv, envp, NULL, &out, NULL, TRUE); 172: ck_assert(process != NULL); 173: ck_assert(read(out, buf, sizeof(buf)) > 0); 174: #ifdef WIN32 175: ck_assert_str_eq(buf, "atest bstring\r\n"); 176: #else 177: ck_assert_str_eq(buf, "atest bstring"); 178: #endif 179: ck_assert(close(out) == 0); 180: ck_assert(process->wait(process, &retval)); 181: ck_assert_int_eq(retval, 0); 182: } 183: END_TEST 184: 185: START_TEST(test_shell) 186: { 187: process_t *process; 188: int retval; 189: 190: process = process_start_shell(NULL, NULL, NULL, NULL, "exit %d", 3); 191: ck_assert(process != NULL); 192: ck_assert(process->wait(process, &retval)); 193: ck_assert_int_eq(retval, 3); 194: } 195: END_TEST 196: 197: Suite *process_suite_create() 198: { 199: Suite *s; 200: TCase *tc; 201: 202: s = suite_create("process"); 203: 204: tc = tcase_create("return values"); 205: tcase_add_test(tc, test_retval_true); 206: tcase_add_test(tc, test_retval_false); 207: suite_add_tcase(s, tc); 208: 209: tc = tcase_create("not found"); 210: tcase_add_test(tc, test_not_found); 211: suite_add_tcase(s, tc); 212: 213: tc = tcase_create("echo"); 214: tcase_add_test(tc, test_echo); 215: tcase_add_test(tc, test_echo_err); 216: suite_add_tcase(s, tc); 217: 218: tc = tcase_create("env"); 219: tcase_add_test(tc, test_env); 220: suite_add_tcase(s, tc); 221: 222: tc = tcase_create("shell"); 223: tcase_add_test(tc, test_shell); 224: suite_add_tcase(s, tc); 225: 226: return s; 227: }