Java tutorial
/* * Copyright 2013-2016 Rackspace * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.rackspacecloud.blueflood.outputs.handlers; import com.google.common.base.Strings; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.rackspacecloud.blueflood.http.HttpIntegrationTestBase; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import org.junit.Test; import java.io.IOException; import java.net.URISyntaxException; import static org.junit.Assert.*; /** * Integration Tests for GET .../views/:metricName (aka Singleplot views) */ public class HttpRollupsQueryHandlerIntegrationTest extends HttpIntegrationTestBase { private final String tenant_id = "333333"; private final long now = System.currentTimeMillis(); private final long start = now - TIME_DIFF_MS; private final long end = now + TIME_DIFF_MS; @Test public void testHttpRollupsQueryHandler() throws Exception { String postfix = getPostfix(); // ingest and rollup metrics with enum values and verify CF points and elastic search indexes final String metric_name = "3333333.G1s" + postfix; // post multi metrics for ingestion and verify HttpResponse response = postMetric(tenant_id, postAggregatedPath, "sample_payload.json", postfix); assertEquals("Should get status 200 from ingestion server for POST", 200, response.getStatusLine().getStatusCode()); EntityUtils.consume(response.getEntity()); JsonObject responseObject = getSingleMetricRetry(tenant_id, metric_name, start, end, "", "FULL", ""); assertNotNull("No values for " + metric_name + " found", responseObject); assertEquals("unknown", responseObject.get("unit").getAsString()); JsonArray values = responseObject.getAsJsonArray("values"); assertEquals(1, values.size()); JsonObject value = values.get(0).getAsJsonObject(); assertEquals(1, value.get("numPoints").getAsInt()); assertTrue(value.has("timestamp")); assertEquals(397, value.get("latest").getAsInt()); JsonObject meta = responseObject.get("metadata").getAsJsonObject(); assertTrue(meta.get("limit").isJsonNull()); assertTrue(meta.get("next_href").isJsonNull()); assertEquals(1, meta.get("count").getAsInt()); assertTrue(meta.get("marker").isJsonNull()); assertResponseHeaderAllowOrigin(response); } /** * * On Travis we had runs fails because even though the query returns 200, no metric values are on in the response. * * We aren't sure what's going on as we can't reproduce this locally. * * @param tenant_id * @param metric_name * @param start * @param end * @param points * @param resolution * @param select * @return * @throws URISyntaxException * @throws IOException * @throws InterruptedException */ private JsonObject getSingleMetricRetry(String tenant_id, String metric_name, long start, long end, String points, String resolution, String select) throws URISyntaxException, IOException, InterruptedException { for (int i = 0; i < 10; i++) { // query for multiplot metric and assert results HttpResponse query_response = querySingleplot(tenant_id, metric_name, start, end, points, resolution, select); assertEquals("Should get status 200 from query server for single view GET", 200, query_response.getStatusLine().getStatusCode()); // assert response content String responseContent = EntityUtils.toString(query_response.getEntity(), "UTF-8"); JsonParser jsonParser = new JsonParser(); JsonObject responseObject = jsonParser.parse(responseContent).getAsJsonObject(); JsonArray arrayValues = responseObject.getAsJsonArray("values"); if (arrayValues.size() == 1) { return responseObject; } System.out.println(String.format("Data for metric %s is not found, sleeping and retrying, payload: %s", metric_name, responseContent)); Thread.currentThread().sleep(5000); } return null; } }