Skip to content

Commit

Permalink
Merge 0dfe983 into fb65eef
Browse files Browse the repository at this point in the history
  • Loading branch information
VinnyQ committed Nov 8, 2016
2 parents fb65eef + 0dfe983 commit 440ce7b
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ private static void validate(AggregatedPayload payload) {
metricName = ((BluefloodSet) leafBean).getName();
}

if ((metricName.isEmpty()) && (payload.getAllMetricNames().size() > 0)) {
metricName = payload.getAllMetricNames().get(0);
}

payload.validationErrors.add(new ErrorResponse.ErrorData(payload.getTenantId(), metricName,
source, constraintViolation.getMessage()));
}
Expand Down Expand Up @@ -158,7 +162,7 @@ public List<ErrorResponse.ErrorData> getValidationErrors() {
/**
* This method is invoked by the validator automatically
*/
@AssertTrue(message="Atleast one of the aggregated metrics(gauges, counters, timers, sets) are expected")
@AssertTrue(message="At least one of the aggregated metrics(gauges, counters, timers, sets) are expected")
private boolean isValid() {
boolean isGaugePresent = gauges != null && gauges.length > 0;
boolean isCounterPresent = counters != null && counters.length > 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,18 @@
import java.io.*;
import java.net.URISyntaxException;
import java.util.*;
import java.util.regex.Pattern;
import java.util.zip.GZIPOutputStream;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import static com.rackspacecloud.blueflood.TestUtils.*;

public class HttpHandlerIntegrationTest extends HttpIntegrationTestBase {

static private final String TENANT_ID = "acTEST";
static private long BEFORE_CURRENT_COLLECTIONTIME_MS = Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
static private long AFTER_CURRENT_COLLECTIONTIME_MS = Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );

//A time stamp 2 days ago
private final long baseMillis = Calendar.getInstance().getTimeInMillis() - 172800000;
Expand Down Expand Up @@ -85,7 +85,7 @@ public void testHttpIngestionInvalidPastCollectionTime() throws Exception {

String postfix = getPostfix();

long time = System.currentTimeMillis() - TIME_DIFF_MS - Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
long time = System.currentTimeMillis() - TIME_DIFF_MS - BEFORE_CURRENT_COLLECTIONTIME_MS;

HttpResponse response = postGenMetric(TENANT_ID, postfix, postPath, time );

Expand All @@ -95,8 +95,8 @@ public void testHttpIngestionInvalidPastCollectionTime() throws Exception {
assertEquals("Number of errors invalid", 3, errorResponse.getErrors().size());
for (int i = 0; i < 3; i++) {
assertEquals("Invalid error source", "collectionTime", errorResponse.getErrors().get(i).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(i).getMessage());
}

}
Expand All @@ -106,7 +106,7 @@ public void testHttpIngestionInvalidFutureCollectionTime() throws Exception {

String postfix = getPostfix();

long time = System.currentTimeMillis() + TIME_DIFF_MS + Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );
long time = System.currentTimeMillis() + TIME_DIFF_MS + AFTER_CURRENT_COLLECTIONTIME_MS;

HttpResponse response = postGenMetric(TENANT_ID, postfix, postPath, time );

Expand All @@ -116,17 +116,17 @@ public void testHttpIngestionInvalidFutureCollectionTime() throws Exception {
assertEquals("Number of errors invalid", 3, errorResponse.getErrors().size());
for (int i = 0; i < 3; i++) {
assertEquals("Invalid error source", "collectionTime", errorResponse.getErrors().get(i).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(i).getMessage());
}
}

@Test
public void testHttpIngestionPartialInvalidCollectionTime() throws Exception {
String postfix = getPostfix();
long validTime = System.currentTimeMillis();
long pastTime = System.currentTimeMillis() - TIME_DIFF_MS - Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
long futureTime = System.currentTimeMillis() + TIME_DIFF_MS + Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );
long pastTime = System.currentTimeMillis() - TIME_DIFF_MS - BEFORE_CURRENT_COLLECTIONTIME_MS;
long futureTime = System.currentTimeMillis() + TIME_DIFF_MS + AFTER_CURRENT_COLLECTIONTIME_MS;

String jsonBody = getJsonFromFile("sample_multi_payload_with_different_time.json", postfix);
jsonBody = updateTimeStampJson(jsonBody, "\"%TIMESTAMP_1%\"", validTime);
Expand All @@ -139,7 +139,11 @@ public void testHttpIngestionPartialInvalidCollectionTime() throws Exception {

try {
assertEquals("Should get status 207 from " + String.format(postMultiPath, TENANT_ID), 207, response.getStatusLine().getStatusCode() );
assertTrue("", errorResponse.getErrors().size() > 0);
for (int i = 0; i < 4; i++) {
assertEquals("Invalid error source", "collectionTime", errorResponse.getErrors().get(i).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(i).getMessage());
}
}
finally {
EntityUtils.consume( response.getEntity() ); // Releases connection apparently
Expand All @@ -149,33 +153,31 @@ public void testHttpIngestionPartialInvalidCollectionTime() throws Exception {
@Test
public void testHttpAggregatedIngestionInvalidPastCollectionTime() throws IOException, URISyntaxException {

long timestamp = System.currentTimeMillis() - TIME_DIFF_MS
- Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
long timestamp = System.currentTimeMillis() - TIME_DIFF_MS - BEFORE_CURRENT_COLLECTIONTIME_MS;

HttpResponse response = postMetric("333333", postAggregatedPath, "sample_payload.json", timestamp, getPostfix());
ErrorResponse errorResponse = getErrorResponse(response);

assertEquals(400, response.getStatusLine().getStatusCode());
assertEquals("Number of errors invalid", 1, errorResponse.getErrors().size());
assertEquals("Invalid error source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
}

@Test
public void testHttpAggregatedIngestionInvalidFutureCollectionTime() throws IOException, URISyntaxException {

long timestamp = System.currentTimeMillis() + TIME_DIFF_MS
+ Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );
long timestamp = System.currentTimeMillis() + TIME_DIFF_MS + AFTER_CURRENT_COLLECTIONTIME_MS;

HttpResponse response = postMetric("333333", postAggregatedPath, "sample_payload.json", timestamp, getPostfix());
ErrorResponse errorResponse = getErrorResponse(response);

assertEquals(400, response.getStatusLine().getStatusCode());
assertEquals("Number of errors invalid", 1, errorResponse.getErrors().size());
assertEquals("Invalid error source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
}

@Test
Expand Down Expand Up @@ -207,8 +209,7 @@ locator, RollupType.COUNTER, new Range( start, end ),
@Test
public void testHttpAggregatedMultiIngestionInvalidPastCollectionTime() throws IOException, URISyntaxException {

long timestamp = System.currentTimeMillis() - TIME_DIFF_MS
- Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
long timestamp = System.currentTimeMillis() - TIME_DIFF_MS - BEFORE_CURRENT_COLLECTIONTIME_MS;

String postfix = getPostfix();

Expand All @@ -222,16 +223,15 @@ public void testHttpAggregatedMultiIngestionInvalidPastCollectionTime() throws I

assertEquals("Number of errors invalid", 3, errorResponse.getErrors().size());
assertEquals("Invalid error source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
}


@Test
public void testHttpAggregatedMultiIngestionInvalidFutureCollectionTime() throws IOException, URISyntaxException {

long timestamp = System.currentTimeMillis() + TIME_DIFF_MS
+ Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );
long timestamp = System.currentTimeMillis() + TIME_DIFF_MS + AFTER_CURRENT_COLLECTIONTIME_MS;

String postfix = getPostfix();

Expand All @@ -245,8 +245,8 @@ public void testHttpAggregatedMultiIngestionInvalidFutureCollectionTime() throws

assertEquals("Number of errors invalid", 3, errorResponse.getErrors().size());
assertEquals("Invalid error source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than 259200000 milliseconds into the past." +
" Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
}

@Test
Expand Down Expand Up @@ -292,8 +292,8 @@ locator2, RollupType.ENUM, new Range(start, end),
public void testHttpAggregatedMultiPartialInvalidCollectionTime() throws Exception {
String postfix = getPostfix();
long validTime = System.currentTimeMillis();
long pastTime = System.currentTimeMillis() - TIME_DIFF_MS - Configuration.getInstance().getLongProperty( CoreConfig.BEFORE_CURRENT_COLLECTIONTIME_MS );
long futureTime = System.currentTimeMillis() + TIME_DIFF_MS + Configuration.getInstance().getLongProperty( CoreConfig.AFTER_CURRENT_COLLECTIONTIME_MS );
long pastTime = System.currentTimeMillis() - TIME_DIFF_MS - BEFORE_CURRENT_COLLECTIONTIME_MS;
long futureTime = System.currentTimeMillis() + TIME_DIFF_MS + AFTER_CURRENT_COLLECTIONTIME_MS;

String jsonBody = getJsonFromFile("sample_multi_aggregated_payload_with_different_time.json", postfix);
jsonBody = updateTimeStampJson(jsonBody, "\"%TIMESTAMP_1%\"", validTime);
Expand All @@ -302,11 +302,15 @@ public void testHttpAggregatedMultiPartialInvalidCollectionTime() throws Excepti
jsonBody = jsonBody.replaceAll("%TENANT_ID_.%", TENANT_ID);

HttpResponse response = httpPost(TENANT_ID, postAggregatedMultiPath, jsonBody );
String[] output = getBodyArray(response);
ErrorResponse errorResponse = getErrorResponse(response);

try {
assertEquals("Should get status 207 from " + String.format(postAggregatedMultiPath, TENANT_ID), 207, response.getStatusLine().getStatusCode() );
assertEquals("", output[0]);
for (int i = 0; i < 2; i++) {
assertEquals("Invalid error source", "timestamp", errorResponse.getErrors().get(i).getSource());
assertEquals("Invalid error message", "Out of bounds. Cannot be more than " + BEFORE_CURRENT_COLLECTIONTIME_MS + " milliseconds into the past." +
" Cannot be more than " + AFTER_CURRENT_COLLECTIONTIME_MS + " milliseconds into the future", errorResponse.getErrors().get(i).getMessage());
}
}
finally {
EntityUtils.consume( response.getEntity() ); // Releases connection apparently
Expand Down Expand Up @@ -472,7 +476,10 @@ public void testMultiTenantPartialFailureWithoutTenant() throws Exception {

try {
assertEquals("Should get status 207 from " + String.format(postMultiPath, TENANT_ID), 207, response.getStatusLine().getStatusCode());
assertTrue("No errors found", errorResponse.getErrors().size() > 0);
for (int i = 0; i < 2; i++) {
assertEquals("Invalid error source", "tenantId", errorResponse.getErrors().get(i).getSource());
assertEquals("Invalid error message", "may not be empty", errorResponse.getErrors().get(i).getMessage());
}
}
finally {
EntityUtils.consume( response.getEntity() ); // Releases connection apparently
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public void handle(ChannelHandlerContext ctx, FullHttpRequest request) {
return;
} else {
// has some validation errors, response MULTI_STATUS
DefaultHandler.sendResponse(ctx, request, null, HttpResponseStatus.MULTI_STATUS);
DefaultHandler.sendErrorResponse(ctx, request, errors, HttpResponseStatus.MULTI_STATUS);
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ public void testEmptyTenantId() throws IOException {
assertEquals("Invalid error message", "may not be empty", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid source", "tenantId", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid tenant", "", errorResponse.getErrors().get(0).getTenantId());
assertEquals("Invalid metric name", "", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid metric name", "gauge.a.b", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid status", HttpResponseStatus.BAD_REQUEST, argument.getValue().getStatus());
}

Expand All @@ -226,7 +226,7 @@ public void testInvalidFlushInterval() throws IOException {
assertEquals("Invalid error message", "must be between 0 and 9223372036854775807", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid source", "flushInterval", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid tenant", TENANT, errorResponse.getErrors().get(0).getTenantId());
assertEquals("Invalid metric name", "", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid metric name", "gauge.a.b", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid status", HttpResponseStatus.BAD_REQUEST, argument.getValue().getStatus());
}

Expand All @@ -252,7 +252,7 @@ public void testCollectionTimeInPast() throws IOException {
"Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid tenant", TENANT, errorResponse.getErrors().get(0).getTenantId());
assertEquals("Invalid metric name", "", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid metric name", "gauge.a.b", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid status", HttpResponseStatus.BAD_REQUEST, argument.getValue().getStatus());
}

Expand All @@ -278,7 +278,7 @@ public void testCollectionTimeInFuture() throws IOException {
"Cannot be more than 600000 milliseconds into the future", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid source", "timestamp", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid tenant", TENANT, errorResponse.getErrors().get(0).getTenantId());
assertEquals("Invalid metric name", "", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid metric name", "gauge.a.b", errorResponse.getErrors().get(0).getMetricName());
assertEquals("Invalid status", HttpResponseStatus.BAD_REQUEST, argument.getValue().getStatus());
}

Expand All @@ -296,7 +296,7 @@ public void testAggregatedMetricsNotSet() throws IOException {
ErrorResponse errorResponse = getErrorResponse(errorResponseBody);

assertEquals("Number of errors invalid", 1, errorResponse.getErrors().size());
assertEquals("Invalid error message", "Atleast one of the aggregated metrics(gauges, counters, timers, sets) " +
assertEquals("Invalid error message", "At least one of the aggregated metrics(gauges, counters, timers, sets) " +
"are expected", errorResponse.getErrors().get(0).getMessage());
assertEquals("Invalid source", "", errorResponse.getErrors().get(0).getSource());
assertEquals("Invalid tenant", TENANT, errorResponse.getErrors().get(0).getTenantId());
Expand Down

0 comments on commit 440ce7b

Please sign in to comment.