Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 9032501

Browse files
Chore/utils unitests (#1400)
* fix/mistral-nemo-chat-template * chore: add unitest for file manager utils and yaml config utils * chore: add unitest for cuda toolkit utils and semantic version utils
1 parent 0a3c5da commit 9032501

File tree

4 files changed

+181
-1
lines changed

4 files changed

+181
-1
lines changed

engine/test/components/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ find_package(LibArchive REQUIRED)
2222
find_package(CURL REQUIRED)
2323
find_package(SQLiteCpp REQUIRED)
2424

25-
target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon GTest::gtest GTest::gtest_main yaml-cpp::yaml-cpp
25+
target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon GTest::gtest GTest::gtest_main yaml-cpp::yaml-cpp
2626
${CMAKE_THREAD_LIBS_INIT})
2727

2828
target_link_libraries(${PROJECT_NAME} PRIVATE httplib::httplib)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <gtest/gtest.h>
2+
#include "utils/cuda_toolkit_utils.h"
3+
4+
// Test fixture for cuda_toolkit_utils
5+
class CudaToolkitUtilsTest : public ::testing::Test {};
6+
7+
// Tests for cuda_toolkit_utils
8+
9+
TEST_F(CudaToolkitUtilsTest, WindowsCompatibleVersions) {
10+
EXPECT_EQ("12.4", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
11+
"527.41", "windows", ""));
12+
EXPECT_EQ("11.7", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
13+
"452.39", "windows", ""));
14+
}
15+
16+
TEST_F(CudaToolkitUtilsTest, LinuxCompatibleVersions) {
17+
EXPECT_EQ("12.4", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
18+
"525.60.13", "linux", ""));
19+
EXPECT_EQ("11.7", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
20+
"450.80.02", "linux", ""));
21+
}
22+
23+
TEST_F(CudaToolkitUtilsTest, TensorRTLLMEngine) {
24+
EXPECT_EQ("12.4", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
25+
"527.41", "windows", "cortex.tensorrt-llm"));
26+
EXPECT_EQ("12.4", cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
27+
"525.60.13", "linux", "cortex.tensorrt-llm"));
28+
}
29+
30+
TEST_F(CudaToolkitUtilsTest, UnsupportedDriverVersion) {
31+
EXPECT_THROW(cuda_toolkit_utils::GetCompatibleCudaToolkitVersion(
32+
"450.00", "windows", ""),
33+
std::runtime_error);
34+
EXPECT_THROW(cuda_toolkit_utils::GetCompatibleCudaToolkitVersion("450.00",
35+
"linux", ""),
36+
std::runtime_error);
37+
}
38+
39+
TEST_F(CudaToolkitUtilsTest, UnsupportedOS) {
40+
EXPECT_THROW(cuda_toolkit_utils::GetCompatibleCudaToolkitVersion("527.41",
41+
"macos", ""),
42+
std::runtime_error);
43+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#include <gmock/gmock.h>
2+
#include <gtest/gtest.h>
3+
#include <filesystem>
4+
#include "utils/config_yaml_utils.h"
5+
#include "utils/file_manager_utils.h"
6+
7+
// Mock for filesystem operations
8+
9+
// Test fixture
10+
class FileManagerConfigTest : public ::testing::Test {};
11+
12+
// Tests for file_manager_utils
13+
14+
TEST_F(FileManagerConfigTest, GetExecutableFolderContainerPath) {
15+
auto path = file_manager_utils::GetExecutableFolderContainerPath();
16+
EXPECT_FALSE(path.empty());
17+
EXPECT_TRUE(std::filesystem::is_directory(path));
18+
}
19+
20+
TEST_F(FileManagerConfigTest, GetHomeDirectoryPath) {
21+
auto path = file_manager_utils::GetHomeDirectoryPath();
22+
EXPECT_FALSE(path.empty());
23+
EXPECT_TRUE(std::filesystem::is_directory(path));
24+
}
25+
26+
TEST_F(FileManagerConfigTest, GetConfigurationPath) {
27+
auto path = file_manager_utils::GetConfigurationPath();
28+
EXPECT_FALSE(path.empty());
29+
EXPECT_TRUE(path.has_filename());
30+
}
31+
32+
TEST_F(FileManagerConfigTest, GetDefaultDataFolderName) {
33+
auto folder_name = file_manager_utils::GetDefaultDataFolderName();
34+
EXPECT_FALSE(folder_name.empty());
35+
EXPECT_TRUE(folder_name.find("cortexcpp") != std::string::npos);
36+
}
37+
38+
TEST_F(FileManagerConfigTest, CreateConfigFileIfNotExist) {
39+
40+
file_manager_utils::CreateConfigFileIfNotExist();
41+
EXPECT_TRUE(
42+
std::filesystem::exists(file_manager_utils::GetConfigurationPath()));
43+
std::filesystem::remove(file_manager_utils::GetConfigurationPath());
44+
}
45+
46+
TEST_F(FileManagerConfigTest, GetCortexConfig) {
47+
file_manager_utils::CreateConfigFileIfNotExist();
48+
auto config = file_manager_utils::GetCortexConfig();
49+
EXPECT_FALSE(config.dataFolderPath.empty());
50+
EXPECT_FALSE(config.logFolderPath.empty());
51+
EXPECT_GT(config.maxLogLines, 0);
52+
}
53+
54+
// Tests for config_yaml_utils
55+
56+
TEST_F(FileManagerConfigTest, DumpYamlConfig) {
57+
config_yaml_utils::CortexConfig config{.logFolderPath = "/path/to/logs",
58+
.dataFolderPath = "/path/to/data",
59+
.maxLogLines = 1000,
60+
.apiServerHost = "localhost",
61+
.apiServerPort = "8080"};
62+
63+
std::string test_file = "test_config.yaml";
64+
config_yaml_utils::DumpYamlConfig(config, test_file);
65+
66+
EXPECT_TRUE(std::filesystem::exists(test_file));
67+
68+
// Clean up
69+
std::filesystem::remove(test_file);
70+
}
71+
72+
TEST_F(FileManagerConfigTest, FromYaml) {
73+
// Create a test YAML file
74+
std::string test_file = "test_config.yaml";
75+
std::ofstream out_file(test_file);
76+
out_file << "logFolderPath: /path/to/logs\n"
77+
<< "dataFolderPath: /path/to/data\n"
78+
<< "maxLogLines: 1000\n"
79+
<< "apiServerHost: localhost\n"
80+
<< "apiServerPort: '8080'\n";
81+
out_file.close();
82+
83+
config_yaml_utils::CortexConfig default_config{};
84+
auto config = config_yaml_utils::FromYaml(test_file, default_config);
85+
86+
EXPECT_EQ(config.logFolderPath, "/path/to/logs");
87+
EXPECT_EQ(config.dataFolderPath, "/path/to/data");
88+
EXPECT_EQ(config.maxLogLines, 1000);
89+
EXPECT_EQ(config.apiServerHost, "localhost");
90+
EXPECT_EQ(config.apiServerPort, "8080");
91+
92+
// Clean up
93+
std::filesystem::remove(test_file);
94+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <gtest/gtest.h>
2+
#include "utils/semantic_version_utils.h"
3+
4+
class SemanticVersionUtilsTest : public ::testing::Test {
5+
protected:
6+
void SetUp() override {
7+
// Setup code if needed
8+
}
9+
10+
void TearDown() override {
11+
// Teardown code if needed
12+
}
13+
};
14+
15+
// Tests for semantic_version_utils
16+
17+
TEST_F(SemanticVersionUtilsTest, SplitVersion) {
18+
auto version = semantic_version_utils::SplitVersion("1.2.3");
19+
EXPECT_EQ(1, version.major);
20+
EXPECT_EQ(2, version.minor);
21+
EXPECT_EQ(3, version.patch);
22+
}
23+
24+
TEST_F(SemanticVersionUtilsTest, SplitVersionPartial) {
25+
auto version = semantic_version_utils::SplitVersion("1.2");
26+
EXPECT_EQ(1, version.major);
27+
EXPECT_EQ(2, version.minor);
28+
EXPECT_EQ(0, version.patch);
29+
}
30+
31+
TEST_F(SemanticVersionUtilsTest, SplitVersionEmpty) {
32+
auto version = semantic_version_utils::SplitVersion("");
33+
EXPECT_EQ(0, version.major);
34+
EXPECT_EQ(0, version.minor);
35+
EXPECT_EQ(0, version.patch);
36+
}
37+
38+
TEST_F(SemanticVersionUtilsTest, CompareSemanticVersion) {
39+
EXPECT_EQ(0, semantic_version_utils::CompareSemanticVersion("1.2.3", "1.2.3"));
40+
EXPECT_EQ(-1, semantic_version_utils::CompareSemanticVersion("1.2.3", "1.2.4"));
41+
EXPECT_EQ(1, semantic_version_utils::CompareSemanticVersion("1.3.0", "1.2.9"));
42+
EXPECT_EQ(-1, semantic_version_utils::CompareSemanticVersion("1.9.9", "2.0.0"));
43+
}

0 commit comments

Comments
 (0)