TDengine/source/util/test/pageBufferTest.cpp

165 lines
5.7 KiB
C++
Raw Normal View History

2022-02-10 05:56:21 +00:00
#include <gtest/gtest.h>
#include <cassert>
#include <iostream>
#include "taos.h"
#include "tpagedbuf.h"
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-variable"
namespace {
// simple test
void simpleTest() {
SDiskbasedBuf* pResultBuf = NULL;
2022-02-19 15:11:23 +00:00
int32_t ret = createDiskbasedBuf(&pResultBuf, 1024, 4096, 1, "/tmp/");
2022-02-10 05:56:21 +00:00
int32_t pageId = 0;
int32_t groupId = 0;
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(pBufPage != NULL);
ASSERT_EQ(getTotalBufSize(pResultBuf), 1024);
SIDList list = getDataBufPagesIdList(pResultBuf, groupId);
ASSERT_EQ(taosArrayGetSize(list), 1);
2022-02-19 15:11:23 +00:00
ASSERT_EQ(getNumOfBufGroupId(pResultBuf), 1);
2022-02-10 05:56:21 +00:00
releaseBufPage(pResultBuf, pBufPage);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage1 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
2022-02-10 05:56:21 +00:00
2022-02-23 07:38:35 +00:00
SFilePage* t = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t == pBufPage1);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage2 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t1 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t1 == pBufPage2);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage3 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t2 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t2 == pBufPage3);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage4 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t3 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t3 == pBufPage4);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage5 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t4 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t4 == pBufPage5);
2022-02-19 15:11:23 +00:00
destroyDiskbasedBuf(pResultBuf);
2022-02-10 05:56:21 +00:00
}
void writeDownTest() {
SDiskbasedBuf* pResultBuf = NULL;
2022-02-19 15:11:23 +00:00
int32_t ret = createDiskbasedBuf(&pResultBuf, 1024, 4*1024, 1, "/tmp/");
2022-02-10 05:56:21 +00:00
int32_t pageId = 0;
int32_t writePageId = 0;
int32_t groupId = 0;
int32_t nx = 12345;
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(pBufPage != NULL);
*(int32_t*)(pBufPage->data) = nx;
writePageId = pageId;
releaseBufPage(pResultBuf, pBufPage);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage1 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t1 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t1 == pBufPage1);
ASSERT_TRUE(pageId == 1);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage2 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t2 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t2 == pBufPage2);
ASSERT_TRUE(pageId == 2);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage3 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t3 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t3 == pBufPage3);
ASSERT_TRUE(pageId == 3);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage4 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t4 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t4 == pBufPage4);
ASSERT_TRUE(pageId == 4);
releaseBufPage(pResultBuf, t4);
// flush the written page to disk, and read it out again
2022-02-23 07:38:35 +00:00
SFilePage* pBufPagex = static_cast<SFilePage*>(getBufPage(pResultBuf, writePageId));
2022-02-10 05:56:21 +00:00
ASSERT_EQ(*(int32_t*)pBufPagex->data, nx);
SArray* pa = getDataBufPagesIdList(pResultBuf, groupId);
ASSERT_EQ(taosArrayGetSize(pa), 5);
2022-02-19 15:11:23 +00:00
destroyDiskbasedBuf(pResultBuf);
2022-02-10 05:56:21 +00:00
}
void recyclePageTest() {
SDiskbasedBuf* pResultBuf = NULL;
2022-02-19 15:11:23 +00:00
int32_t ret = createDiskbasedBuf(&pResultBuf, 1024, 4*1024, 1, "/tmp/");
2022-02-10 05:56:21 +00:00
int32_t pageId = 0;
int32_t writePageId = 0;
int32_t groupId = 0;
int32_t nx = 12345;
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(pBufPage != NULL);
releaseBufPage(pResultBuf, pBufPage);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage1 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t1 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t1 == pBufPage1);
ASSERT_TRUE(pageId == 1);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage2 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t2 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t2 == pBufPage2);
ASSERT_TRUE(pageId == 2);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage3 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t3 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t3 == pBufPage3);
ASSERT_TRUE(pageId == 3);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage4 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t4 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t4 == pBufPage4);
ASSERT_TRUE(pageId == 4);
releaseBufPage(pResultBuf, t4);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPage5 = static_cast<SFilePage*>(getNewBufPage(pResultBuf, groupId, &pageId));
SFilePage* t5 = static_cast<SFilePage*>(getBufPage(pResultBuf, pageId));
2022-02-10 05:56:21 +00:00
ASSERT_TRUE(t5 == pBufPage5);
ASSERT_TRUE(pageId == 5);
// flush the written page to disk, and read it out again
2022-02-23 07:38:35 +00:00
SFilePage* pBufPagex = static_cast<SFilePage*>(getBufPage(pResultBuf, writePageId));
2022-02-10 05:56:21 +00:00
*(int32_t*)(pBufPagex->data) = nx;
writePageId = pageId; // update the data
releaseBufPage(pResultBuf, pBufPagex);
2022-02-23 07:38:35 +00:00
SFilePage* pBufPagex1 = static_cast<SFilePage*>(getBufPage(pResultBuf, 1));
2022-02-10 05:56:21 +00:00
SArray* pa = getDataBufPagesIdList(pResultBuf, groupId);
ASSERT_EQ(taosArrayGetSize(pa), 6);
2022-02-19 15:11:23 +00:00
destroyDiskbasedBuf(pResultBuf);
2022-02-10 05:56:21 +00:00
}
} // namespace
TEST(testCase, resultBufferTest) {
srand(time(NULL));
simpleTest();
writeDownTest();
recyclePageTest();
}
#pragma GCC diagnostic pop