oceanbase

Форк
0
/
test_obkv_config.cpp 
168 строк · 5.7 Кб
1
/**
2
 * Copyright (c) 2023 OceanBase
3
 * OceanBase CE is licensed under Mulan PubL v2.
4
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
5
 * You may obtain a copy of Mulan PubL v2 at:
6
 *          http://license.coscl.org.cn/MulanPubL-2.0
7
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
8
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
9
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
 * See the Mulan PubL v2 for more details.
11
 */
12

13
#include "share/table/ob_table_config_util.h"
14
#include "lib/time/ob_time_utility.h"
15
#include "share/parameter/ob_parameter_macro.h"
16
#include <gtest/gtest.h>
17

18
namespace oceanbase
19
{
20
using namespace share;
21
namespace common
22
{
23
ObConfigContainer l_container;
24
static ObConfigContainer *local_container()
25
{
26
  return &l_container;
27
}
28
class TestObKvConfig : public ::testing::Test
29
{
30
public:
31
#undef OB_CLUSTER_PARAMETER
32
#define OB_CLUSTER_PARAMETER(args...) args
33
DEF_MODE_WITH_PARSER(_obkv_feature_mode, OB_CLUSTER_PARAMETER, "", common::ObKvFeatureModeParser,
34
  "_obkv_feature_mode is a option list to control specified OBKV features on/off.",
35
  ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
36
#undef OB_CLUSTER_PARAMETER
37
};
38

39
TEST_F(TestObKvConfig, test_process_item)
40
{
41
  ObString key;
42
  ObString value;
43
  char str1[100] = {"ttl=off"};
44
  ASSERT_EQ(OB_SUCCESS, ObModeConfigParserUitl::parse_item_to_kv(str1, key, value));
45
  ASSERT_EQ(key, ObString("ttl"));
46
  ASSERT_EQ(value, ObString("off"));
47

48
  char str2[100] = {" ttl = off "};
49
  ASSERT_EQ(OB_SUCCESS, ObModeConfigParserUitl::parse_item_to_kv(str2, key, value));
50
  ASSERT_EQ(key, ObString("ttl"));
51
  ASSERT_EQ(value, ObString("off"));
52

53
  char str3[100] = {" rerouting =off "};
54
  ASSERT_EQ(OB_SUCCESS, ObModeConfigParserUitl::parse_item_to_kv(str3, key, value));
55
  ASSERT_EQ(key, ObString("rerouting"));
56
  ASSERT_EQ(value, ObString("off"));
57

58
  char str4[100] = {"ttl=on, rerouting=off"};
59
  common::ObSEArray<std::pair<ObString, ObString>, 8> kv_list;
60
  ASSERT_EQ(OB_SUCCESS, ObModeConfigParserUitl::get_kv_list(str4, kv_list));
61
  ASSERT_EQ(2, kv_list.count());
62
  ASSERT_EQ(kv_list.at(0).first, ObString("ttl"));
63
  ASSERT_EQ(kv_list.at(0).second, ObString("on"));
64
  ASSERT_EQ(kv_list.at(1).first, ObString("rerouting"));
65
  ASSERT_EQ(kv_list.at(1).second, ObString("off"));
66
}
67

68

69
TEST_F(TestObKvConfig, test_parse)
70
{
71
  ObKvFeatureModeParser parser;
72
  uint8_t arr[32];
73
  ASSERT_EQ(true, parser.parse("ttl=on, rerouting=off", arr, 32));
74
  ASSERT_EQ(arr[0], 0b00001001);
75

76
  MEMSET(arr, 0, 32);
77
  ASSERT_EQ(true, parser.parse("ttl=on, ttl=off, rerouting=on", arr, 32));
78
  ASSERT_EQ(arr[0], 0b0000110);
79

80
  MEMSET(arr, 0, 32);
81
  ASSERT_EQ(true, parser.parse("ttl=on, ttl=off", arr, 32));
82
  ASSERT_EQ(arr[0], 0b00000010);
83

84
  MEMSET(arr, 0, 32);
85
  ASSERT_EQ(true, parser.parse("ttl=on, hotkey=on, rerouting=on", arr, 32));
86
  ASSERT_EQ(arr[0], 0b00010101);
87

88
  MEMSET(arr, 0, 32);
89
  ASSERT_EQ(false, parser.parse("ttl=on, ttt=off", arr, 32));
90

91
  MEMSET(arr, 0, 32);
92
  ASSERT_EQ(false, parser.parse("ttl=on, rerouting=default", arr, 32));
93

94
  MEMSET(arr, 0, 32);
95
  ASSERT_EQ(true, parser.parse("", arr, 32));
96
  ASSERT_EQ(arr[0], 0);
97

98
  MEMSET(arr, 0, 32);
99
  ASSERT_EQ(false, parser.parse("ttl=on, ttt=off, ", arr, 32));
100

101
  MEMSET(arr, 0, 32);
102
  ASSERT_EQ(false, parser.parse("ttl=on, ttt=off,", arr, 32));
103
}
104

105
TEST_F(TestObKvConfig, test_obkv_feature_mode)
106
{
107
  const uint8_t *value = _obkv_feature_mode;
108
  ASSERT_NE((void*)NULL, (void*)value);
109
  ASSERT_EQ(value[0], 0);
110
  ASSERT_EQ(true, _obkv_feature_mode.set_value("ttl=off, rerouting=on, hotkey=on"));
111
  const uint8_t *value1 = _obkv_feature_mode.get();
112
  ASSERT_NE((void*)NULL, (void*)value1);
113
  ASSERT_EQ(value1[0], 0b00010110);
114
  // bad case
115
  ASSERT_EQ(false, _obkv_feature_mode.set_value("hotkey=off="));
116
  ASSERT_EQ(false, _obkv_feature_mode.set_value("=off"));
117
  ASSERT_EQ(false, _obkv_feature_mode.set_value(","));
118
  ASSERT_EQ(false, _obkv_feature_mode.set_value(" , "));
119
  ASSERT_EQ(false, _obkv_feature_mode.set_value(" ,hotkey=off"));
120
  ASSERT_EQ(false, _obkv_feature_mode.set_value(",hotkey=off"));
121
  ASSERT_EQ(false, _obkv_feature_mode.set_value("ttl=off,, hotkey=off"));
122
  ASSERT_EQ(false, _obkv_feature_mode.set_value("ttl=off, , hotkey=off"));
123
  ASSERT_EQ(false, _obkv_feature_mode.set_value("ttl=off, rerouting=on, "));
124
  ASSERT_EQ(false, _obkv_feature_mode.set_value("ttl=off, rerouting=on,"));
125
}
126

127
TEST_F(TestObKvConfig, testObKVFeatureMode)
128
{
129
  // rerouting=off, ttl=on
130
  uint8_t values[1] = {0b001001};
131
  ObKVFeatureMode kv_mode(values);
132
  ASSERT_EQ(true, kv_mode.is_ttl_enable());
133
  ASSERT_EQ(false, kv_mode.is_rerouting_enable());
134
  // default
135
  ObKVFeatureMode kv_mode_1;
136
  ASSERT_EQ(false, kv_mode_1.is_valid());
137
  kv_mode_1.set_ttl_mode(0b10);
138
  kv_mode_1.set_rerouting_mode(0b01);
139
  kv_mode_1.set_hotkey_mode(0b01);
140
  ASSERT_EQ(true, kv_mode_1.is_valid());
141
  ASSERT_EQ(false, kv_mode_1.is_ttl_enable());
142
  ASSERT_EQ(true, kv_mode_1.is_rerouting_enable());
143
  ASSERT_EQ(true, kv_mode_1.is_hotkey_enable());
144
  kv_mode_1.set_value(0b11101001);
145
  ASSERT_EQ(true, kv_mode_1.is_valid());
146
  ASSERT_EQ(true, kv_mode_1.is_ttl_enable());
147
  ASSERT_EQ(false, kv_mode_1.is_rerouting_enable());
148
  ASSERT_EQ(false, kv_mode_1.is_hotkey_enable());
149
  // bad case
150
  kv_mode_1.set_ttl_mode(0b11);
151
  ASSERT_EQ(false, kv_mode_1.is_valid());
152
  kv_mode_1.set_hotkey_mode(0b11);
153
  ASSERT_EQ(false, kv_mode_1.is_valid());
154
  kv_mode_1.set_rerouting_mode(0b11);
155
  ASSERT_EQ(false, kv_mode_1.is_valid());
156
  kv_mode_1.set_value(0b00111111);
157
  ASSERT_EQ(false, kv_mode_1.is_valid());
158
}
159

160
}
161
}
162

163
int main(int argc, char **argv)
164
{
165
  oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
166
  testing::InitGoogleTest(&argc, argv);
167
  return RUN_ALL_TESTS();
168
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.