diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-04-08 15:48:05 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-04-08 15:48:05 +0200 |
commit | 116201748d6169a822abd17cbf68f9df5034e421 (patch) | |
tree | dd31dfe6f22417cdb9d93c802533d571e61a9c77 /container-search | |
parent | f1814747bf7548bdec63ca608969bbd730e6c8b5 (diff) |
Add serialization test
Diffstat (limited to 'container-search')
6 files changed, 50 insertions, 9 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/Query.java b/container-search/src/main/java/com/yahoo/search/Query.java index 7d78012bcfd..74091d9978c 100644 --- a/container-search/src/main/java/com/yahoo/search/Query.java +++ b/container-search/src/main/java/com/yahoo/search/Query.java @@ -382,7 +382,8 @@ public class Query extends com.yahoo.processing.Request implements Cloneable { .chain(new DefaultProperties()); // Pass the values from the query profile which maps through a field in the Query object model - // through the property chain to cause those values to be set in the Query object model + // through the property chain to cause those values to be set in the Query object model with + // the right types according to query profiles setFieldsFrom(queryProfileProperties, requestMap); // We need special handling for "select" because it can be both the prefix of the nested JSON select diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java index c60cf70bd59..82c570a9975 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java @@ -50,7 +50,7 @@ public class ProtobufSerialization { } } - private static SearchProtocol.SearchRequest convertFromQuery(Query query, int hits, String serverId) { + static SearchProtocol.SearchRequest convertFromQuery(Query query, int hits, String serverId) { var builder = SearchProtocol.SearchRequest.newBuilder().setHits(hits).setOffset(query.getOffset()) .setTimeout((int) query.getTimeLeft()); diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java index b3c10a67091..d9299c07614 100644 --- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java +++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/GroupingExecutor.java @@ -65,7 +65,7 @@ public class GroupingExecutor extends Searcher { /** * Constructs a new instance of this searcher with the given component id. * - * @param componentId The identifier to assign to this searcher. + * @param componentId the identifier to assign to this searcher */ public GroupingExecutor(ComponentId componentId) { super(componentId); diff --git a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java index 0867366303b..ff23c16e7ba 100644 --- a/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java +++ b/container-search/src/test/java/com/yahoo/search/dispatch/rpc/ProtobufSerializationTest.java @@ -10,9 +10,10 @@ import com.yahoo.prelude.fastsearch.FastHit; import com.yahoo.search.Query; import com.yahoo.search.dispatch.InvokerResult; import com.yahoo.search.dispatch.LeanHit; +import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry; +import com.yahoo.search.query.profile.config.QueryProfileXMLReader; import org.junit.Test; -import java.io.IOException; import java.util.Collections; import java.util.List; @@ -24,10 +25,42 @@ import static org.junit.Assert.assertTrue; * @author ollivir */ public class ProtobufSerializationTest { + static final double DELTA = 0.000000000001; @Test - public void testDocsumSerialization() throws IOException { + public void testQuerySerialization() { + CompiledQueryProfileRegistry registry = new QueryProfileXMLReader().read("src/test/java/com/yahoo/search/query/profile/config/test/tensortypes").compile(); + Query query = new Query.Builder().setQueryProfile(registry.getComponent("profile1")) + .setRequest("?query=test&ranking.features.query(tensor_1)=[1.200]") + .build(); + + SearchProtocol.SearchRequest request1 = ProtobufSerialization.convertFromQuery(query, 9,"serverId"); + assertEquals(9, request1.getHits()); + assertEquals(0, request1.getRankPropertiesCount()); + assertEquals(0, request1.getTensorRankPropertiesCount()); + assertEquals(0, request1.getFeatureOverridesCount()); + assertEquals(2, request1.getTensorFeatureOverridesCount()); + assertEquals("\"\\001\\001\\003key\\001\\rpre_key1_post?\\360\\000\\000\\000\\000\\000\\000\"", + contentsOf(request1.getTensorFeatureOverrides(0).getValue())); + assertEquals("\"\\006\\001\\001\\001x\\001?\\231\\231\\232\"", + contentsOf(request1.getTensorFeatureOverrides(1).getValue())); + + query.prepare(); // calling prepare() moves "overrides" to "features" - content stays the same + SearchProtocol.SearchRequest request2 = ProtobufSerialization.convertFromQuery(query, 9,"serverId"); + assertEquals(9, request2.getHits()); + assertEquals(0, request2.getRankPropertiesCount()); + assertEquals(2, request2.getTensorRankPropertiesCount()); + assertEquals("\"\\001\\001\\003key\\001\\rpre_key1_post?\\360\\000\\000\\000\\000\\000\\000\"", + contentsOf(request2.getTensorRankProperties(0).getValue())); + assertEquals("\"\\006\\001\\001\\001x\\001?\\231\\231\\232\"", + contentsOf(request2.getTensorRankProperties(1).getValue())); + assertEquals(0, request2.getFeatureOverridesCount()); + assertEquals(0, request2.getTensorFeatureOverridesCount()); + } + + @Test + public void testDocsumSerialization() { Query q = new Query("search/?query=test&hits=10&offset=3"); var builder = ProtobufSerialization.createDocsumRequestBuilder(q, "server", "summary", true); builder.setTimeout(0); @@ -38,6 +71,12 @@ public class ProtobufSerializationTest { assertEquals(41, bytes.length); } + private String contentsOf(ByteString property) { + String string = property.toString(); + int contentIndex = string.indexOf("contents="); + return string.substring(contentIndex + "contents=".length(), string.length() - 1); + } + SearchProtocol.SearchReply createSearchReply(int numHits, boolean useSorting) { SearchProtocol.SearchReply.Builder reply = SearchProtocol.SearchReply.newBuilder(); reply.setTotalHitCount(7); @@ -57,7 +96,7 @@ public class ProtobufSerializationTest { return reply.build(); } @Test - public void testSearhReplyDecodingWithRelevance() { + public void testSearchReplyDecodingWithRelevance() { Query q = new Query("search/?query=test"); InvokerResult result = ProtobufSerialization.convertToResult(q, createSearchReply(5, false), null, 1, 2); assertEquals(result.getResult().getTotalHitCount(), 7); @@ -76,7 +115,7 @@ public class ProtobufSerializationTest { } } @Test - public void testSearhReplyDecodingWithSortData() { + public void testSearchReplyDecodingWithSortData() { Query q = new Query("search/?query=test"); InvokerResult result = ProtobufSerialization.convertToResult(q, createSearchReply(5, true), null, 1, 2); assertEquals(result.getResult().getTotalHitCount(), 7); @@ -95,4 +134,5 @@ public class ProtobufSerializationTest { hitNum++; } } + } diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java index ad85b5e37a1..b1faac2036b 100644 --- a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/XmlReadingTestCase.java @@ -501,7 +501,7 @@ public class XmlReadingTestCase { Tensor.from("tensor<float>(x[1]):[1.2]"), queryProfile1.properties().get("ranking.features.query(tensor_1)")); assertEquals("tensor_4 contained in the profile is a tensor", - Tensor.from("tensor(key{}):{key1:1.0}"), + Tensor.from("tensor(key{}):{pre_key1_post:1.0}"), queryProfile1.properties().get("ranking.features.query(tensor_4)")); Query queryProfile2 = new Query.Builder().setQueryProfile(registry.getComponent("profile2")) diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml index cb1260bad8e..b20f802cdb6 100644 --- a/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml +++ b/container-search/src/test/java/com/yahoo/search/query/profile/config/test/tensortypes/profile1.xml @@ -1,5 +1,5 @@ <!-- Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. --> <query-profile id="profile1" type="type1"> <field name="mykey">key1</field> - <field name="ranking.features.query(tensor_4)">{{key:"%{mykey}"}:1.0}</field> + <field name="ranking.features.query(tensor_4)">{{key:"pre_%{mykey}_post"}:1.0}</field> </query-profile> |