ClickHouse

Форк
0
/
gtest_settings.cpp 
142 строки · 5.9 Кб
1
#include <gtest/gtest.h>
2

3
#include <Core/SettingsFields.h>
4
#include <Core/SettingsEnums.h>
5
#include <Core/Field.h>
6

7
namespace
8
{
9
using namespace DB;
10
using SettingMySQLDataTypesSupport = SettingFieldMultiEnum<MySQLDataTypesSupport, SettingFieldMySQLDataTypesSupportTraits>;
11
}
12

13
namespace DB
14
{
15

16
template <typename Enum, typename Traits>
17
bool operator== (const SettingFieldMultiEnum<Enum, Traits> & setting, const Field & f)
18
{
19
    return Field(setting) == f;
20
}
21

22
template <typename Enum, typename Traits>
23
bool operator== (const Field & f, const SettingFieldMultiEnum<Enum, Traits> & setting)
24
{
25
    return f == Field(setting);
26
}
27

28
}
29

30
GTEST_TEST(SettingMySQLDataTypesSupport, WithDefault)
31
{
32
    // Setting can be default-initialized and that means all values are unset.
33
    const SettingMySQLDataTypesSupport setting;
34
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{}, setting.value);
35
    ASSERT_EQ("", setting.toString());
36
    ASSERT_EQ(setting, Field(""));
37

38
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
39
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
40
}
41

42
GTEST_TEST(SettingMySQLDataTypesSupport, WithDECIMAL)
43
{
44
    // Setting can be initialized with MySQLDataTypesSupport::DECIMAL
45
    // and this value can be obtained in varios forms with getters.
46
    const SettingMySQLDataTypesSupport setting(MySQLDataTypesSupport::DECIMAL);
47
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{MySQLDataTypesSupport::DECIMAL}, setting.value);
48

49
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
50
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
51

52
    ASSERT_EQ("decimal", setting.toString());
53
    ASSERT_EQ(Field("decimal"), setting);
54
}
55

56
GTEST_TEST(SettingMySQLDataTypesSupport, WithDATE)
57
{
58
    SettingMySQLDataTypesSupport setting;
59
    setting = String("date2Date32");
60
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{MySQLDataTypesSupport::DATE2DATE32}, setting.value);
61

62
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATE2DATE32));
63
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
64
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
65

66
    ASSERT_EQ("date2Date32", setting.toString());
67
    ASSERT_EQ(Field("date2Date32"), setting);
68

69
    setting = String("date2String");
70
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{MySQLDataTypesSupport::DATE2STRING}, setting.value);
71

72
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATE2STRING));
73
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATE2DATE32));
74

75
    ASSERT_EQ("date2String", setting.toString());
76
    ASSERT_EQ(Field("date2String"), setting);
77
}
78

79
GTEST_TEST(SettingMySQLDataTypesSupport, SetString)
80
{
81
    SettingMySQLDataTypesSupport setting;
82
    setting = String("decimal");
83
    ASSERT_TRUE(setting.changed);
84

85
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
86
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
87
    ASSERT_EQ("decimal", setting.toString());
88
    ASSERT_EQ(Field("decimal"), setting);
89

90
    setting = "datetime64,decimal";
91
    ASSERT_TRUE(setting.changed);
92
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
93
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
94
    ASSERT_EQ("datetime64,decimal", setting.toString());
95
    ASSERT_EQ(Field("datetime64,decimal"), setting);
96

97
    // comma with spaces
98
    setting = " datetime64 ,    decimal "; /// bad punctuation is ok here
99
    ASSERT_TRUE(setting.changed);
100
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
101
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
102
    ASSERT_EQ("datetime64,decimal", setting.toString());
103
    ASSERT_EQ(Field("datetime64,decimal"), setting);
104

105
    setting = String(",,,,,,,, ,decimal");
106
    ASSERT_TRUE(setting.changed);
107
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
108
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
109
    ASSERT_EQ("decimal", setting.toString());
110
    ASSERT_EQ(Field("decimal"), setting);
111

112
    setting = String(",decimal,decimal,decimal,decimal,decimal,decimal,decimal,decimal,decimal,");
113
    ASSERT_TRUE(setting.changed); //since previous value was DECIMAL
114
    ASSERT_TRUE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
115
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
116
    ASSERT_EQ("decimal", setting.toString());
117
    ASSERT_EQ(Field("decimal"), setting);
118

119
    setting = String("");
120
    ASSERT_TRUE(setting.changed);
121
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DECIMAL));
122
    ASSERT_FALSE(MultiEnum<MySQLDataTypesSupport>(setting).isSet(MySQLDataTypesSupport::DATETIME64));
123
    ASSERT_EQ("", setting.toString());
124
    ASSERT_EQ(Field(""), setting);
125
}
126

127
GTEST_TEST(SettingMySQLDataTypesSupport, SetInvalidString)
128
{
129
    // Setting can be initialized with int value corresponding to (DECIMAL | DATETIME64)
130
    SettingMySQLDataTypesSupport setting;
131
    EXPECT_THROW(setting = String("FOOBAR"), Exception);
132
    ASSERT_FALSE(setting.changed);
133
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{}, setting.value);
134

135
    EXPECT_THROW(setting = String("decimal,datetime64,123"), Exception);
136
    ASSERT_FALSE(setting.changed);
137
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{}, setting.value);
138

139
    EXPECT_NO_THROW(setting = String(", "));
140
    ASSERT_TRUE(setting.changed);
141
    ASSERT_EQ(std::vector<MySQLDataTypesSupport>{}, setting.value);
142
}
143

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

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

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

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