summaryrefslogtreecommitdiffstats
path: root/configutil/src/tests/model_inspect/model_inspect_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'configutil/src/tests/model_inspect/model_inspect_test.cpp')
-rw-r--r--configutil/src/tests/model_inspect/model_inspect_test.cpp267
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(); }