blob: 3290042c59892a0797caec5152376a68f42897d6 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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
*
* 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.
*/
#include "paimon/core/disk/io_manager.h"
#include <memory>
#include <string>
#include "gtest/gtest.h"
#include "paimon/common/utils/path_util.h"
#include "paimon/common/utils/string_utils.h"
#include "paimon/testing/utils/testharness.h"
namespace paimon::test {
TEST(IOManagerTest, CreateShouldReturnManagerWithGivenTempDir) {
auto tmp_dir = UniqueTestDirectory::Create();
auto manager = std::make_unique<IOManager>(tmp_dir->Str(), tmp_dir->GetFileSystem());
ASSERT_NE(manager, nullptr);
ASSERT_EQ(manager->GetTempDir(), tmp_dir->Str());
}
TEST(IOManagerTest, CreateChannelShouldReturnValidAndUniquePaths) {
auto tmp_dir = UniqueTestDirectory::Create();
auto manager = std::make_shared<IOManager>(tmp_dir->Str(), tmp_dir->GetFileSystem());
const std::string prefix = "spill";
ASSERT_OK_AND_ASSIGN(auto channel1, manager->CreateChannel());
ASSERT_TRUE(StringUtils::StartsWith(channel1.GetPath(), tmp_dir->Str() + "/paimon-io-"));
ASSERT_TRUE(StringUtils::EndsWith(channel1.GetPath(), ".channel"));
ASSERT_EQ(PathUtil::GetName(channel1.GetPath()).size(), 32 + std::string(".channel").size());
ASSERT_OK_AND_ASSIGN(auto channel2, manager->CreateChannel(prefix));
ASSERT_TRUE(StringUtils::StartsWith(PathUtil::GetName(channel2.GetPath()), prefix + "-"));
}
TEST(IOManagerTest, CreateChannelEnumeratorShouldReturnSequentialAndUniquePaths) {
auto tmp_dir = UniqueTestDirectory::Create();
auto manager = std::make_shared<IOManager>(tmp_dir->Str(), tmp_dir->GetFileSystem());
ASSERT_OK_AND_ASSIGN(auto enumerator, manager->CreateChannelEnumerator());
for (int i = 0; i < 10; ++i) {
auto channel_id = enumerator->Next();
ASSERT_TRUE(StringUtils::StartsWith(channel_id.GetPath(), tmp_dir->Str() + "/paimon-io-"));
std::string counter_str = std::to_string(i);
std::string padded_counter = std::string(6 - counter_str.size(), '0') + counter_str;
ASSERT_TRUE(StringUtils::EndsWith(channel_id.GetPath(), "." + padded_counter + ".channel"));
}
}
TEST(IOManagerTest, GetSpillDirShouldReturnPaimonIoSubdirectory) {
auto tmp_dir = UniqueTestDirectory::Create();
auto manager = std::make_shared<IOManager>(tmp_dir->Str(), tmp_dir->GetFileSystem());
ASSERT_OK_AND_ASSIGN(std::string spill_dir, manager->GetSpillDir());
ASSERT_TRUE(StringUtils::StartsWith(spill_dir, tmp_dir->Str() + "/paimon-io-"));
ASSERT_FALSE(StringUtils::EndsWith(spill_dir, "/"));
ASSERT_OK_AND_ASSIGN(auto channel, manager->CreateChannel());
ASSERT_TRUE(StringUtils::StartsWith(channel.GetPath(), spill_dir + "/"));
}
} // namespace paimon::test