blob: 5685f66eabff2b95ad4f52552a579ad0a4a189a6 [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <algorithm>
#include <cstring>
#include <string>
#include <android-base/properties.h>
#include <gtest/gtest.h>
// Tests the Chrome OS implementation of retrieving properties from environment
// variables.
TEST(PropertiesTest, PropertyFromEnvironment) {
// Add a single property to the environment
constexpr char kEnvName[] = "TEST_PROP_1";
constexpr char kValue[] = "value";
constexpr char kDefault[] = "default";
// Variable not set, default should be returned
std::string result = android::base::GetProperty(kEnvName, kDefault);
ASSERT_EQ(result, kDefault);
// Environment variable set, value should be returned
ASSERT_EQ(setenv(kEnvName, kValue, 1), 0);
result = android::base::GetProperty(kEnvName, kDefault);
ASSERT_EQ(result, kValue);
// Lower case should be converted to upper case
std::string env_name_lower = kEnvName;
std::transform(env_name_lower.begin(), env_name_lower.end(),
env_name_lower.begin(), ::tolower);
result = android::base::GetProperty(env_name_lower, kDefault);
ASSERT_EQ(result, kValue);
// '.' should be replaced with '_'
std::string env_name_with_periods = kEnvName;
std::replace(env_name_with_periods.begin(), env_name_with_periods.end(), '_',
'.');
result = android::base::GetProperty(env_name_with_periods, kDefault);
ASSERT_EQ(result, kValue);
ASSERT_EQ(unsetenv(kEnvName), 0);
result = android::base::GetProperty(kEnvName, kDefault);
ASSERT_EQ(result, kDefault);
}