Newer
Older
libkc / modules / test / src / test_env.c

#include <stdio.h>

#include <kc.h>
#include <kc_env.h>
#include <kc_ut.h>
#include <kc_assert.h>

static void test_env(void);

/**
 * env 単体テストスイート
 */
void suite_env(void)
{
    KcUt *ut = KcUt_get_instance();
    ut->add(ut, UT_TESTCASE, "env", test_env);
}

/**
 * env テスト。
 */
static void test_env(void)
{
    // 事前設定
    KcEnv_remove("UT_TEST_ENV");
    // 値設定
    bool ret = KcEnv_set("UT_TEST_ENV", "ABC", false);
    assert_true(ret);

    // 上書き無し、既に存在する。
    ret = KcEnv_set("UT_TEST_ENV", "XYZ", false);
    assert_true(ret);
    char *env_val = KcEnv_get("UT_TEST_ENV");
    assert_equals((const char *)"ABC", env_val);

    // 上書きあり、既に存在する。
    ret = KcEnv_set("UT_TEST_ENV", "XYZ", true);
    assert_true(ret);
    printf("--6--\n");
    env_val = KcEnv_get("UT_TEST_ENV");
    assert_equals("XYZ", env_val);

    // 削除
    ret = KcEnv_remove("UT_TEST_ENV");
    assert_true(ret);

    // 存在しないキーを削除
    ret = KcEnv_remove("UT_TEST_ENV");
    assert_true(ret);

    // キーに = が含まれる。
    ret = KcEnv_set("UT_TEST_ENV=XXX", "ABC", false);
    assert_false(ret);

    // = が含まれたキーで取得
    ret = KcEnv_set("UT_TEST_ENV", "ABC", false);
    assert_true(ret);
    env_val = KcEnv_get("UT_TEST_ENV=XXX");
    assert_equals("ABC", env_val);

    // キーの値が 4096 超える
    char key[8192] = {'\0'};
    for (int i = 0; i < 5000; i++)
    {
        key[i] = 'X';
    }
    key[4999] = 'Z';
    ret = KcEnv_set(key, "XYZ", false);
    assert_true(ret);

    env_val = KcEnv_get(key);
    assert_not_null(env_val);
    assert_equals("XYZ", env_val);

    // = 以降は無視されて値が取得されることを確認
    key[5000] = '=';
    key[5001] = 'A';
    key[5002] = 'B';
    key[5003] = 'C';
    env_val = KcEnv_get(key);
    assert_not_null(env_val);
    assert_equals("XYZ", env_val);
}