Merge "Tests for environment variables utility functions"

This commit is contained in:
Elliott Hughes 2014-04-23 02:10:39 +00:00 committed by Gerrit Code Review
commit 16ea297f12

View file

@ -132,3 +132,111 @@ TEST(unistd, _exit) {
ASSERT_TRUE(WIFEXITED(status));
ASSERT_EQ(99, WEXITSTATUS(status));
}
TEST(unistd, getenv_unsetenv) {
ASSERT_EQ(0, setenv("test-variable", "hello", 1));
ASSERT_STREQ("hello", getenv("test-variable"));
ASSERT_EQ(0, unsetenv("test-variable"));
ASSERT_TRUE(getenv("test-variable") == NULL);
}
TEST(unistd, unsetenv_EINVAL) {
EXPECT_EQ(-1, unsetenv(NULL));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, unsetenv(""));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, unsetenv("a=b"));
EXPECT_EQ(EINVAL, errno);
}
TEST(unistd, setenv_EINVAL) {
EXPECT_EQ(-1, setenv(NULL, "value", 0));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, setenv(NULL, "value", 1));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, setenv("", "value", 0));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, setenv("", "value", 1));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, setenv("a=b", "value", 0));
EXPECT_EQ(EINVAL, errno);
EXPECT_EQ(-1, setenv("a=b", "value", 1));
EXPECT_EQ(EINVAL, errno);
}
TEST(unistd, setenv) {
ASSERT_EQ(0, unsetenv("test-variable"));
char a[] = "a";
char b[] = "b";
char c[] = "c";
// New value.
EXPECT_EQ(0, setenv("test-variable", a, 0));
EXPECT_STREQ(a, getenv("test-variable"));
// Existing value, no overwrite.
EXPECT_EQ(0, setenv("test-variable", b, 0));
EXPECT_STREQ(a, getenv("test-variable"));
// Existing value, overwrite.
EXPECT_EQ(0, setenv("test-variable", c, 1));
EXPECT_STREQ(c, getenv("test-variable"));
// But the arrays backing the values are unchanged.
EXPECT_EQ('a', a[0]);
EXPECT_EQ('b', b[0]);
EXPECT_EQ('c', c[0]);
ASSERT_EQ(0, unsetenv("test-variable"));
}
TEST(unistd, putenv) {
ASSERT_EQ(0, unsetenv("a"));
char* s1 = strdup("a=b");
ASSERT_EQ(0, putenv(s1));
ASSERT_STREQ("b", getenv("a"));
s1[2] = 'c';
ASSERT_STREQ("c", getenv("a"));
char* s2 = strdup("a=b");
ASSERT_EQ(0, putenv(s2));
ASSERT_STREQ("b", getenv("a"));
ASSERT_EQ('c', s1[2]);
ASSERT_EQ(0, unsetenv("a"));
free(s1);
free(s2);
}
TEST(unistd, clearenv) {
extern char** environ;
// Guarantee that environ is not initially empty...
ASSERT_EQ(0, setenv("test-variable", "a", 1));
// Stash a copy.
std::vector<char*> old_environ;
for (size_t i = 0; environ[i] != NULL; ++i) {
old_environ.push_back(strdup(environ[i]));
}
ASSERT_EQ(0, clearenv());
EXPECT_TRUE(environ == NULL || environ[0] == NULL);
EXPECT_EQ(NULL, getenv("test-variable"));
EXPECT_EQ(0, setenv("test-variable", "post-clear", 1));
EXPECT_STREQ("post-clear", getenv("test-variable"));
// Put the old environment back.
for (size_t i = 0; i < old_environ.size(); ++i) {
EXPECT_EQ(0, putenv(old_environ[i]));
}
// Check it wasn't overwritten.
EXPECT_STREQ("a", getenv("test-variable"));
EXPECT_EQ(0, unsetenv("test-variable"));
}