/* $Id: setenv-t.c 7492 2006-03-19 23:07:34Z eagle $ */
/* setenv test suite. */
#include "config.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include "inn/messages.h"
#include "libinn.h"
#include "libtest.h"
int test_setenv(const char *name, const char *value, int overwrite);
static const char test_var[] = "SETENV_TEST";
static const char test_value1[] = "Do not taunt Happy Fun Ball.";
static const char test_value2[] = "Do not use Happy Fun Ball on concrete.";
int
main(void)
{
char *value;
int status;
if (getenv(test_var))
die("%s already in the environment!", test_var);
puts("12");
ok(1, test_setenv(test_var, test_value1, 0) == 0);
ok_string(2, test_value1, getenv(test_var));
ok(3, test_setenv(test_var, test_value2, 0) == 0);
ok_string(4, test_value1, getenv(test_var));
ok(5, test_setenv(test_var, test_value2, 1) == 0);
ok_string(6, test_value2, getenv(test_var));
ok(7, test_setenv(test_var, "", 1) == 0);
ok_string(8, "", getenv(test_var));
/* We're run by a shell script wrapper that sets resource limits such
that we can allocate one string of this size but not two. Note that
Linux doesn't support data limits, so skip if we get an unexpected
success here. */
value = xmalloc(100 * 1024);
memset(value, 'A', 100 * 1024 - 1);
value[100 * 1024 - 1] = 0;
ok(9, test_setenv(test_var, value, 0) == 0);
ok_string(10, "", getenv(test_var));
status = test_setenv(test_var, value, 1);
if (status == 0) {
puts("ok 11 # skip - no data limit support");
puts("ok 12 # skip - no data limit support");
} else {
ok(11, (status == -1) && (errno == ENOMEM));
ok_string(12, "", getenv(test_var));
}
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1