465 lines
12 KiB
C++
465 lines
12 KiB
C++
/*
|
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
*
|
|
* This program is free software: you can use, redistribute, and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3
|
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <gtest/gtest.h>
|
|
#include <iostream>
|
|
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wwrite-strings"
|
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
|
#pragma GCC diagnostic ignored "-Wunused-variable"
|
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
|
#pragma GCC diagnostic ignored "-Wsign-compare"
|
|
#pragma GCC diagnostic ignored "-Wformat"
|
|
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
|
|
#pragma GCC diagnostic ignored "-Wpointer-arith"
|
|
|
|
#include "os.h"
|
|
#include "tlog.h"
|
|
|
|
TEST(osDirTests, taosRemoveDir) {
|
|
int32_t ret = 0;
|
|
|
|
const char* testDir = "/tmp/tdengine-test-dir";
|
|
if (taosDirExist(testDir)) {
|
|
taosRemoveDir(testDir);
|
|
}
|
|
|
|
taosRemoveDir(testDir);
|
|
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testDir2 = "/tmp/tdengine-test-dir/test-dir2";
|
|
ret = taosMkDir(testDir2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile2 = "/tmp/tdengine-test-dir/test-dir2/test-file2";
|
|
TdFilePtr testFilePtr2 = taosCreateFile(testFile2, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr2, nullptr);
|
|
ret = taosCloseFile(&testFilePtr2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveDir(testDir);
|
|
|
|
bool exist = taosDirExist(testDir);
|
|
EXPECT_EQ(exist, false);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosDirExist) {
|
|
const char* dir1 = NULL;
|
|
bool exist = taosDirExist(dir1);
|
|
EXPECT_EQ(exist, false);
|
|
|
|
char dir2[2048] = {0};
|
|
for (int32_t i = 0; i < 2047; ++i) {
|
|
dir2[i] = 1;
|
|
}
|
|
exist = taosDirExist(dir2);
|
|
EXPECT_EQ(exist, false);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosMulMkDir) {
|
|
int32_t ret = 0;
|
|
|
|
const char* dir1 = NULL;
|
|
ret = taosMulMkDir(dir1);
|
|
EXPECT_EQ(ret, -1);
|
|
|
|
char dir2[2048] = {0};
|
|
for (int32_t i = 0; i < 2047; ++i) {
|
|
dir2[i] = '1';
|
|
}
|
|
ret = taosMulMkDir(dir2);
|
|
EXPECT_EQ(ret, -1);
|
|
|
|
const char* dir3 = "/tmp/tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir3);
|
|
ret = taosMulMkDir(dir3);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir3);
|
|
|
|
const char* dir4 = "./tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir4);
|
|
ret = taosMulMkDir(dir4);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir4);
|
|
|
|
const char* dir5 = "tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir5);
|
|
ret = taosMulMkDir(dir5);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulMkDir(dir5);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir5);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
char dir6[2048] = {0};
|
|
strcpy(dir6, "/tmp/tdengine-test-dir/test-file/1/2/3/4");
|
|
ret = taosMulMkDir(dir6);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosMulModeMkDir) {
|
|
int32_t ret = 0;
|
|
|
|
const char* dir1 = NULL;
|
|
ret = taosMulModeMkDir(dir1, 777, true);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
char dir2[2048] = {0};
|
|
for (int32_t i = 0; i < 2047; ++i) {
|
|
dir2[i] = '1';
|
|
}
|
|
ret = taosMulModeMkDir(dir2, 777, true);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
const char* dir3 = "/tmp/tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir3);
|
|
ret = taosMulMkDir(dir3);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir3, 777, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir3, 777, false);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir3, 999, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir3, 999, false);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir3);
|
|
|
|
const char* dir4 = "./tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir4);
|
|
ret = taosMulModeMkDir(dir4, 777, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir4, 777, false);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir4);
|
|
|
|
const char* dir5 = "tdengine-test-dir/1/2/3/4";
|
|
taosRemoveDir(dir5);
|
|
ret = taosMulModeMkDir(dir5, 777, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir5, 777, false);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir5, 777, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir5, 777, false);
|
|
EXPECT_EQ(ret, 0);
|
|
taosRemoveDir(dir5);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
char dir6[2048] = {0};
|
|
strcpy(dir6, "/tmp/tdengine-test-dir/test-file/1/2/3/4");
|
|
ret = taosMulModeMkDir(dir6, 777, true);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
const char* dir7 = "tdengine-test-dir/1/2/3/5";
|
|
taosRemoveDir(dir7);
|
|
ret = taosMulModeMkDir(dir7, 999, true);
|
|
EXPECT_EQ(ret, 0);
|
|
ret = taosMulModeMkDir(dir7, 999, false);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosRemoveOldFiles) {
|
|
int32_t ret = 0;
|
|
const char* testDir = "/tmp/tdengine-test-dir";
|
|
if (taosDirExist(testDir)) {
|
|
taosRemoveDir(testDir);
|
|
}
|
|
taosRemoveDir(testDir);
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveOldFiles(testFile, 10);
|
|
|
|
const char* testDir2 = "/tmp/tdengine-test-dir/test-dir2";
|
|
ret = taosMkDir(testDir2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile3 = "/tmp/tdengine-test-dir/log.1433726073.gz";
|
|
TdFilePtr testFilePtr3 = taosCreateFile(testFile3, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr3, nullptr);
|
|
ret = taosCloseFile(&testFilePtr3);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile4 = "/tmp/tdengine-test-dir/log.80.gz";
|
|
TdFilePtr testFilePtr4 = taosCreateFile(testFile4, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr4, nullptr);
|
|
ret = taosCloseFile(&testFilePtr4);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
char testFile5[1024];
|
|
snprintf(testFile5, 1024, "/tmp/tdengine-test-dir/log.%d.gz", taosGetTimestampSec());
|
|
TdFilePtr testFilePtr5 = taosCreateFile(testFile5, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr5, nullptr);
|
|
ret = taosCloseFile(&testFilePtr5);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile6 = "/tmp/tdengine-test-dir/log.1433726073.gz";
|
|
TdFilePtr testFilePtr6 = taosCreateFile(testFile6, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr6, nullptr);
|
|
ret = taosCloseFile(&testFilePtr6);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveOldFiles(testDir, 10);
|
|
|
|
bool exist = taosDirExist(testDir);
|
|
EXPECT_EQ(exist, true);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosExpandDir) {
|
|
int32_t ret = 0;
|
|
const char* testDir = "/tmp/tdengine-test-dir";
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
char fullpath[1024] = {0};
|
|
ret = taosExpandDir(testDir, NULL, 1024);
|
|
EXPECT_NE(ret, 0);
|
|
ret = taosExpandDir(NULL, fullpath, 1024);
|
|
EXPECT_NE(ret, 0);
|
|
ret = taosExpandDir(testDir, fullpath, 1024);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
ret = taosExpandDir("/x123", fullpath, 1024);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
ret = taosExpandDir("", fullpath, 1024);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
char dir2[2048] = {0};
|
|
for (int32_t i = 0; i < 2047; ++i) {
|
|
dir2[i] = '1';
|
|
}
|
|
ret = taosExpandDir(dir2, fullpath, 1024);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosRealPath) {
|
|
int32_t ret = 0;
|
|
char testDir[PATH_MAX * 2] = "/tmp/tdengine-test-dir";
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
char fullpath[PATH_MAX * 2] = {0};
|
|
|
|
ret = taosRealPath(testDir, NULL, PATH_MAX * 2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
ret = taosRealPath(NULL, fullpath, PATH_MAX * 2);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
ret = taosRealPath(testDir, fullpath, PATH_MAX * 2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
ret = taosRealPath(testDir, fullpath, 12);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
ret = taosRealPath("/c/d", fullpath, 1024);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosIsDir) {
|
|
bool ret = taosIsDir("/c/d");
|
|
EXPECT_EQ(ret, false);
|
|
}
|
|
|
|
TEST(osDirTests, taosDirName) {
|
|
char* ret = taosDirName(NULL);
|
|
EXPECT_EQ(ret, nullptr);
|
|
|
|
char name1[24] = "xyz";
|
|
ret = taosDirName(name1);
|
|
EXPECT_NE(ret, nullptr);
|
|
EXPECT_EQ(name1[0], 0);
|
|
|
|
char name2[24] = "/root/xyz";
|
|
ret = taosDirName(name2);
|
|
EXPECT_NE(ret, nullptr);
|
|
EXPECT_STREQ(ret, "/root");
|
|
}
|
|
|
|
TEST(osDirTests, taosDirEntryBaseName) {
|
|
char* ret = taosDirEntryBaseName(NULL);
|
|
EXPECT_EQ(ret, nullptr);
|
|
|
|
char name1[12] = "/";
|
|
ret = taosDirEntryBaseName(name1);
|
|
EXPECT_STREQ(ret, "/");
|
|
|
|
char name2[12] = "/root/";
|
|
ret = taosDirEntryBaseName(name2);
|
|
EXPECT_STREQ(ret, "root");
|
|
|
|
char name3[12] = "/root";
|
|
ret = taosDirEntryBaseName(name3);
|
|
EXPECT_STREQ(ret, "root");
|
|
|
|
char name4[12] = "root";
|
|
ret = taosDirEntryBaseName(name4);
|
|
EXPECT_STREQ(ret, "root");
|
|
}
|
|
|
|
TEST(osDirTests, taosOpenDir) {
|
|
TdDirPtr ret = taosOpenDir(NULL);
|
|
EXPECT_EQ(ret, nullptr);
|
|
}
|
|
|
|
TEST(osDirTests, taosReadDir) {
|
|
TdDirEntryPtr rddir = taosReadDir(NULL);
|
|
EXPECT_EQ(rddir, nullptr);
|
|
|
|
int32_t ret = 0;
|
|
const char* testDir = "/tmp/tdengine-test-dir";
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
TdDirPtr dir = taosOpenDir(testFile);
|
|
EXPECT_EQ(dir, nullptr);
|
|
|
|
const char* testDir2 = "/tmp/tdengine-test-dir/test-dir2";
|
|
ret = taosMkDir(testDir2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile2 = "/tmp/tdengine-test-dir/test-dir2/test-file2";
|
|
TdFilePtr testFilePtr2 = taosCreateFile(testFile2, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr2, nullptr);
|
|
ret = taosCloseFile(&testFilePtr2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
dir = taosOpenDir(testFile);
|
|
EXPECT_EQ(dir, nullptr);
|
|
|
|
rddir = taosReadDir(dir);
|
|
EXPECT_EQ(rddir, nullptr);
|
|
|
|
dir = taosOpenDir(testDir);
|
|
EXPECT_NE(dir, nullptr);
|
|
|
|
rddir = taosReadDir(dir);
|
|
EXPECT_NE(rddir, nullptr);
|
|
|
|
bool entry = taosDirEntryIsDir(NULL);
|
|
EXPECT_EQ(entry, false);
|
|
|
|
char* entryname = taosGetDirEntryName(NULL);
|
|
EXPECT_EQ(entryname, nullptr);
|
|
|
|
entryname = taosGetDirEntryName(rddir);
|
|
EXPECT_NE(entryname, nullptr);
|
|
|
|
int32_t code = taosCloseDir(NULL);
|
|
EXPECT_NE(code, 0);
|
|
|
|
code = taosCloseDir(&dir);
|
|
EXPECT_EQ(code, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
}
|
|
|
|
TEST(osDirTests, taosGetDirSize) {
|
|
TdDirEntryPtr rddir = taosReadDir(NULL);
|
|
EXPECT_EQ(rddir, nullptr);
|
|
|
|
int32_t ret = 0;
|
|
const char* testDir = "/tmp/tdengine-test-dir";
|
|
ret = taosMkDir(testDir);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile = "/tmp/tdengine-test-dir/test-file";
|
|
TdFilePtr testFilePtr = taosCreateFile(testFile, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr, nullptr);
|
|
ret = taosCloseFile(&testFilePtr);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
TdDirPtr dir = taosOpenDir(testFile);
|
|
EXPECT_EQ(dir, nullptr);
|
|
|
|
const char* testDir2 = "/tmp/tdengine-test-dir/test-dir2";
|
|
ret = taosMkDir(testDir2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
const char* testFile2 = "/tmp/tdengine-test-dir/test-dir2/test-file2";
|
|
TdFilePtr testFilePtr2 = taosCreateFile(testFile2, TD_FILE_CREATE);
|
|
EXPECT_NE(testFilePtr2, nullptr);
|
|
ret = taosCloseFile(&testFilePtr2);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
int64_t size = -1;
|
|
ret = taosGetDirSize(testFile, &size);
|
|
EXPECT_NE(ret, 0);
|
|
|
|
ret = taosGetDirSize(testDir, &size);
|
|
EXPECT_EQ(ret, 0);
|
|
|
|
taosRemoveDir("/tmp/tdengine-test-dir");
|
|
|
|
taosRemoveDir("./tdengine-test-dir/1/2/3/5");
|
|
taosRemoveDir("./tdengine-test-dir/1/2/3/4");
|
|
taosRemoveDir("./tdengine-test-dir/1/2/3");
|
|
taosRemoveDir("./tdengine-test-dir/1/2");
|
|
taosRemoveDir("./tdengine-test-dir/1");
|
|
taosRemoveDir("./tdengine-test-dir/");
|
|
taosRemoveDir("tdengine-test-dir/1/2/3/5");
|
|
taosRemoveDir("tdengine-test-dir/1/2/3/4");
|
|
taosRemoveDir("tdengine-test-dir/1/2/3");
|
|
taosRemoveDir("tdengine-test-dir/1/2");
|
|
taosRemoveDir("tdengine-test-dir/1");
|
|
taosRemoveDir("tdengine-test-dir/");
|
|
taosRemoveDir("tdengine-test-dir/");
|
|
}
|