[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/cppchedy/unified-runtime/main/test/unit/utils/getenv.cpp [Back]  [Original]

// Copyright (C) 2023 Intel Corporation
// Part of the Unified-Runtime Project, under the Apache License v2.0 with LLVM Exceptions.
// See LICENSE.TXT
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#include 

#include 

#include "helpers.h"
#include "ur_util.hpp"

class GetEnvToMapWithParam
    : public ::testing::TestWithParam<
          std::map> {
  protected:
    int ret = -1;
    std::map test_map;

    void SetUp() override {
        std::stringstream env_var_value;
        test_map = GetParam();

        for (auto const &item : test_map) {
            if (&item.first != &test_map.begin()->first) {
                env_var_value front(), huge_str);

    ret = unsetenv("UR_TEST_ENV_VAR");
    ASSERT_EQ(ret, 0);
}

TEST(GetenvToVec, MultipleValues) {
    int ret = setenv("UR_TEST_ENV_VAR", "value_1,value_2", 1);
    ASSERT_EQ(ret, 0);

    std::vector test_vec = {"value_1", "value_2"};
    auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
    ASSERT_TRUE(vec.has_value());
    ASSERT_EQ(vec, test_vec);

    ret = unsetenv("UR_TEST_ENV_VAR");
    ASSERT_EQ(ret, 0);
}

TEST(GetenvToVec, EmptyEnvVar) {
    int ret = unsetenv("UR_TEST_ENV_VAR");
    ASSERT_EQ(ret, 0);

    auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
    ASSERT_FALSE(vec.has_value());
}

TEST(GetenvToMap, EmptyEnvVar) {
    int ret = unsetenv("UR_TEST_ENV_VAR");
    ASSERT_EQ(ret, 0);

    auto map = getenv_to_map("UR_TEST_ENV_VAR");
    ASSERT_FALSE(map.has_value());
}

// ////////////////////////////////////////////////////////////////////////////////////
// // Negative tests

class GetEnvFailureWithParam : public ::testing::TestWithParam {
  protected:
    int ret = -1;
    std::string env_var_value = "";

    void SetUp() override {
        env_var_value = GetParam();
        ret = setenv("UR_TEST_ENV_VAR", env_var_value.c_str(), 1);
        ASSERT_EQ(ret, 0);
    }

    void TearDown() override {
        ret = unsetenv("UR_TEST_ENV_VAR");
        ASSERT_EQ(ret, 0);
    }
};

class GetenvToMap : public GetEnvFailureWithParam {};

class GetenvToVec : public GetEnvFailureWithParam {};

INSTANTIATE_TEST_SUITE_P(
    WrongValuesForMap, GetenvToMap,
    testing::Values("value_1;value_2", "param_1:value_1,value_2;param_2:",
                    "param_1:value_1,value_2;:value_1", ",;:", ",;",
                    "rvrawerv)(*&)($@#93939854;;)", "simple", ",", ":", ";",
                    "value,value", "param:value;param:value",
                    "param,value;param:value", "param:value;param_2,value",
                    "param:value;param_2", "param:value;param_2;param_3",
                    "param:value:value_2", "param:value;:", "param:value;,"));

TEST_P(GetenvToMap, WrongEnvVarValues) {
    ASSERT_THROW(getenv_to_map("UR_TEST_ENV_VAR"), std::invalid_argument);
}

INSTANTIATE_TEST_SUITE_P(WrongValuesForVec, GetenvToVec,
                         testing::Values("value_1;value_2",
                                         "param_1:value_1,value_2;param_2", ",",
                                         ";", ":", ",,,",
                                         "rvrawerv)(*&)($@#93939854,,)",
                                         "value,,", "value;"));

TEST_P(GetenvToVec, WrongEnvVarValues) {
    ASSERT_THROW(getenv_to_vec("UR_TEST_ENV_VAR"), std::invalid_argument);
}

#if defined(_WIN32)
TEST(GetEnvExceptionWindows, HugeInput) {
    std::string huge_str;
    huge_str.reserve(1040);
    for (int i = 0; i < 103; ++i) {
        huge_str += "huuuuuuuge";
    }

    auto map = getenv_to_map("UR_TEST_ENV_VAR");
    ASSERT_FALSE(map.has_value());
    auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
    ASSERT_FALSE(vec.has_value());
}
#endif

Web Proxy Viewer  |  New URL  |  Original Page