diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-11-24 12:14:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-24 12:14:33 +0100 |
commit | c5428f5c33066fadc1c200869beda8f812afc15e (patch) | |
tree | 74ec88f3ac2c7e080a5252de700118582cd6489d /config/src/tests/frt/frt.cpp | |
parent | 3c72ae828ce4a8c03e1fea050784f6b30725cc5d (diff) | |
parent | b5ae5566aee70cf7529d1a8ceca8c930086ac43a (diff) |
Merge pull request #4257 from vespa-engine/balder/fix-logic-flaw-causing-missing-config-changes
Balder/fix logic flaw causing missing config changes
Diffstat (limited to 'config/src/tests/frt/frt.cpp')
-rw-r--r-- | config/src/tests/frt/frt.cpp | 190 |
1 files changed, 11 insertions, 179 deletions
diff --git a/config/src/tests/frt/frt.cpp b/config/src/tests/frt/frt.cpp index 1fe91af885b..5f4b7dee215 100644 --- a/config/src/tests/frt/frt.cpp +++ b/config/src/tests/frt/frt.cpp @@ -6,10 +6,6 @@ #include <vespa/config/common/configdefinition.h> #include <vespa/config/frt/connection.h> #include <vespa/config/frt/frtsource.h> -#include <vespa/config/frt/frtconfigresponse.h> -#include <vespa/config/frt/frtconfigrequest.h> -#include <vespa/config/frt/frtconfigrequestv2.h> -#include <vespa/config/frt/frtconfigresponsev2.h> #include <vespa/config/frt/frtconfigrequestv3.h> #include <vespa/config/frt/frtconfigresponsev3.h> #include <vespa/vespalib/data/slime/slime.h> @@ -232,107 +228,27 @@ namespace { TEST_F("require that empty config response does not validate", RPCFixture()) { - FRTConfigResponseV1 fail1(f1.createEmptyRequest()); + FRTConfigResponseV3 fail1(f1.createEmptyRequest()); ASSERT_FALSE(fail1.validateResponse()); ASSERT_FALSE(fail1.hasValidResponse()); ASSERT_TRUE(fail1.isError()); } TEST_F("require that response containing errors does not validate", RPCFixture()) { - FRTConfigResponseV1 fail1(f1.createErrorRequest()); + FRTConfigResponseV3 fail1(f1.createErrorRequest()); ASSERT_FALSE(fail1.validateResponse()); ASSERT_FALSE(fail1.hasValidResponse()); ASSERT_TRUE(fail1.isError()); ASSERT_TRUE(fail1.errorCode() != 0); } -TEST_F("require that valid response validates", RPCFixture()) { - std::vector<vespalib::string> vec; - vec.push_back("bar \"foo\""); - FRTConfigResponseV1 ok(f1.createOKResponse("foo", "baz", "bim", "boo", 12, 15, vec, "mn")); - ASSERT_TRUE(ok.validateResponse()); - ASSERT_TRUE(ok.hasValidResponse()); -} - TEST_F("require that response contains all values", RPCFixture()) { - FRTConfigResponseV1 ok(f1.createOKResponse("foo", "baz", "bim", "boo", 12, 15)); + FRTConfigResponseV3 ok(f1.createOKResponse("foo", "baz", "bim", "boo", 12, 15)); ASSERT_FALSE(ok.validateResponse()); ASSERT_FALSE(ok.hasValidResponse()); } -TEST_F("require that valid response returns values after fill", RPCFixture()) { - std::vector<vespalib::string> vec; - vec.push_back("bar \"foo\""); - FRTConfigResponseV1 ok(f1.createOKResponse("foo", "baz", "bim", "boo", 12, 15, vec, "mn")); - ASSERT_TRUE(ok.validateResponse()); - ASSERT_TRUE(ok.hasValidResponse()); - - // Should not be valid - ASSERT_TRUE(ConfigKey() == ok.getKey()); - ASSERT_TRUE(ConfigValue() == ok.getValue()); - - ok.fill(); - ConfigKey key(ok.getKey()); - ASSERT_EQUAL("foo", key.getDefName()); - ASSERT_EQUAL("baz", key.getDefMd5()); - ASSERT_EQUAL("bim", key.getConfigId()); - ASSERT_EQUAL("mn", key.getDefNamespace()); - - ConfigValue value(ok.getValue()); - ASSERT_TRUE(vec == value.getLines()); -} - -TEST("require that request parameters are correctly initialized") { - ConnectionMock conn; - std::vector<vespalib::string> schema; - schema.push_back("foo"); - schema.push_back("bar"); - ConfigKey key("foo", "bar", "bim", "boo", schema); - FRTConfigRequestV1 frtReq(key, &conn, "mymd5", 1337, 8); - - FRT_RPCRequest * req = frtReq.getRequest(); - FRT_Values & params(*req->GetParams()); - ASSERT_EQUAL("bar", std::string(params[0]._string._str)); - ASSERT_EQUAL("", std::string(params[1]._string._str)); - ASSERT_EQUAL("boo", std::string(params[2]._string._str)); - ASSERT_EQUAL("foo", std::string(params[3]._string._str)); - ASSERT_EQUAL("mymd5", std::string(params[4]._string._str)); - ASSERT_EQUAL(1337u, params[5]._intval64); - ASSERT_EQUAL(8u, params[6]._intval64); - ASSERT_EQUAL("bim", std::string(params[7]._string._str)); - ASSERT_EQUAL(2u, params[8]._string_array._len); - ASSERT_EQUAL("foo", std::string(params[8]._string_array._pt[0]._str)); - ASSERT_EQUAL("bar", std::string(params[8]._string_array._pt[1]._str)); - ASSERT_EQUAL(1u, params[9]._intval32); -} - -TEST("require that request is aborted") { - MyAbortHandler handler; - ConnectionMock conn; - ConfigKey key("foo", "bar", "bim", "boo"); - FRTConfigRequestV1 frtReq(key, &conn, "mymd5", 1337, 8); - frtReq.getRequest()->SetAbortHandler(&handler); - ASSERT_FALSE(frtReq.isAborted()); - ASSERT_TRUE(frtReq.abort()); -} - -TEST_FF("require that request is invoked", SourceFixture(), - FRTFixture(f1)) -{ - f2.result.state = ConfigState("foo", 3); - f2.src.getConfig(); - ASSERT_TRUE(f2.src.getCurrentRequest().verifyKey(f1.key)); - ASSERT_FALSE(f2.src.getCurrentRequest().verifyKey(ConfigKey("foo", "bal", "bim", "boo", std::vector<vespalib::string>()))); - ASSERT_FALSE(f2.src.getCurrentRequest().verifyState(ConfigState("foo", 0))); - ASSERT_FALSE(f2.src.getCurrentRequest().verifyState(ConfigState("foo", 1))); - ASSERT_FALSE(f2.src.getCurrentRequest().verifyState(ConfigState("bar", 1))); - ASSERT_TRUE(f2.src.getCurrentRequest().verifyState(ConfigState("foo", 3))); - ASSERT_TRUE(f2.result.notified); - f2.src.close(); -} - -TEST_FF("require that request is config task is scheduled", SourceFixture(), - FRTFixture(f1)) +TEST_FF("require that request is config task is scheduled", SourceFixture(), FRTFixture(f1)) { f2.src.getConfig(); ASSERT_TRUE(f2.result.notified); @@ -349,96 +265,6 @@ TEST_FF("require that request is config task is scheduled", SourceFixture(), f2.src.close(); } -TEST("require that v2 request is correctly initialized") { - ConnectionMock conn; - ConfigKey key = ConfigKey::create<MyConfig>("foobi"); - vespalib::string md5 = "mymd5"; - int64_t currentGeneration = 3; - int64_t wantedGeneration = 4; - vespalib::string hostName = "myhost"; - int64_t timeout = 3000; - Trace traceIn(3); - traceIn.trace(2, "Hei"); - FRTConfigRequestV2 v2req(&conn, key, md5, currentGeneration, wantedGeneration, hostName, timeout, traceIn); - ConfigDefinition origDef(MyConfig::CONFIG_DEF_SCHEMA); - - FRT_RPCRequest * req = v2req.getRequest(); - ASSERT_TRUE(req != NULL); - FRT_Values & params(*req->GetParams()); - std::string json(params[0]._string._str); - Slime slime; - JsonFormat::decode(Memory(json), slime); - Inspector & root(slime.get()); - EXPECT_EQUAL(2, root[REQUEST_VERSION].asLong()); - EXPECT_EQUAL(key.getDefName(), root[REQUEST_DEF_NAME].asString().make_string()); - EXPECT_EQUAL(key.getDefNamespace(), root[REQUEST_DEF_NAMESPACE].asString().make_string()); - EXPECT_EQUAL(key.getDefMd5(), root[REQUEST_DEF_MD5].asString().make_string()); - EXPECT_EQUAL(key.getConfigId(), root[REQUEST_CLIENT_CONFIGID].asString().make_string()); - EXPECT_EQUAL(hostName, root[REQUEST_CLIENT_HOSTNAME].asString().make_string()); - EXPECT_EQUAL(currentGeneration, root[REQUEST_CURRENT_GENERATION].asLong()); - EXPECT_EQUAL(wantedGeneration, root[REQUEST_WANTED_GENERATION].asLong()); - EXPECT_EQUAL(md5, root[REQUEST_CONFIG_MD5].asString().make_string()); - EXPECT_EQUAL(timeout, root[REQUEST_TIMEOUT].asLong()); - Trace trace; - trace.deserialize(root[REQUEST_TRACE]); - EXPECT_TRUE(trace.shouldTrace(2)); - EXPECT_TRUE(trace.shouldTrace(3)); - EXPECT_FALSE(trace.shouldTrace(4)); - EXPECT_EQUAL(timeout, root[REQUEST_TIMEOUT].asLong()); - ConfigDefinition def; - def.deserialize(root[REQUEST_DEF_CONTENT]); - EXPECT_EQUAL(origDef.asString(), def.asString()); - ConfigResponse::UP response(v2req.createResponse(req)); - req->GetReturn()->AddString("foobar"); - EXPECT_TRUE(response->validateResponse()); -} - -TEST("require that v2 reponse is correctly initialized") { - ConnectionMock conn; - Slime slime; - ConfigKey key = ConfigKey::create<MyConfig>("foobi"); - vespalib::string md5 = "mymd5"; - int64_t generation = 3; - vespalib::string hostname = "myhhost"; - Trace traceIn(3); - traceIn.trace(2, "Hei!"); - Cursor & root(slime.setObject()); - root.setLong(RESPONSE_VERSION, 2ul); - root.setString(RESPONSE_DEF_NAME, Memory(key.getDefName())); - root.setString(RESPONSE_DEF_NAMESPACE, Memory(key.getDefNamespace())); - root.setString(RESPONSE_DEF_MD5, Memory(key.getDefMd5())); - root.setString(RESPONSE_CONFIGID, Memory(key.getConfigId())); - root.setString(RESPONSE_CLIENT_HOSTNAME, Memory(hostname)); - root.setString(RESPONSE_CONFIG_MD5, Memory(md5)); - root.setLong(RESPONSE_CONFIG_GENERATION, generation); - traceIn.serialize(root.setObject(RESPONSE_TRACE)); - Cursor & payload(root.setObject(RESPONSE_PAYLOAD)); - payload.setString("myField", "foobiar"); - SimpleBuffer buf; - JsonFormat::encode(slime, buf, true); - FRT_RPCRequest * req = conn.allocRPCRequest(); - req->GetReturn()->AddString(buf.get().make_string().c_str()); - FRTConfigResponseV2 response(req); - ASSERT_TRUE(response.validateResponse()); - response.fill(); - Trace trace(response.getTrace()); - EXPECT_TRUE(trace.shouldTrace(3)); - EXPECT_FALSE(trace.shouldTrace(4)); - ConfigKey responseKey(response.getKey()); - EXPECT_EQUAL(key.getDefName(), responseKey.getDefName()); - EXPECT_EQUAL(key.getDefNamespace(), responseKey.getDefNamespace()); - EXPECT_EQUAL(key.getDefMd5(), responseKey.getDefMd5()); - EXPECT_EQUAL(key.getConfigId(), responseKey.getConfigId()); - EXPECT_EQUAL(hostname, response.getHostName()); - ConfigState state(response.getConfigState()); - EXPECT_EQUAL(md5, state.md5); - EXPECT_EQUAL(generation, state.generation); - ConfigValue value(response.getValue()); - MyConfig::UP config(value.newInstance<MyConfig>()); - EXPECT_EQUAL("foobiar", config->myField); - req->SubRef(); -} - TEST("require that v3 request is correctly initialized") { ConnectionMock conn; ConfigKey key = ConfigKey::create<MyConfig>("foobi"); @@ -449,7 +275,13 @@ TEST("require that v3 request is correctly initialized") { int64_t timeout = 3000; Trace traceIn(3); traceIn.trace(2, "Hei"); - FRTConfigRequestV3 v3req(&conn, key, md5, currentGeneration, wantedGeneration, hostName, timeout, traceIn, VespaVersion::fromString("1.2.3"), CompressionType::LZ4); + FRTConfigRequestV3 v3req(&conn, key, md5, currentGeneration, wantedGeneration, hostName, + timeout, traceIn, VespaVersion::fromString("1.2.3"), CompressionType::LZ4); + ASSERT_TRUE(v3req.verifyState(ConfigState(md5, 3))); + ASSERT_FALSE(v3req.verifyState(ConfigState(md5, 2))); + ASSERT_FALSE(v3req.verifyState(ConfigState("xxx", 3))); + ASSERT_FALSE(v3req.verifyState(ConfigState("xxx", 2))); + ConfigDefinition origDef(MyConfig::CONFIG_DEF_SCHEMA); FRT_RPCRequest * req = v3req.getRequest(); |