Files @ 71f0379b39de
Branch filter:

Location: DistRen/test/check_execio.c - annotation

binki
Renice execio's newly spawned processes. Fixes bug 8.
/*
 * 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) == 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;
}