Skip to content

Commit 03edcdb

Browse files
committed
Add unit test
1 parent e4d516a commit 03edcdb

File tree

5 files changed

+165
-9
lines changed

5 files changed

+165
-9
lines changed

cmake/testing.cmake

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,33 @@ function(add_ydb_test)
8383

8484
vcs_info(${YDB_TEST_NAME})
8585
endfunction()
86+
87+
if (YDB_SDK_ODBC)
88+
function(add_odbc_test)
89+
set(opts "")
90+
set(oneval_args NAME WORKING_DIRECTORY OUTPUT_DIRECTORY)
91+
set(multival_args SOURCES LINK_LIBRARIES LABELS)
92+
cmake_parse_arguments(ODBC_TEST
93+
"${opts}"
94+
"${oneval_args}"
95+
"${multival_args}"
96+
${ARGN}
97+
)
98+
99+
add_ydb_test(GTEST
100+
NAME ${ODBC_TEST_NAME}
101+
SOURCES ${ODBC_TEST_SOURCES}
102+
LINK_LIBRARIES
103+
${ODBC_TEST_LINK_LIBRARIES}
104+
ODBC::ODBC
105+
LABELS ${ODBC_TEST_LABELS}
106+
)
107+
108+
target_compile_definitions(${ODBC_TEST_NAME}
109+
PRIVATE
110+
ODBC_DRIVER_PATH="$<TARGET_FILE:ydb-odbc>"
111+
)
112+
113+
add_dependencies(${ODBC_TEST_NAME} ydb-odbc)
114+
endfunction()
115+
endif()

odbc/CMakeLists.txt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# Добавляем исходники
21
add_library(ydb-odbc SHARED
32
src/utils/convert.cpp
43
src/odbc_driver.cpp
@@ -7,14 +6,12 @@ add_library(ydb-odbc SHARED
76
src/environment.cpp
87
)
98

10-
# Добавляем заголовочные файлы
119
target_include_directories(ydb-odbc
1210
PRIVATE
1311
${CMAKE_CURRENT_SOURCE_DIR}/include
1412
${ODBC_INCLUDE_DIRS}
1513
)
1614

17-
# Линкуем с YDB SDK и ODBC
1815
target_link_libraries(ydb-odbc
1916
PRIVATE
2017
ydb-cpp-sdk::Query
@@ -27,22 +24,17 @@ set_target_properties(ydb-odbc PROPERTIES
2724
POSITION_INDEPENDENT_CODE ON
2825
)
2926

30-
# Устанавливаем драйвер
3127
install(TARGETS ydb-odbc
3228
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
3329
)
3430

35-
# Устанавливаем заголовочные файлы
3631
install(DIRECTORY include/
3732
DESTINATION include/ydb-odbc
3833
)
3934

4035
add_subdirectory(examples)
36+
add_subdirectory(tests)
4137

42-
# Добавляем тесты
43-
# add_subdirectory(tests)
44-
45-
# Правила установки
4638
include(GNUInstallDirs)
4739

4840
install(FILES

odbc/tests/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#add_subdirectory(integration)
2+
add_subdirectory(unit)

odbc/tests/unit/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
add_ydb_test(NAME odbc-convert_ut GTEST
2+
SOURCES
3+
convert_ut.cpp
4+
LINK_LIBRARIES
5+
yutil
6+
api-protos
7+
ydb-odbc
8+
LABELS
9+
unit
10+
)

odbc/tests/unit/convert_ut.cpp

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#include <odbc/src/utils/convert.h>
2+
#undef BOOL
3+
4+
#include <ydb-cpp-sdk/client/params/params.h>
5+
6+
#include <src/api/protos/ydb_value.pb.h>
7+
8+
#include <google/protobuf/text_format.h>
9+
10+
#include <gtest/gtest.h>
11+
12+
using namespace NYdb::NOdbc;
13+
using namespace NYdb;
14+
15+
void CheckProtoValue(const Ydb::Value& value, const std::string& expected) {
16+
std::string protoStr;
17+
google::protobuf::TextFormat::PrintToString(value, &protoStr);
18+
ASSERT_EQ(protoStr, expected);
19+
}
20+
21+
TEST(OdbcConvert, Int64ToYdb) {
22+
SQLBIGINT v = 42;
23+
TBoundParam param{
24+
1, // ParamNumber
25+
SQL_PARAM_INPUT, // InputOutputType
26+
SQL_C_SBIGINT, // ValueType
27+
SQL_BIGINT, // ParameterType
28+
0, 0, // ColumnSize, DecimalDigits
29+
&v, // ParameterValuePtr
30+
sizeof(v), // BufferLength
31+
nullptr // StrLenOrIndPtr
32+
};
33+
34+
TParamsBuilder paramsBuilder;
35+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
36+
auto params = paramsBuilder.Build();
37+
auto value = params.GetValue("$p1");
38+
ASSERT_TRUE(value);
39+
CheckProtoValue(value->GetProto(), "int64_value: 42\n");
40+
}
41+
42+
TEST(OdbcConvert, Uint64ToYdb) {
43+
SQLUBIGINT v = 123;
44+
TBoundParam param{
45+
1, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_BIGINT, 0, 0, &v, sizeof(v), nullptr
46+
};
47+
TParamsBuilder paramsBuilder;
48+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
49+
auto params = paramsBuilder.Build();
50+
auto value = params.GetValue("$p1");
51+
ASSERT_TRUE(value);
52+
CheckProtoValue(value->GetProto(), "uint64_value: 123\n");
53+
}
54+
55+
TEST(OdbcConvert, DoubleToYdb) {
56+
SQLDOUBLE v = 3.14;
57+
TBoundParam param{
58+
1, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &v, sizeof(v), nullptr
59+
};
60+
TParamsBuilder paramsBuilder;
61+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
62+
auto params = paramsBuilder.Build();
63+
auto value = params.GetValue("$p1");
64+
ASSERT_TRUE(value);
65+
CheckProtoValue(value->GetProto(), "double_value: 3.14\n");
66+
}
67+
68+
TEST(OdbcConvert, StringToYdbUtf8) {
69+
const char* str = "hello";
70+
SQLLEN len = 5;
71+
TBoundParam param{
72+
1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLPOINTER)str, len, nullptr
73+
};
74+
TParamsBuilder paramsBuilder;
75+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
76+
auto params = paramsBuilder.Build();
77+
auto value = params.GetValue("$p1");
78+
ASSERT_TRUE(value);
79+
CheckProtoValue(value->GetProto(), "text_value: \"hello\"\n");
80+
}
81+
82+
TEST(OdbcConvert, StringToYdbBinary) {
83+
const char* str = "bin\x01\x02";
84+
SQLLEN len = 5;
85+
TBoundParam param{
86+
1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_BINARY, 0, 0, (SQLPOINTER)str, len, nullptr
87+
};
88+
TParamsBuilder paramsBuilder;
89+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
90+
auto params = paramsBuilder.Build();
91+
auto value = params.GetValue("$p1");
92+
ASSERT_TRUE(value);
93+
ASSERT_EQ(value->GetProto().bytes_value(), std::string(str, len));
94+
}
95+
96+
TEST(OdbcConvert, Int64NullToYdb) {
97+
SQLBIGINT v = 42;
98+
SQLLEN nullInd = SQL_NULL_DATA;
99+
TBoundParam param{
100+
1, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, 0, 0, &v, sizeof(v), &nullInd
101+
};
102+
TParamsBuilder paramsBuilder;
103+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
104+
auto params = paramsBuilder.Build();
105+
auto value = params.GetValue("$p1");
106+
ASSERT_TRUE(value);
107+
ASSERT_EQ(value->GetProto().null_flag_value(), ::google::protobuf::NullValue::NULL_VALUE);
108+
}
109+
110+
TEST(OdbcConvert, StringNullToYdb) {
111+
const char* str = "test";
112+
SQLLEN nullInd = SQL_NULL_DATA;
113+
TBoundParam param{
114+
1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLPOINTER)str, 4, &nullInd
115+
};
116+
TParamsBuilder paramsBuilder;
117+
ConvertValue(param, paramsBuilder.AddParam("$p1"));
118+
auto params = paramsBuilder.Build();
119+
auto value = params.GetValue("$p1");
120+
ASSERT_TRUE(value);
121+
ASSERT_EQ(value->GetProto().null_flag_value(), ::google::protobuf::NullValue::NULL_VALUE);
122+
}

0 commit comments

Comments
 (0)