test_util.cpp 21.5 KB
Newer Older
1
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
J
jinhai 已提交
2
//
3 4
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
J
jinhai 已提交
5
//
6 7 8 9 10
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License.
J
jinhai 已提交
11

Y
youny626 已提交
12 13
#include "db/engine/ExecutionEngine.h"
#include "utils/BlockingQueue.h"
G
groot 已提交
14 15
#include "utils/CommonUtil.h"
#include "utils/Error.h"
Y
youny626 已提交
16 17
#include "utils/LogUtil.h"
#include "utils/SignalUtil.h"
G
groot 已提交
18
#include "utils/StringHelpFunctions.h"
G
groot 已提交
19
#include "utils/TimeRecorder.h"
S
starlord 已提交
20
#include "utils/ValidationUtil.h"
S
shengjh 已提交
21
#include "utils/ThreadPool.h"
G
groot 已提交
22

Y
youny626 已提交
23
#include <gtest/gtest.h>
24
#include <sys/stat.h>
Y
youny626 已提交
25
#include <sys/types.h>
26
#include <boost/filesystem.hpp>
Y
youny626 已提交
27
#include <thread>
S
shengjh 已提交
28 29 30 31
#include <src/utils/Exception.h>

#include <fiu-local.h>
#include <fiu-control.h>
32

G
groot 已提交
33
namespace {
G
groot 已提交
34

S
starlord 已提交
35
static const char* LOG_FILE_PATH = "./milvus/conf/log_config.conf";
G
groot 已提交
36

S
starlord 已提交
37
void
S
starlord 已提交
38
CopyStatus(milvus::Status& st1, milvus::Status& st2) {
S
starlord 已提交
39 40 41
    st1 = st2;
}

Y
youny626 已提交
42
}  // namespace
G
groot 已提交
43

G
groot 已提交
44 45
TEST(UtilTest, EXCEPTION_TEST) {
    std::string err_msg = "failed";
S
starlord 已提交
46 47
    milvus::server::ServerException ex(milvus::SERVER_UNEXPECTED_ERROR, err_msg);
    ASSERT_EQ(ex.error_code(), milvus::SERVER_UNEXPECTED_ERROR);
G
groot 已提交
48 49
    std::string msg = ex.what();
    ASSERT_EQ(msg, err_msg);
S
shengjh 已提交
50 51 52 53 54 55 56 57 58 59 60

    milvus::Exception ex1(milvus::SERVER_UNEXPECTED_ERROR, err_msg);
    ASSERT_EQ(ex1.code(), milvus::SERVER_UNEXPECTED_ERROR);
    msg = ex1.what();
    ASSERT_EQ(msg, err_msg);

    std::string empty_err_msg;
    milvus::Exception empty_ex(milvus::SERVER_UNEXPECTED_ERROR, empty_err_msg);
    ASSERT_EQ(empty_ex.code(), milvus::SERVER_UNEXPECTED_ERROR);
    msg = empty_ex.what();
    ASSERT_NE(msg, empty_err_msg);
G
groot 已提交
61 62
}

S
starlord 已提交
63
TEST(UtilTest, SIGNAL_TEST) {
S
starlord 已提交
64
    milvus::server::SignalUtil::PrintStacktrace();
S
starlord 已提交
65 66
}

G
groot 已提交
67
TEST(UtilTest, COMMON_TEST) {
S
starlord 已提交
68
    uint64_t total_mem = 0, free_mem = 0;
S
starlord 已提交
69
    milvus::server::CommonUtil::GetSystemMemInfo(total_mem, free_mem);
G
groot 已提交
70 71 72
    ASSERT_GT(total_mem, 0);
    ASSERT_GT(free_mem, 0);

Y
yudong.cai 已提交
73
    int64_t thread_cnt = 0;
S
starlord 已提交
74
    milvus::server::CommonUtil::GetSystemAvailableThreads(thread_cnt);
G
groot 已提交
75 76
    ASSERT_GT(thread_cnt, 0);

S
shengjh 已提交
77 78 79 80 81 82 83
    fiu_init(0);
    fiu_enable("CommonUtil.GetSystemAvailableThreads.zero_thread", 1, NULL, 0);
    milvus::server::CommonUtil::GetSystemAvailableThreads(thread_cnt);
    ASSERT_GT(thread_cnt, 0);
    fiu_disable("CommonUtil.GetSystemAvailableThreads.zero_thread");

    std::string empty_path = "";
G
groot 已提交
84 85 86
    std::string path1 = "/tmp/milvus_test/";
    std::string path2 = path1 + "common_test_12345/";
    std::string path3 = path2 + "abcdef";
S
starlord 已提交
87
    milvus::Status status = milvus::server::CommonUtil::CreateDirectory(path3);
S
starlord 已提交
88
    ASSERT_TRUE(status.ok());
S
shengjh 已提交
89 90 91 92

    status = milvus::server::CommonUtil::CreateDirectory(empty_path);
    ASSERT_TRUE(status.ok());

Y
youny626 已提交
93
    // test again
S
starlord 已提交
94
    status = milvus::server::CommonUtil::CreateDirectory(path3);
S
starlord 已提交
95
    ASSERT_TRUE(status.ok());
G
groot 已提交
96

S
starlord 已提交
97
    ASSERT_TRUE(milvus::server::CommonUtil::IsDirectoryExist(path3));
G
groot 已提交
98

S
shengjh 已提交
99 100 101
    status = milvus::server::CommonUtil::DeleteDirectory(empty_path);
    ASSERT_TRUE(status.ok());

S
starlord 已提交
102
    status = milvus::server::CommonUtil::DeleteDirectory(path1);
S
starlord 已提交
103
    ASSERT_TRUE(status.ok());
Y
youny626 已提交
104
    // test again
S
starlord 已提交
105
    status = milvus::server::CommonUtil::DeleteDirectory(path1);
S
starlord 已提交
106
    ASSERT_TRUE(status.ok());
G
groot 已提交
107

S
starlord 已提交
108 109
    ASSERT_FALSE(milvus::server::CommonUtil::IsDirectoryExist(path1));
    ASSERT_FALSE(milvus::server::CommonUtil::IsFileExist(path1));
G
groot 已提交
110

S
starlord 已提交
111
    std::string exe_path = milvus::server::CommonUtil::GetExePath();
G
groot 已提交
112 113
    ASSERT_FALSE(exe_path.empty());

S
shengjh 已提交
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
    fiu_enable("CommonUtil.GetExePath.readlink_fail", 1, NULL, 0);
    exe_path = milvus::server::CommonUtil::GetExePath();
    ASSERT_FALSE(!exe_path.empty());
    fiu_disable("CommonUtil.GetExePath.readlink_fail");

    fiu_enable("CommonUtil.GetExePath.exe_path_error", 1, NULL, 0);
    exe_path = milvus::server::CommonUtil::GetExePath();
    ASSERT_FALSE(exe_path.empty());
    fiu_disable("CommonUtil.GetExePath.exe_path_error");

    fiu_enable("CommonUtil.CreateDirectory.create_parent_fail", 1, NULL, 0);
    status = milvus::server::CommonUtil::CreateDirectory(path3);
    ASSERT_FALSE(status.ok());
    fiu_disable("CommonUtil.CreateDirectory.create_parent_fail");

    fiu_enable("CommonUtil.CreateDirectory.create_dir_fail", 1, NULL, 0);
    status = milvus::server::CommonUtil::CreateDirectory(path3);
    ASSERT_FALSE(status.ok());
    fiu_disable("CommonUtil.CreateDirectory.create_dir_fail");

G
groot 已提交
134
    time_t tt;
S
starlord 已提交
135
    time(&tt);
G
groot 已提交
136 137
    tm time_struct;
    memset(&time_struct, 0, sizeof(tm));
S
starlord 已提交
138
    milvus::server::CommonUtil::ConvertTime(tt, time_struct);
139 140 141
    ASSERT_GE(time_struct.tm_year, 0);
    ASSERT_GE(time_struct.tm_mon, 0);
    ASSERT_GE(time_struct.tm_mday, 0);
S
starlord 已提交
142
    milvus::server::CommonUtil::ConvertTime(time_struct, tt);
G
groot 已提交
143 144
    ASSERT_GT(tt, 0);

S
starlord 已提交
145
    bool res = milvus::server::CommonUtil::TimeStrToTime("2019-03-23", tt, time_struct);
G
groot 已提交
146 147 148 149 150
    ASSERT_EQ(time_struct.tm_year, 119);
    ASSERT_EQ(time_struct.tm_mon, 2);
    ASSERT_EQ(time_struct.tm_mday, 23);
    ASSERT_GT(tt, 0);
    ASSERT_TRUE(res);
G
groot 已提交
151 152 153
}

TEST(UtilTest, STRINGFUNCTIONS_TEST) {
S
starlord 已提交
154
    std::string str = " test str";
S
starlord 已提交
155
    milvus::server::StringHelpFunctions::TrimStringBlank(str);
S
starlord 已提交
156
    ASSERT_EQ(str, "test str");
G
groot 已提交
157

S
starlord 已提交
158
    str = "\"test str\"";
S
starlord 已提交
159
    milvus::server::StringHelpFunctions::TrimStringQuote(str, "\"");
S
starlord 已提交
160
    ASSERT_EQ(str, "test str");
G
groot 已提交
161

G
groot 已提交
162 163
    str = "a,b,c";
    std::vector<std::string> result;
Z
Zhiru Zhu 已提交
164
    milvus::server::StringHelpFunctions::SplitStringByDelimeter(str, ",", result);
G
groot 已提交
165 166
    ASSERT_EQ(result.size(), 3UL);

G
groot 已提交
167 168 169
    std::string merge_str;
    milvus::server::StringHelpFunctions::MergeStringWithDelimeter(result, ",", merge_str);
    ASSERT_EQ(merge_str, "a,b,c");
G
groot 已提交
170
    result.clear();
G
groot 已提交
171 172 173
    milvus::server::StringHelpFunctions::MergeStringWithDelimeter(result, ",", merge_str);
    ASSERT_TRUE(merge_str.empty());

Z
Zhiru Zhu 已提交
174
    auto status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
S
starlord 已提交
175
    ASSERT_TRUE(status.ok());
G
groot 已提交
176 177 178
    ASSERT_EQ(result.size(), 3UL);

    result.clear();
S
starlord 已提交
179
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "", result);
S
starlord 已提交
180
    ASSERT_TRUE(status.ok());
G
groot 已提交
181 182 183 184
    ASSERT_EQ(result.size(), 3UL);

    str = "55,\"aa,gg,yy\",b";
    result.clear();
S
starlord 已提交
185
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
S
starlord 已提交
186
    ASSERT_TRUE(status.ok());
G
groot 已提交
187
    ASSERT_EQ(result.size(), 3UL);
G
groot 已提交
188

S
shengjh 已提交
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
    fiu_init(0);
    fiu_enable("StringHelpFunctions.SplitStringByQuote.invalid_index", 1, NULL, 0);
    result.clear();
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
    ASSERT_FALSE(status.ok());
    fiu_disable("StringHelpFunctions.SplitStringByQuote.invalid_index");

    fiu_enable("StringHelpFunctions.SplitStringByQuote.index_gt_last", 1, NULL, 0);
    result.clear();
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
    ASSERT_TRUE(status.ok());
    fiu_disable("StringHelpFunctions.SplitStringByQuote.index_gt_last");

    fiu_enable("StringHelpFunctions.SplitStringByQuote.invalid_index2", 1, NULL, 0);
    result.clear();
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
    ASSERT_FALSE(status.ok());
    fiu_disable("StringHelpFunctions.SplitStringByQuote.invalid_index2");

    fiu_enable("StringHelpFunctions.SplitStringByQuote.last_is_end", 1, NULL, 0);
    result.clear();
    status = milvus::server::StringHelpFunctions::SplitStringByQuote(str, ",", "\"", result);
    ASSERT_TRUE(status.ok());
    fiu_disable("StringHelpFunctions.SplitStringByQuote.last_is_end2");

G
groot 已提交
214 215 216
    ASSERT_TRUE(milvus::server::StringHelpFunctions::IsRegexMatch("abc", "abc"));
    ASSERT_TRUE(milvus::server::StringHelpFunctions::IsRegexMatch("a8c", "a\\d."));
    ASSERT_FALSE(milvus::server::StringHelpFunctions::IsRegexMatch("abc", "a\\dc"));
G
groot 已提交
217 218 219
}

TEST(UtilTest, BLOCKINGQUEUE_TEST) {
S
starlord 已提交
220
    milvus::server::BlockingQueue<std::string> bq;
G
groot 已提交
221 222 223 224

    static const size_t count = 10;
    bq.SetCapacity(count);

S
starlord 已提交
225
    for (size_t i = 1; i <= count; i++) {
G
groot 已提交
226 227
        std::string id = "No." + std::to_string(i);
        bq.Put(id);
G
groot 已提交
228 229
    }

G
groot 已提交
230 231 232 233 234 235 236 237 238
    ASSERT_EQ(bq.Size(), count);
    ASSERT_FALSE(bq.Empty());

    std::string str = bq.Front();
    ASSERT_EQ(str, "No.1");

    str = bq.Back();
    ASSERT_EQ(str, "No." + std::to_string(count));

S
starlord 已提交
239
    for (size_t i = 1; i <= count; i++) {
G
groot 已提交
240 241 242 243
        std::string id = "No." + std::to_string(i);
        str = bq.Take();
        ASSERT_EQ(id, str);
    }
G
groot 已提交
244 245

    ASSERT_EQ(bq.Size(), 0);
G
groot 已提交
246 247
}

G
groot 已提交
248
TEST(UtilTest, LOG_TEST) {
S
starlord 已提交
249
    auto status = milvus::server::InitLog(LOG_FILE_PATH);
S
starlord 已提交
250
    ASSERT_TRUE(status.ok());
G
groot 已提交
251

S
starlord 已提交
252 253 254
    EXPECT_FALSE(el::Loggers::hasFlag(el::LoggingFlag::NewLineForContainer));
    EXPECT_FALSE(el::Loggers::hasFlag(el::LoggingFlag::LogDetailedCrashReason));

S
starlord 已提交
255
    std::string fname = milvus::server::CommonUtil::GetFileName(LOG_FILE_PATH);
G
groot 已提交
256 257
    ASSERT_EQ(fname, "log_config.conf");
}
S
starlord 已提交
258

S
starlord 已提交
259
TEST(UtilTest, TIMERECORDER_TEST) {
S
starlord 已提交
260 261
    for (int64_t log_level = 0; log_level <= 6; log_level++) {
        if (log_level == 5) {
Y
youny626 已提交
262
            continue;  // skip fatal
S
starlord 已提交
263
        }
S
starlord 已提交
264
        milvus::TimeRecorder rc("time", log_level);
S
starlord 已提交
265 266 267 268
        rc.RecordSection("end");
    }
}

S
shengjh 已提交
269 270 271 272 273
TEST(UtilTest, TIMERECOREDRAUTO_TEST) {
    milvus::TimeRecorderAuto rc("time");
    rc.RecordSection("end");
}

S
starlord 已提交
274
TEST(UtilTest, STATUS_TEST) {
S
starlord 已提交
275
    auto status = milvus::Status::OK();
S
starlord 已提交
276 277 278
    std::string str = status.ToString();
    ASSERT_FALSE(str.empty());

S
shengjh 已提交
279 280 281 282 283
    status = milvus::Status(milvus::DB_SUCCESS, "success");
    ASSERT_EQ(status.code(), milvus::DB_SUCCESS);
    str = status.ToString();
    ASSERT_FALSE(str.empty());

S
starlord 已提交
284 285
    status = milvus::Status(milvus::DB_ERROR, "mistake");
    ASSERT_EQ(status.code(), milvus::DB_ERROR);
S
starlord 已提交
286 287 288
    str = status.ToString();
    ASSERT_FALSE(str.empty());

S
starlord 已提交
289 290
    status = milvus::Status(milvus::DB_NOT_FOUND, "mistake");
    ASSERT_EQ(status.code(), milvus::DB_NOT_FOUND);
S
starlord 已提交
291 292 293
    str = status.ToString();
    ASSERT_FALSE(str.empty());

S
starlord 已提交
294 295
    status = milvus::Status(milvus::DB_ALREADY_EXIST, "mistake");
    ASSERT_EQ(status.code(), milvus::DB_ALREADY_EXIST);
S
starlord 已提交
296 297 298
    str = status.ToString();
    ASSERT_FALSE(str.empty());

G
groot 已提交
299 300 301 302 303
    status = milvus::Status(milvus::DB_INVALID_PATH, "mistake");
    ASSERT_EQ(status.code(), milvus::DB_INVALID_PATH);
    str = status.ToString();
    ASSERT_FALSE(str.empty());

S
starlord 已提交
304 305
    status = milvus::Status(milvus::DB_META_TRANSACTION_FAILED, "mistake");
    ASSERT_EQ(status.code(), milvus::DB_META_TRANSACTION_FAILED);
S
starlord 已提交
306 307 308
    str = status.ToString();
    ASSERT_FALSE(str.empty());

S
starlord 已提交
309
    auto status_copy = milvus::Status::OK();
S
starlord 已提交
310
    CopyStatus(status_copy, status);
S
starlord 已提交
311
    ASSERT_EQ(status.code(), milvus::DB_META_TRANSACTION_FAILED);
S
starlord 已提交
312 313 314 315 316 317 318 319 320 321

    auto status_ref(status);
    ASSERT_EQ(status_ref.code(), status.code());
    ASSERT_EQ(status_ref.ToString(), status.ToString());

    auto status_move = std::move(status);
    ASSERT_EQ(status_move.code(), status_ref.code());
    ASSERT_EQ(status_move.ToString(), status_ref.ToString());
}

S
starlord 已提交
322
TEST(ValidationUtilTest, VALIDATE_TABLENAME_TEST) {
S
starlord 已提交
323
    std::string table_name = "Normal123_";
S
starlord 已提交
324
    auto status = milvus::server::ValidationUtil::ValidateTableName(table_name);
S
starlord 已提交
325
    ASSERT_TRUE(status.ok());
S
starlord 已提交
326 327

    table_name = "12sds";
S
starlord 已提交
328 329
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
330 331

    table_name = "";
S
starlord 已提交
332 333
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
334 335

    table_name = "_asdasd";
S
starlord 已提交
336 337
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
338 339

    table_name = "!@#!@";
S
starlord 已提交
340 341
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
342

S
starlord 已提交
343
    table_name = "_!@#!@";
S
starlord 已提交
344 345
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
346

S
starlord 已提交
347
    table_name = "中文";
S
starlord 已提交
348 349
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
350

S
starlord 已提交
351
    table_name = std::string(10000, 'a');
S
starlord 已提交
352 353
    status = milvus::server::ValidationUtil::ValidateTableName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
G
groot 已提交
354 355 356 357

    table_name = "";
    status = milvus::server::ValidationUtil::ValidatePartitionName(table_name);
    ASSERT_EQ(status.code(), milvus::SERVER_INVALID_TABLE_NAME);
S
starlord 已提交
358 359
}

S
starlord 已提交
360
TEST(ValidationUtilTest, VALIDATE_DIMENSION_TEST) {
S
starlord 已提交
361 362 363 364
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableDimension(-1).code(),
              milvus::SERVER_INVALID_VECTOR_DIMENSION);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableDimension(0).code(),
              milvus::SERVER_INVALID_VECTOR_DIMENSION);
G
groot 已提交
365
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableDimension(32769).code(),
S
starlord 已提交
366
              milvus::SERVER_INVALID_VECTOR_DIMENSION);
G
groot 已提交
367
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableDimension(32768).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
368
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableDimension(1).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
369 370
}

S
starlord 已提交
371
TEST(ValidationUtilTest, VALIDATE_INDEX_TEST) {
S
starlord 已提交
372 373 374
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexType((int)milvus::engine::EngineType::INVALID).code(),
              milvus::SERVER_INVALID_INDEX_TYPE);
    for (int i = 1; i <= (int)milvus::engine::EngineType::MAX_VALUE; i++) {
S
starlord 已提交
375 376
#ifndef CUSTOMIZATION
        if (i == (int)milvus::engine::EngineType::FAISS_IVFSQ8H) {
S
shengjh 已提交
377
            ASSERT_NE(milvus::server::ValidationUtil::ValidateTableIndexType(i).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
378 379 380
            continue;
        }
#endif
S
starlord 已提交
381
        ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexType(i).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
382
    }
S
shengjh 已提交
383

Y
youny626 已提交
384 385 386
    ASSERT_EQ(
        milvus::server::ValidationUtil::ValidateTableIndexType((int)milvus::engine::EngineType::MAX_VALUE + 1).code(),
        milvus::SERVER_INVALID_INDEX_TYPE);
S
starlord 已提交
387

S
starlord 已提交
388 389
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexNlist(0).code(), milvus::SERVER_INVALID_INDEX_NLIST);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexNlist(100).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
390

S
starlord 已提交
391 392 393
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexFileSize(0).code(),
              milvus::SERVER_INVALID_INDEX_FILE_SIZE);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexFileSize(100).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
394

S
starlord 已提交
395 396 397 398
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexMetricType(0).code(),
              milvus::SERVER_INVALID_INDEX_METRIC_TYPE);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexMetricType(1).code(), milvus::SERVER_SUCCESS);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateTableIndexMetricType(2).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
399 400
}

S
starlord 已提交
401
TEST(ValidationUtilTest, VALIDATE_TOPK_TEST) {
S
starlord 已提交
402 403 404 405
    milvus::engine::meta::TableSchema schema;
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateSearchTopk(10, schema).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateSearchTopk(65536, schema).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateSearchTopk(0, schema).code(), milvus::SERVER_SUCCESS);
406 407
}

S
starlord 已提交
408
TEST(ValidationUtilTest, VALIDATE_NPROBE_TEST) {
S
starlord 已提交
409
    milvus::engine::meta::TableSchema schema;
410
    schema.nlist_ = 100;
S
starlord 已提交
411 412 413
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateSearchNprobe(10, schema).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateSearchNprobe(0, schema).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateSearchNprobe(101, schema).code(), milvus::SERVER_SUCCESS);
414 415
}

G
groot 已提交
416 417 418 419 420 421 422
TEST(ValidationUtilTest, VALIDATE_PARTITION_TAGS) {
    std::vector<std::string> partition_tags = {"abc"};
    ASSERT_EQ(milvus::server::ValidationUtil::ValidatePartitionTags(partition_tags).code(), milvus::SERVER_SUCCESS);
    partition_tags.push_back("");
    ASSERT_NE(milvus::server::ValidationUtil::ValidatePartitionTags(partition_tags).code(), milvus::SERVER_SUCCESS);
}

Y
youny626 已提交
423
#ifdef MILVUS_GPU_VERSION
S
starlord 已提交
424
TEST(ValidationUtilTest, VALIDATE_GPU_TEST) {
S
starlord 已提交
425 426
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateGpuIndex(0).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateGpuIndex(100).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
427

S
shengjh 已提交
428 429 430 431 432
    fiu_init(0);
    fiu_enable("ValidationUtil.ValidateGpuIndex.get_device_count_fail", 1, NULL, 0);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateGpuIndex(0).code(), milvus::SERVER_SUCCESS);
    fiu_disable("ValidationUtil.ValidateGpuIndex.get_device_count_fail");

S
starlord 已提交
433
    size_t memory = 0;
S
starlord 已提交
434 435
    ASSERT_EQ(milvus::server::ValidationUtil::GetGpuMemory(0, memory).code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::GetGpuMemory(100, memory).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
436
}
S
shengjh 已提交
437

Y
youny626 已提交
438
#endif
S
starlord 已提交
439

S
starlord 已提交
440
TEST(ValidationUtilTest, VALIDATE_IPADDRESS_TEST) {
S
starlord 已提交
441 442
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateIpAddress("127.0.0.1").code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateIpAddress("not ip").code(), milvus::SERVER_SUCCESS);
S
shengjh 已提交
443 444 445 446 447

    fiu_init(0);
    fiu_enable("ValidationUtil.ValidateIpAddress.error_ip_result", 1, NULL, 0);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateIpAddress("not ip").code(), milvus::SERVER_SUCCESS);
    fiu_disable("ValidationUtil.ValidateIpAddress.error_ip_result");
S
starlord 已提交
448 449 450
}

TEST(ValidationUtilTest, VALIDATE_NUMBER_TEST) {
S
starlord 已提交
451 452
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateStringIsNumber("1234").code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateStringIsNumber("not number").code(), milvus::SERVER_SUCCESS);
S
shengjh 已提交
453 454 455 456 457

    fiu_init(0);
    fiu_enable("ValidationUtil.ValidateStringIsNumber.throw_exception", 1, NULL, 0);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateStringIsNumber("122").code(), milvus::SERVER_SUCCESS);
    fiu_disable("ValidationUtil.ValidateStringIsNumber.throw_exception");
S
starlord 已提交
458 459 460 461
}

TEST(ValidationUtilTest, VALIDATE_BOOL_TEST) {
    std::string str = "true";
S
starlord 已提交
462
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateStringIsBool(str).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
463
    str = "not bool";
S
starlord 已提交
464
    ASSERT_NE(milvus::server::ValidationUtil::ValidateStringIsBool(str).code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
465 466 467
}

TEST(ValidationUtilTest, VALIDATE_DOUBLE_TEST) {
S
starlord 已提交
468 469
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateStringIsFloat("2.5").code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateStringIsFloat("not double").code(), milvus::SERVER_SUCCESS);
S
starlord 已提交
470 471 472
}

TEST(ValidationUtilTest, VALIDATE_DBURI_TEST) {
S
starlord 已提交
473 474 475 476 477 478 479
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateDbURI("sqlite://:@:/").code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateDbURI("xxx://:@:/").code(), milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateDbURI("not uri").code(), milvus::SERVER_SUCCESS);
    ASSERT_EQ(milvus::server::ValidationUtil::ValidateDbURI("mysql://root:123456@127.0.0.1:3303/milvus").code(),
              milvus::SERVER_SUCCESS);
    ASSERT_NE(milvus::server::ValidationUtil::ValidateDbURI("mysql://root:123456@127.0.0.1:port/milvus").code(),
              milvus::SERVER_SUCCESS);
S
starlord 已提交
480
}
H
Heisenberg 已提交
481

S
starlord 已提交
482
TEST(UtilTest, ROLLOUTHANDLER_TEST) {
H
Heisenberg 已提交
483 484
    std::string dir1 = "/tmp/milvus_test";
    std::string dir2 = "/tmp/milvus_test/log_test";
Y
youny626 已提交
485
    std::string filename[6] = {"log_global.log", "log_debug.log", "log_warning.log",
S
shengjh 已提交
486
                               "log_trace.log", "log_error.log", "log_fatal.log"};
Y
youny626 已提交
487 488

    el::Level list[6] = {el::Level::Global, el::Level::Debug, el::Level::Warning,
S
shengjh 已提交
489
                         el::Level::Trace, el::Level::Error, el::Level::Fatal};
H
Heisenberg 已提交
490 491 492

    mkdir(dir1.c_str(), S_IRWXU);
    mkdir(dir2.c_str(), S_IRWXU);
S
shengjh 已提交
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507
//    [&]() {
////        std::string tmp = dir2 + "/" + filename[0]+"*@%$";
//        std::string tmp = dir2 + "/" + filename[0] + "*$";
//        std::ofstream file;
//        file.open(tmp.c_str());
//        file << "test" << std::endl;
//        milvus::server::RolloutHandler(tmp.c_str(), 0, el::Level::Unknown);
//        tmp.append(".1");
//        std::ifstream file2;
//        file2.open(tmp);
//        std::string tmp2;
//        file2 >> tmp2;
//        ASSERT_EQ(tmp2, "test");
//    }();

H
Heisenberg 已提交
508 509 510 511 512
    for (int i = 0; i < 6; ++i) {
        std::string tmp = dir2 + "/" + filename[i];

        std::ofstream file;
        file.open(tmp.c_str());
S
starlord 已提交
513
        file << "test" << std::endl;
H
Heisenberg 已提交
514

S
starlord 已提交
515
        milvus::server::RolloutHandler(tmp.c_str(), 0, list[i]);
H
Heisenberg 已提交
516 517 518 519 520 521 522

        tmp.append(".1");
        std::ifstream file2;
        file2.open(tmp);

        std::string tmp2;
        file2 >> tmp2;
S
starlord 已提交
523
        ASSERT_EQ(tmp2, "test");
H
Heisenberg 已提交
524
    }
S
shengjh 已提交
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539

    [&]() {
        std::string tmp = dir2 + "/" + filename[0];
        std::ofstream file;
        file.open(tmp.c_str());
        file << "test" << std::endl;
        milvus::server::RolloutHandler(tmp.c_str(), 0, el::Level::Unknown);
        tmp.append(".1");
        std::ifstream file2;
        file2.open(tmp);
        std::string tmp2;
        file2 >> tmp2;
        ASSERT_EQ(tmp2, "test");
    }();

H
Heisenberg 已提交
540
    boost::filesystem::remove_all(dir2);
S
starlord 已提交
541
}
S
shengjh 已提交
542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562

TEST(UtilTest, THREADPOOL_TEST) {
    auto thread_pool_ptr = std::make_unique<milvus::ThreadPool>(3);
    auto fun = [](int i) {
        sleep(1);
    };
    for (int i = 0; i < 10; ++i) {
        thread_pool_ptr->enqueue(fun, i);
    }

    fiu_init(0);
    fiu_enable("ThreadPool.enqueue.stop_is_true", 1, NULL, 0);
    try {
        thread_pool_ptr->enqueue(fun, -1);
    } catch (std::exception& err) {
        std::cout << "catch an error here" << std::endl;
    }
    fiu_disable("ThreadPool.enqueue.stop_is_true");

    thread_pool_ptr.reset();
}