oceanbase

Форк
0
/
test_ob_log_safe_arena.cpp 
70 строк · 1.9 Кб
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 "lib/oblog/ob_log.h"
14
#include <gtest/gtest.h>
15
#include "ob_log_safe_arena.h"
16
#include <thread>
17

18
namespace oceanbase
19
{
20
namespace libobcdc
21
{
22

23
bool check_memset(const void *ptr, const char c, const int64_t size) {
24
  bool bret = true;
25
  const char *cptr = static_cast<const char*>(ptr);
26
  for (int i = 0; bret && i < size; i++) {
27
    if (cptr[i] != c) {
28
      bret = false;
29
    }
30
  }
31
  return bret;
32
}
33

34
TEST(ObLogSafeArena, test_ob_log_safe_arena)
35
{
36
  ObCdcSafeArena safe_arena;
37
  const int64_t THREAD_NUM = 32;
38
  std::vector<std::thread> threads;
39
  auto alloc_test_func = [&](int idx) {
40
    constexpr int64_t ALLOC_CNT = 1024;
41
    constexpr int64_t ALLOC_SIZE = 1024;
42
    ObRandom rand;
43
    char c = static_cast<char>(idx & 0xFF);
44
    for (int i = 0; i < ALLOC_CNT; i++) {
45
      int64_t alloc_size = rand.get(1, ALLOC_SIZE);
46
      void *ptr = safe_arena.alloc(alloc_size);
47
      EXPECT_TRUE(NULL != ptr);
48
      MEMSET(ptr, c, alloc_size);
49
      EXPECT_TRUE(check_memset(ptr, c, alloc_size));
50
    }
51
  };
52
  for (int i = 0; i < THREAD_NUM; i++) {
53
    threads.emplace_back(std::thread(alloc_test_func, i));
54
  }
55
  for (int i = 0; i < THREAD_NUM; i++) {
56
    threads[i].join();
57
  }
58
  safe_arena.clear();
59
}
60

61
} // namespace libobcdc
62
} // ns oceanbase
63

64
int main(int argc, char **argv)
65
{
66
  oceanbase::common::ObLogger::get_logger().set_log_level("DEBUG");
67
  OB_LOGGER.set_log_level("DEBUG");
68
  testing::InitGoogleTest(&argc, argv);
69
  return RUN_ALL_TESTS();
70
}
71

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

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

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

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