/*
* Copyright 2010 Nathan Phillip Brink, Ethan Zonca
*
* This file is a part of DistRen.
*
* DistRen is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DistRen is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with DistRen. If not, see <http://www.gnu.org/licenses/>.
*/
#include "check_execio.h"
#include "common/execio.h"
#include <check.h>
#include <string.h>
START_TEST (check_execio)
{
struct execio *eio;
char *echoargv[] =
{
"echo",
"test"
};
char inbuf[20];
size_t bytesread;
size_t pos;
pos = 1;
fail_unless(execio_open(&eio, echoargv[0], echoargv) == 0,
"execio_open failed");
fail_unless(execio_read(eio, inbuf, sizeof(inbuf) - 1, &bytesread) == 0,
"error using execio_read\n");
pos += bytesread;
while (bytesread && pos < (sizeof(inbuf) - 1))
{
execio_read(eio, &inbuf[pos], sizeof(inbuf) - 1 - pos, &bytesread);
pos += bytesread;
}
fail_if (pos > 10,
"I read more than 10 bytes from the command ``echo test'' when I expected only 5 or 6 bytes");
inbuf[sizeof(inbuf) - 1] = '\0';
fail_if (strncmp(inbuf, "test", 4),
"Expecting ``test''; got ``%s''",
inbuf);
fail_unless(execio_close(eio) == 0,
"error using execio_close\n");
}
END_TEST
Suite *execio_suite()
{
Suite *s;
TCase *tc;
s = suite_create("execio");
tc = tcase_create("core");
tcase_add_test(tc, check_execio);
suite_add_tcase(s, tc);
return s;
}