walMetaTest.cpp 3.4 KB
Newer Older
L
Liu Jicong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
#include <gtest/gtest.h>
#include <cstring>
#include <iostream>
#include <queue>

#include "walInt.h"

class WalCleanEnv : public ::testing::Test {
  protected:
    static void SetUpTestCase() {
      int code = walInit();
      ASSERT(code == 0);
    }

    static void TearDownTestCase() {
      walCleanUp();
    }

    void SetUp() override {
      taosRemoveDir(pathName);
      SWalCfg* pCfg = (SWalCfg*)malloc(sizeof(SWal));
      memset(pCfg, 0, sizeof(SWalCfg));
      pCfg->rollPeriod = -1;
      pCfg->segSize = -1;
      pCfg->walLevel = TAOS_WAL_FSYNC;
      pWal = walOpen(pathName, pCfg);
      ASSERT(pWal != NULL);
    }

    void TearDown() override {
      walClose(pWal);
      pWal = NULL;
    }

    SWal* pWal = NULL;
    const char* pathName = "/tmp/wal_test";
};

class WalKeepEnv : public ::testing::Test {
  protected:
    static void SetUpTestCase() {
      int code = walInit();
      ASSERT(code == 0);
    }

    static void TearDownTestCase() {
      walCleanUp();
    }

    void SetUp() override {
      SWalCfg* pCfg = (SWalCfg*)malloc(sizeof(SWal)); 
      memset(pCfg, 0, sizeof(SWalCfg));
      pCfg->rollPeriod = -1;
      pCfg->segSize = -1;
      pCfg->walLevel = TAOS_WAL_FSYNC;
      pWal = walOpen(pathName, pCfg);
      ASSERT(pWal != NULL);
    }

    void TearDown() override {
      walClose(pWal);
      pWal = NULL;
    }

    SWal* pWal = NULL;
    const char* pathName = "/tmp/wal_test";
};

TEST_F(WalCleanEnv, createNew) {
  walRollFileInfo(pWal);
  ASSERT(pWal->fileInfoSet != NULL);
  ASSERT_EQ(pWal->fileInfoSet->size, 1);
  WalFileInfo* pInfo = (WalFileInfo*)taosArrayGetLast(pWal->fileInfoSet);
  ASSERT_EQ(pInfo->firstVer, 0);
  ASSERT_EQ(pInfo->lastVer, -1);
  ASSERT_EQ(pInfo->closeTs, -1);
  ASSERT_EQ(pInfo->fileSize, 0);
}

TEST_F(WalCleanEnv, serialize) {
  int code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  ASSERT(pWal->fileInfoSet != NULL);

  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
95
  char*ss = walMetaSerialize(pWal);
L
Liu Jicong 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
  printf("%s\n", ss);
  code = walWriteMeta(pWal);
  ASSERT(code == 0);
}

TEST_F(WalCleanEnv, removeOldMeta) {
  int code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  ASSERT(pWal->fileInfoSet != NULL);
  code = walWriteMeta(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walWriteMeta(pWal);
  ASSERT(code == 0);
}

TEST_F(WalKeepEnv, readOldMeta) {
  int code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walWriteMeta(pWal);
  ASSERT(code == 0);
  code = walRollFileInfo(pWal);
  ASSERT(code == 0);
  code = walWriteMeta(pWal);
  ASSERT(code == 0);
122
  char*oldss = walMetaSerialize(pWal);
L
Liu Jicong 已提交
123 124 125 126 127

  TearDown();
  SetUp();
  code = walReadMeta(pWal);
  ASSERT(code == 0);
128
  char* newss = walMetaSerialize(pWal);
L
Liu Jicong 已提交
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

  int len = strlen(oldss);
  ASSERT_EQ(len, strlen(newss));
  for(int i = 0; i < len; i++) {
    EXPECT_EQ(oldss[i], newss[i]);
  }
}

TEST_F(WalKeepEnv, write) {
  const char* ranStr = "tvapq02tcp";
  const int len = strlen(ranStr);
  int code;
  for(int i = 0; i < 10; i++) {
    code = walWrite(pWal, i, i+1, (void*)ranStr, len); 
    ASSERT_EQ(code, 0);
    code = walWrite(pWal, i+2, i, (void*)ranStr, len);
    ASSERT_EQ(code, -1);
  }
  code = walWriteMeta(pWal);
  ASSERT_EQ(code, 0);
}