Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_process.c, revision 1.1.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>