diff options
Diffstat (limited to 'configutil/src/tests/model_inspect/model_inspect_test.cpp')
-rw-r--r-- | configutil/src/tests/model_inspect/model_inspect_test.cpp | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/configutil/src/tests/model_inspect/model_inspect_test.cpp b/configutil/src/tests/model_inspect/model_inspect_test.cpp new file mode 100644 index 00000000000..283d1f0c4f2 --- /dev/null +++ b/configutil/src/tests/model_inspect/model_inspect_test.cpp @@ -0,0 +1,267 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/vespalib/testkit/testapp.h> +#include <lib/modelinspect.h> +#include <iostream> + +class Model { +public: + config::ConfigUri uri; + ModelInspect::Flags flags; + std::stringstream stream; + ModelInspect model; + + Model() : uri("file:model.cfg"), flags(), stream(), + model(flags, uri, stream) { + }; + + Model(ModelInspect::Flags _flags) + : uri("file:model.cfg"), flags(_flags), stream(), + model(flags, uri, stream) { + }; + + void contains(std::string needle) { + ASSERT_TRUE(stream.str().find(needle) != std::string::npos); + }; + + void missing(std::string needle) { + ASSERT_TRUE(stream.str().find(needle) == std::string::npos); + }; + + ~Model() { + }; +}; + +class MakeUriFlags : public ModelInspect::Flags { +public: + MakeUriFlags() : ModelInspect::Flags() { + makeuri = true; + } +}; + +class TagFilterFlags : public ModelInspect::Flags { +public: + TagFilterFlags(vespalib::string tag) : ModelInspect::Flags() { + tagfilt = true; + tagFilter.push_back(tag); + } +}; + +class ModelDummy : public ModelInspect { +public: + bool _yamlDump, + _listHosts, + _listServices, + _listCluster, + _listConfigIds, + _listHost, + _listClusters, + _listAllPorts, + _listService, + _listService2, + _listConfigId, + _getIndexOf; + ModelDummy(std::stringstream &stream) + : ModelInspect(ModelInspect::Flags(), + config::ConfigUri("file:model.cfg"), + stream) { + _yamlDump = + _listHosts = + _listServices = + _listCluster = + _listConfigIds = + _listHost = + _listClusters = + _listAllPorts = + _listService = + _listService2 = + _listConfigId = + _getIndexOf = false; + }; + + void yamlDump() { _yamlDump = true; }; + void listHosts() { _listHosts = true; }; + void listServices() { _listServices = true; }; + void listClusters() { _listClusters = true; }; + void listConfigIds() { _listConfigIds = true; }; + int listHost(const vespalib::string) { _listHost = true; return 0; }; + int listAllPorts() { _listAllPorts = true; return 0; }; + int listCluster(const vespalib::string) { _listCluster = true; return 0; }; + int listService(const vespalib::string) { _listService = true; return 0; }; + int listService(const vespalib::string, const vespalib::string) { _listService2 = true; return 0; }; + int listConfigId(const vespalib::string) { _listConfigId = true; return 0; }; + int getIndexOf(const vespalib::string, const vespalib::string) { _getIndexOf = true; return 0; }; + + ~ModelDummy() {}; +}; + + +TEST_F("yamlDump", Model) { + ModelInspect & inspect = f1.model; + inspect.yamlDump(); + + // Make sure that we got at least some yaml data out + // TODO: Parse yaml + f1.contains("- servicename: logd"); +} + +TEST_F("listHosts", Model) { + f1.model.listHosts(); + f1.contains("example.yahoo.com"); +} + +TEST_F("listServices", Model) { + f1.model.listServices(); + f1.contains("logd"); + f1.contains("qrserver"); +} + +TEST_F("listClusters", Model) { + f1.model.listClusters(); + f1.contains("admin"); + f1.contains("default"); + f1.contains("music"); +} + +TEST_F("listConfigIds", Model) { + f1.model.listConfigIds(); + f1.contains("search/qrsclusters/default/qrserver.0"); + f1.contains("admin/configservers/configserver.0"); +} + +TEST_F("listHost", Model) { + ASSERT_EQUAL(0, f1.model.listHost("example.yahoo.com")); + f1.contains("search/qrsclusters/default/qrserver.0"); + ASSERT_EQUAL(1, f1.model.listHost("nothere")); +} + +TEST_F("listCluster", Model) { + ASSERT_EQUAL(0, f1.model.listCluster("default")); + f1.contains("search/qrsclusters/default/qrserver.0"); + + ASSERT_EQUAL(1, f1.model.listCluster("nothere")); +} + +TEST_F("listAllPorts", Model) { + f1.model.listAllPorts(); + f1.contains("example.yahoo.com:19080"); +} + +TEST_F("listService", Model) { + ASSERT_EQUAL(0, f1.model.listService("qrserver")); + f1.contains("search/qrsclusters/default/qrserver.0"); + ASSERT_EQUAL(1, f1.model.listService("nothere")); +} + +TEST_F("listService with cluster", Model) { + ASSERT_EQUAL(0, f1.model.listService("default", "qrserver")); + f1.contains("search/qrsclusters/default/qrserver.0"); + ASSERT_EQUAL(1, f1.model.listService("notacluster", "qrserver")); +} + +TEST_F("listConfigId", Model) { + ASSERT_EQUAL(0, f1.model.listConfigId("hosts/example.yahoo.com/logd")); + f1.contains("logd @ example.yahoo.com : hosts"); + ASSERT_EQUAL(1, f1.model.listConfigId("nothere")); +} + +TEST_F("getIndexOf", Model) { + ASSERT_EQUAL(0, f1.model.getIndexOf("logd", "example.yahoo.com")); + ASSERT_EQUAL(1, f1.model.getIndexOf("nothere", "example.yahoo.com")); + ASSERT_EQUAL(1, f1.model.getIndexOf("nothere", "nothere")); +} + +TEST_FF("tag filter match", TagFilterFlags("http"), Model(f1)) { + f2.model.listService("qrserver"); + f2.contains("tcp/example.yahoo.com:4080"); +} + +TEST_FF("tag filter no match", TagFilterFlags("nothing"), Model(f1)) { + f2.model.listService("qrserver"); + f2.missing("tcp/example.yahoo.com:4080"); +} + +TEST_FF("makeuri", MakeUriFlags(), Model(f1)) { + f2.model.listService("qrserver"); + f2.contains("http://example.yahoo.com:4080"); +} + +TEST_FF("action no command", std::stringstream, ModelDummy(f1)) { + char *argv[] = { strdup("notacommand"), NULL, NULL }; + ASSERT_EQUAL(1, f2.action(1, argv)); + ASSERT_EQUAL(1, f2.action(2, argv)); + ASSERT_EQUAL(1, f2.action(3, argv)); + free(argv[0]); +} + +TEST_FF("action", std::stringstream, ModelDummy(f1)) { + { + char *arg[] = { strdup("yamldump") }; + ASSERT_EQUAL(0, f2.action(1, arg)); + ASSERT_TRUE(f2._yamlDump); + free(arg[0]); + } + { + char *arg[] = { strdup("hosts") }; + ASSERT_EQUAL(0, f2.action(1, arg)); + ASSERT_TRUE(f2._listHosts); + free(arg[0]); + } + { + char *arg[] = { strdup("services") }; + ASSERT_EQUAL(0, f2.action(1, arg)); + ASSERT_TRUE(f2._listServices); + free(arg[0]); + } + { + char *arg[] = { strdup("clusters") }; + ASSERT_EQUAL(0, f2.action(1, arg)); + ASSERT_TRUE(f2._listClusters); + free(arg[0]); + } + { + char *arg[] = { strdup("configids") }; + ASSERT_EQUAL(0, f2.action(1, arg)); + ASSERT_TRUE(f2._listConfigIds); + free(arg[0]); + } + { + char *arg[] = { strdup("host"), NULL }; + ASSERT_EQUAL(0, f2.action(2, arg)); + ASSERT_TRUE(f2._listHost); + free(arg[0]); + } + { + char *arg[] = { strdup("cluster"), NULL }; + ASSERT_EQUAL(0, f2.action(2, arg)); + ASSERT_TRUE(f2._listCluster); + free(arg[0]); + } + { + char *arg[] = { strdup("service"), NULL }; + ASSERT_EQUAL(0, f2.action(2, arg)); + ASSERT_TRUE(f2._listService); + free(arg[0]); + } + { + char *arg[] = { strdup("configid"), NULL }; + ASSERT_EQUAL(0, f2.action(2, arg)); + ASSERT_TRUE(f2._listConfigId); + free(arg[0]); + } + { + char *arg[] = { strdup("service"), strdup("a:b") }; + ASSERT_EQUAL(0, f2.action(2, arg)); + ASSERT_TRUE(f2._listService2); + free(arg[0]); + free(arg[1]); + } + { + char *arg[] = { strdup("get-index-of"), NULL, NULL }; + ASSERT_EQUAL(0, f2.action(3, arg)); + ASSERT_TRUE(f2._getIndexOf); + free(arg[0]); + } +} + +TEST_MAIN() { TEST_RUN_ALL(); } |