aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/test/schema_builder
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-10-20 16:58:55 +0200
committerTor Egge <Tor.Egge@online.no>2022-10-20 16:58:55 +0200
commite8d09ff331c6d490c0a373c8339f1c52256e91f2 (patch)
treebdba1775ce90aff68e41836c378f69d5ce90f2aa /searchlib/src/tests/test/schema_builder
parent4f9542e708798f2e1156418aac67add4a181fb5a (diff)
Add schema builder, used by unit tests to make schema based on document type.
Diffstat (limited to 'searchlib/src/tests/test/schema_builder')
-rw-r--r--searchlib/src/tests/test/schema_builder/CMakeLists.txt9
-rw-r--r--searchlib/src/tests/test/schema_builder/schema_builder_test.cpp131
2 files changed, 140 insertions, 0 deletions
diff --git a/searchlib/src/tests/test/schema_builder/CMakeLists.txt b/searchlib/src/tests/test/schema_builder/CMakeLists.txt
new file mode 100644
index 00000000000..6a23d9e283e
--- /dev/null
+++ b/searchlib/src/tests/test/schema_builder/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchlib_schema_builder_test_app TEST
+ SOURCES
+ schema_builder_test.cpp
+ DEPENDS
+ searchlib_test
+ GTest::GTest
+)
+vespa_add_test(NAME searchlib_schema_builder_test_app COMMAND searchlib_schema_builder_test_app)
diff --git a/searchlib/src/tests/test/schema_builder/schema_builder_test.cpp b/searchlib/src/tests/test/schema_builder/schema_builder_test.cpp
new file mode 100644
index 00000000000..32d1c3d6041
--- /dev/null
+++ b/searchlib/src/tests/test/schema_builder/schema_builder_test.cpp
@@ -0,0 +1,131 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/searchlib/test/schema_builder.h>
+#include <vespa/document/datatype/datatype.h>
+#include <vespa/document/repo/configbuilder.h>
+#include <vespa/searchcommon/common/schema.h>
+#include <vespa/searchlib/test/doc_builder.h>
+#include <vespa/vespalib/gtest/gtest.h>
+
+using search::index::Schema;
+using search::index::schema::CollectionType;
+using search::test::DocBuilder;
+using search::test::SchemaBuilder;
+
+namespace {
+
+auto add_all_fields = [](auto& header)
+ { using namespace document::config_builder;
+ using document::DataType;
+ header.addField("int8", DataType::T_BYTE)
+ .addField("int16", DataType::T_SHORT)
+ .addField("int32", DataType::T_INT)
+ .addField("int64", DataType::T_LONG)
+ .addField("bool", DataType::T_BOOL)
+ .addField("float", DataType::T_FLOAT)
+ .addField("double", DataType::T_DOUBLE)
+ .addField("string", DataType::T_STRING)
+ .addField("url", DataType::T_URI)
+ .addTensorField("tensor", "tensor(x{},y{})")
+ .addField("int32_array", Array(DataType::T_INT))
+ .addField("int32_wset", Wset(DataType::T_INT))
+ .addField("url_array", Array(DataType::T_URI))
+ .addField("url_wset", Wset(DataType::T_URI));
+ };
+
+}
+
+class SchemaBuilderTest : public testing::Test
+{
+protected:
+ std::unique_ptr<Schema> schema;
+
+ SchemaBuilderTest();
+ ~SchemaBuilderTest();
+ void assert_index(vespalib::stringref name, search::index::schema::DataType exp_dt, CollectionType exp_ct);
+ void assert_all_indexes();
+ void assert_attribute(vespalib::stringref name, search::index::schema::DataType exp_dt, CollectionType exp_ct, const vespalib::string exp_tensor_spec = "");
+ void assert_all_attributes();
+};
+
+SchemaBuilderTest::SchemaBuilderTest()
+ : schema()
+{
+}
+
+SchemaBuilderTest::~SchemaBuilderTest() = default;
+
+void
+SchemaBuilderTest::assert_index(vespalib::stringref name, search::index::schema::DataType exp_dt, CollectionType exp_ct)
+{
+ auto field_id = schema->getIndexFieldId(name);
+ ASSERT_NE(Schema::UNKNOWN_FIELD_ID, field_id);
+ auto& field = schema->getIndexField(field_id);
+ EXPECT_EQ(exp_dt, field.getDataType());
+ EXPECT_EQ(exp_ct, field.getCollectionType());
+}
+
+void
+SchemaBuilderTest::assert_all_indexes()
+{
+ using DataType = search::index::schema::DataType;
+ EXPECT_EQ(25u, schema->getNumIndexFields()); // string and url*, 1 + 3 * 8
+ assert_index("string", DataType::STRING, CollectionType::SINGLE);
+ assert_index("url", DataType::STRING, CollectionType::SINGLE);
+ assert_index("url.scheme", DataType::STRING, CollectionType::SINGLE);
+ assert_index("url_array", DataType::STRING, CollectionType::ARRAY);
+ assert_index("url_wset", DataType::STRING, CollectionType::WEIGHTEDSET);
+}
+
+void
+SchemaBuilderTest::assert_attribute(vespalib::stringref name, search::index::schema::DataType exp_dt, CollectionType exp_ct, const vespalib::string exp_tensor_spec)
+{
+ auto field_id = schema->getAttributeFieldId(name);
+ ASSERT_NE(Schema::UNKNOWN_FIELD_ID, field_id);
+ auto& field = schema->getAttributeField(field_id);
+ EXPECT_EQ(exp_dt, field.getDataType());
+ EXPECT_EQ(exp_ct, field.getCollectionType());
+ EXPECT_EQ(exp_tensor_spec, field.get_tensor_spec());
+}
+
+void
+SchemaBuilderTest::assert_all_attributes()
+{
+ using DataType = search::index::schema::DataType;
+ EXPECT_EQ(11u, schema->getNumAttributeFields()); // all but url*, 14 - 3
+ assert_attribute("int8", DataType::INT8, CollectionType::SINGLE);
+ assert_attribute("int16", DataType::INT16, CollectionType::SINGLE);
+ assert_attribute("int32", DataType::INT32, CollectionType::SINGLE);
+ assert_attribute("int64", DataType::INT64, CollectionType::SINGLE);
+ assert_attribute("bool", DataType::BOOL, CollectionType::SINGLE);
+ assert_attribute("float", DataType::FLOAT, CollectionType::SINGLE);
+ assert_attribute("double", DataType::DOUBLE, CollectionType::SINGLE);
+ assert_attribute("string", DataType::STRING, CollectionType::SINGLE);
+ assert_attribute("tensor", DataType::TENSOR, CollectionType::SINGLE, "tensor(x{},y{})");
+ assert_attribute("int32_array", DataType::INT32, CollectionType::ARRAY);
+ assert_attribute("int32_wset", DataType::INT32, CollectionType::WEIGHTEDSET);
+}
+
+TEST_F(SchemaBuilderTest, all_fields)
+{
+ DocBuilder db(add_all_fields);
+ schema = SchemaBuilder(db).add_indexes({"string", "url", "url_array", "url_wset"}).add_attributes({"int8", "int16", "int32", "int64", "bool", "float", "double", "string", "tensor", "int32_array", "int32_wset"}).build();
+ assert_all_indexes();
+ assert_all_attributes();
+}
+
+TEST_F(SchemaBuilderTest, all_indexes_auto)
+{
+ DocBuilder db(add_all_fields);
+ schema = SchemaBuilder(db).add_all_indexes().build();
+ assert_all_indexes();
+}
+
+TEST_F(SchemaBuilderTest, all_attributes_auto)
+{
+ DocBuilder db(add_all_fields);
+ schema = SchemaBuilder(db).add_all_attributes().build();
+ assert_all_attributes();
+}
+
+GTEST_MAIN_RUN_ALL_TESTS()