aboutsummaryrefslogtreecommitdiffstats
path: root/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java')
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java200
1 files changed, 200 insertions, 0 deletions
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java
new file mode 100644
index 00000000000..10d757901e2
--- /dev/null
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/restapiv2/NodeTest.java
@@ -0,0 +1,200 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.clustercontroller.core.restapiv2;
+
+import com.yahoo.vdslib.state.Node;
+import com.yahoo.vdslib.state.NodeState;
+import com.yahoo.vdslib.state.NodeType;
+import com.yahoo.vdslib.state.State;
+import com.yahoo.vespa.clustercontroller.core.ContentCluster;
+import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.UnitResponse;
+import org.codehaus.jettison.json.JSONObject;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class NodeTest extends StateRestApiTest {
+
+ @Test
+ public void testDistributor() throws Exception {
+ setUp(true);
+ UnitResponse response = restAPI.getState(new StateRequest("music/distributor/1", 0));
+ String expected =
+ "{\n" +
+ " \"attributes\": {\"hierarchical-group\": \"east.g2\"},\n" +
+ " \"state\": {\n" +
+ " \"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"unit\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"user\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+ assertEquals(expected, jsonWriter.createJson(response).toString(2));
+ }
+
+ @Test
+ public void testStorage() throws Exception {
+ setUp(true);
+ UnitResponse response = restAPI.getState(new StateRequest("music/storage/1", 0));
+ String expected =
+ "{\n" +
+ " \"attributes\": {\"hierarchical-group\": \"east.g2\"},\n" +
+ " \"state\": {\n" +
+ " \"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"unit\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"user\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"metrics\": {\n" +
+ // Why 24 and 28? There are 4 distributor nodes seen in slobrok (see StateRestApiTest).
+ // Each gets a host info with distributor-put-latency-ms-sum 6 and
+ // distributor-put-latency-count 7 (see StateRestApiTest.getHostInfo()).
+ // Therefore, in aggregate, 4*6 is 24, and 4*7 is 28.
+ " \"distributor-put-latency-ms-sum\": 24,\n" +
+ " \"distributor-put-latency-count\": 28\n" +
+ " },\n" +
+ " \"partition\": {\n" +
+ " \"0\": {\"link\": \"\\/cluster\\/v2\\/music\\/storage\\/1\\/0\"},\n" +
+ " \"1\": {\"link\": \"\\/cluster\\/v2\\/music\\/storage\\/1\\/1\"}\n" +
+ " }\n" +
+ "}";
+ assertEquals(expected, jsonWriter.createJson(response).toString(2));
+ }
+
+ @Test
+ public void testRecursiveNode() throws Exception {
+ setUp(true);
+ UnitResponse response = restAPI.getState(new StateRequest("music/storage/1", 1));
+ String expected =
+ "{\n" +
+ " \"attributes\": {\"hierarchical-group\": \"east.g2\"},\n" +
+ " \"state\": {\n" +
+ " \"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"unit\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"user\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"metrics\": {\n" +
+ // Why 24 and 28? There are 4 distributor nodes seen in slobrok (see StateRestApiTest).
+ // Each gets a host info with distributor-put-latency-ms-sum 6 and
+ // distributor-put-latency-count 7 (see StateRestApiTest.getHostInfo()).
+ // Therefore, in aggregate, 4*6 is 24, and 4*7 is 28.
+ " \"distributor-put-latency-ms-sum\": 24,\n" +
+ " \"distributor-put-latency-count\": 28\n" +
+ " },\n" +
+ " \"partition\": {\n" +
+ " \"0\": {\n" +
+ " \"state\": {\"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }},\n" +
+ " \"metrics\": {\n" +
+ " \"bucket-count\": 1,\n" +
+ " \"unique-document-count\": 2,\n" +
+ " \"unique-document-total-size\": 3\n" +
+ " }\n" +
+ " },\n" +
+ " \"1\": {\n" +
+ " \"state\": {\"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }},\n" +
+ " \"metrics\": {\n" +
+ " \"bucket-count\": 1,\n" +
+ " \"unique-document-count\": 2,\n" +
+ " \"unique-document-total-size\": 3\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ "}";
+ assertEquals(expected, jsonWriter.createJson(response).toString(2));
+ }
+
+ @Test
+ public void testNodeNotSeenInSlobrok() throws Exception {
+ setUp(true);
+ ContentCluster old = music.context.cluster;
+ music.context.cluster = new ContentCluster(old.getName(), old.getConfiguredNodes().values(), old.getDistribution(), 0, 0.0);
+ NodeState currentState = new NodeState(NodeType.STORAGE, State.DOWN);
+ currentState.setDescription("Not seen");
+ music.context.currentState.setNodeState(new Node(NodeType.STORAGE, 1), currentState);
+ UnitResponse response = restAPI.getState(new StateRequest("music/storage/1", 0));
+ String expected =
+ "{\n" +
+ " \"attributes\": {\"hierarchical-group\": \"east.g2\"},\n" +
+ " \"state\": {\n" +
+ " \"generated\": {\n" +
+ " \"state\": \"down\",\n" +
+ " \"reason\": \"Not seen\"\n" +
+ " },\n" +
+ " \"unit\": {\n" +
+ " \"state\": \"down\",\n" +
+ " \"reason\": \"Node not seen in slobrok.\"\n" +
+ " },\n" +
+ " \"user\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"metrics\": {\n" +
+ " \"distributor-put-latency-ms-sum\": 0,\n" +
+ " \"distributor-put-latency-count\": 0\n" +
+ " }\n" +
+ "}";
+ assertEquals(expected, jsonWriter.createJson(response).toString(2));
+ }
+
+ @Test
+ public void testRecursiveStorageClusterDoesNotIncludePerNodeStatsOrMetrics() throws Exception {
+ setUp(true);
+ UnitResponse response = restAPI.getState(new StateRequest("music/storage", 1));
+ String expected =
+ "{\n" +
+ " \"attributes\": {\"hierarchical-group\": \"east.g2\"},\n" +
+ " \"state\": {\n" +
+ " \"generated\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"unit\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " },\n" +
+ " \"user\": {\n" +
+ " \"state\": \"up\",\n" +
+ " \"reason\": \"\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"partition\": {\n" +
+ " \"0\": {\"link\": \"\\/cluster\\/v2\\/music\\/storage\\/1\\/0\"},\n" +
+ " \"1\": {\"link\": \"\\/cluster\\/v2\\/music\\/storage\\/1\\/1\"}\n" +
+ " }\n" +
+ "}";
+ JSONObject json = jsonWriter.createJson(response);
+ assertEquals(expected, json.getJSONObject("node").getJSONObject("1").toString(2));
+ }
+
+}