From f8347a1f41341bd87adf40416a7afa2177d01408 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Fri, 10 Sep 2021 11:13:09 +0200 Subject: Add checksum types in response based on types in request Return response with same type as in request, except when both are empty, then return both types. Note: No clients have started sending requests with only xxhash64 checksum yet. --- .../config/server/ApplicationRepositoryTest.java | 4 ++ .../server/rpc/ConfigResponseFactoryTest.java | 56 ++++++++++++++++++++-- 2 files changed, 55 insertions(+), 5 deletions(-) (limited to 'configserver/src/test') diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java index 41af0296534..28d50a5396e 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java @@ -26,6 +26,7 @@ import com.yahoo.text.Utf8; import com.yahoo.vespa.config.ConfigKey; import com.yahoo.vespa.config.ConfigPayload; import com.yahoo.vespa.config.GetConfigRequest; +import com.yahoo.vespa.config.PayloadChecksums; import com.yahoo.vespa.config.protocol.ConfigResponse; import com.yahoo.vespa.config.protocol.DefContent; import com.yahoo.vespa.config.protocol.VespaVersion; @@ -810,6 +811,9 @@ public class ApplicationRepositoryTest { @Override public String getRequestDefMd5() { return ""; } + @Override + public PayloadChecksums configPayloadChecksums() { return PayloadChecksums.empty(); } + }, Optional.empty()); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java index 747a0ad3241..b164c3e5cd5 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/ConfigResponseFactoryTest.java @@ -1,11 +1,16 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.rpc; import com.yahoo.vespa.config.ConfigPayload; +import com.yahoo.vespa.config.PayloadChecksum; +import com.yahoo.vespa.config.PayloadChecksums; import com.yahoo.vespa.config.protocol.CompressionType; import com.yahoo.vespa.config.protocol.ConfigResponse; +import com.yahoo.vespa.config.protocol.Payload; import org.junit.Test; +import static com.yahoo.vespa.config.PayloadChecksum.Type.MD5; +import static com.yahoo.vespa.config.PayloadChecksum.Type.XXHASH64; import static org.junit.Assert.assertEquals; /** @@ -13,22 +18,63 @@ import static org.junit.Assert.assertEquals; */ public class ConfigResponseFactoryTest { + private static final ConfigPayload payload = ConfigPayload.fromString("{ \"field1\": 11, \"field2\": 11 }"); + + private static final PayloadChecksums payloadChecksums = PayloadChecksums.fromPayload(Payload.from(payload)); + private static final PayloadChecksums payloadChecksumsEmpty = PayloadChecksums.empty(); + private static final PayloadChecksums payloadChecksumsOnlyMd5 = + PayloadChecksums.from(PayloadChecksum.fromPayload(Payload.from(payload), MD5)); + private static final PayloadChecksums payloadChecksumsOnlyXxhash64 = + PayloadChecksums.from(PayloadChecksum.fromPayload(Payload.from(payload), XXHASH64)); + @Test public void testUncompressedFactory() { UncompressedConfigResponseFactory responseFactory = new UncompressedConfigResponseFactory(); - ConfigResponse response = responseFactory.createResponse(ConfigPayload.empty().toUtf8Array(true), 3, false); + ConfigResponse response = responseFactory.createResponse(payload.toUtf8Array(true), 3, false, payloadChecksums); assertEquals(CompressionType.UNCOMPRESSED, response.getCompressionInfo().getCompressionType()); assertEquals(3L,response.getGeneration()); - assertEquals(2, response.getPayload().getByteLength()); + assertEquals(25, response.getPayload().getByteLength()); + assertEquals(payloadChecksums, response.getPayloadChecksums()); } @Test public void testLZ4CompressedFactory() { + // Both checksums in request + { + ConfigResponse response = createResponse(payloadChecksums); + assertEquals(payloadChecksums, response.getPayloadChecksums()); + } + + // No checksums in request (empty checksums), both checksums should be in response + { + ConfigResponse response = createResponse(payloadChecksumsEmpty); + assertEquals(payloadChecksums.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); + assertEquals(payloadChecksums.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); + } + + // Only md5 checksums in request + { + ConfigResponse response = createResponse(payloadChecksumsOnlyMd5); + assertEquals(payloadChecksumsOnlyMd5.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); + assertEquals(payloadChecksumsOnlyMd5.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); + } + + // Only xxhash64 checksums in request + { + ConfigResponse response = createResponse(payloadChecksumsOnlyXxhash64); + assertEquals(payloadChecksumsOnlyXxhash64.getForType(MD5), response.getPayloadChecksums().getForType(MD5)); + assertEquals(payloadChecksumsOnlyXxhash64.getForType(XXHASH64), response.getPayloadChecksums().getForType(XXHASH64)); + } + } + + private ConfigResponse createResponse(PayloadChecksums payloadChecksums) { LZ4ConfigResponseFactory responseFactory = new LZ4ConfigResponseFactory(); - ConfigResponse response = responseFactory.createResponse(ConfigPayload.empty().toUtf8Array(true), 3, false); + ConfigResponse response = responseFactory.createResponse(payload.toUtf8Array(true), 3, false, payloadChecksums); assertEquals(CompressionType.LZ4, response.getCompressionInfo().getCompressionType()); assertEquals(3L, response.getGeneration()); - assertEquals(3, response.getPayload().getByteLength()); + assertEquals(23, response.getPayload().getByteLength()); + + return response; } } -- cgit v1.2.3