// Copyright 2020 Open Source Robotics Foundation, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include #include #include "rcutils/env.h" #include "rcutils/error_handling.h" TEST(TestEnv, test_set_env) { const char * res = nullptr; // Invalid cases EXPECT_FALSE(rcutils_set_env(nullptr, nullptr)); rcutils_reset_error(); EXPECT_FALSE(rcutils_set_env("=INVALID_ENV_VAR=", nullptr)); rcutils_reset_error(); EXPECT_FALSE(rcutils_set_env("=INVALID_ENV_VAR=", "InvalidEnvValue")); rcutils_reset_error(); // Ensure we're starting clean ASSERT_EQ(nullptr, rcutils_get_env("NEW_ENV_VAR", &res)); ASSERT_STREQ("", res); // Simple set ASSERT_TRUE(rcutils_set_env("NEW_ENV_VAR", "NewEnvValue")); ASSERT_STREQ(nullptr, rcutils_get_env("NEW_ENV_VAR", &res)); EXPECT_STREQ(res, "NewEnvValue"); // Re-set ASSERT_TRUE(rcutils_set_env("NEW_ENV_VAR", "DifferentEnvValue")); ASSERT_STREQ(nullptr, rcutils_get_env("NEW_ENV_VAR", &res)); EXPECT_STREQ(res, "DifferentEnvValue"); // Un-set ASSERT_TRUE(rcutils_set_env("NEW_ENV_VAR", nullptr)); ASSERT_EQ(nullptr, rcutils_get_env("NEW_ENV_VAR", &res)); EXPECT_STREQ("", res); // Un-set again ASSERT_TRUE(rcutils_set_env("NEW_ENV_VAR", nullptr)); ASSERT_EQ(nullptr, rcutils_get_env("NEW_ENV_VAR", &res)); EXPECT_STREQ("", res); } /* Tests rcutils_get_env. * * Expected environment variables must be set by the calling code: * * - EMPTY_TEST= * - NORMAL_TEST=foo * * These are set in the call to `ament_add_gtest()` in the `CMakeLists.txt`. */ TEST(TestEnv, test_get_env) { const char * env; const char * ret; ret = rcutils_get_env("NORMAL_TEST", NULL); EXPECT_STREQ("argument env_value is null", ret); ret = rcutils_get_env(NULL, &env); EXPECT_STREQ("argument env_name is null", ret); ret = rcutils_get_env("SHOULD_NOT_EXIST_TEST", &env); EXPECT_FALSE(ret); EXPECT_STREQ("", env); ret = rcutils_get_env("NORMAL_TEST", &env); EXPECT_FALSE(ret); EXPECT_FALSE(NULL == env); EXPECT_STREQ("foo", env); ret = rcutils_get_env("EMPTY_TEST", &env); EXPECT_FALSE(ret); EXPECT_FALSE(NULL == env); EXPECT_STREQ("", env); } /* Tests rcutils_get_env. * * Expected environment variables must be set by the calling code: * * - EMPTY_TEST= * - NORMAL_TEST=foo * * These are set in the call to `ament_add_gtest()` in the `CMakeLists.txt`. */ TEST(TestEnv, test_set_env_overwrite) { const char * env; const char * ret; // Do not overwrite environment variable if preset if overwrite is set false. EXPECT_TRUE(rcutils_set_env_overwrite("NORMAL_TEST", "NewEnvValue", false)); ret = rcutils_get_env("NORMAL_TEST", &env); EXPECT_TRUE(NULL == ret); EXPECT_STREQ("foo", env); // Overwrite environment variable if present if overwrite is set true. EXPECT_TRUE(rcutils_set_env_overwrite("NORMAL_TEST", "NewEnvValue", true)); ret = rcutils_get_env("NORMAL_TEST", &env); EXPECT_TRUE(NULL == ret); EXPECT_STREQ("NewEnvValue", env); } TEST(TestEnv, test_get_home) { EXPECT_STRNE(NULL, rcutils_get_home_dir()); const char * home = NULL; #ifdef _WIN32 // Assert pre-condition that USERPROFILE is defined const char * ret = rcutils_get_env("USERPROFILE", &home); ASSERT_EQ(NULL, ret); // Check USERPROFILE is not defined EXPECT_TRUE(rcutils_set_env("USERPROFILE", NULL)); EXPECT_EQ(NULL, rcutils_get_home_dir()); #else // Assert pre-condition that HOME is defined const char * ret = rcutils_get_env("HOME", &home); ASSERT_EQ(NULL, ret); // Check HOME is not defined EXPECT_TRUE(rcutils_set_env("HOME", NULL)); EXPECT_EQ(NULL, rcutils_get_home_dir()); #endif }