Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_process.c, revision 1.1
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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>