/*
* Copyright 2014 Cyanogen Inc.
* 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.cyngn.vertx.opentsdb;
import com.cyngn.vertx.opentsdb.service.MetricsParser;
import com.cyngn.vertx.opentsdb.service.OpenTsDbService;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.MultiMap;
import io.vertx.core.eventbus.DeliveryOptions;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonObject;
import org.junit.Before;
import org.junit.Test;
import java.util.function.BiConsumer;
import java.util.regex.Pattern;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* @author truelove@cyngn.com (Jeremy Truelove) 11/11/14
*/
public class MetricsParserTests {
private BiConsumer<Message<JsonObject>, String> errorHandler;
private Integer count;
public Message<JsonObject> getTestMessage(JsonObject obj) {
return new Message<JsonObject>() {
@Override
public String address() { return null; }
@Override public MultiMap headers() { return null; }
@Override public JsonObject body() { return obj; }
@Override
public String replyAddress() { return null; }
@Override
public void reply(Object message) { }
@Override
public <R> void reply(Object message, Handler<AsyncResult<Message<R>>> replyHandler) { }
@Override
public void reply(Object message, DeliveryOptions options) { }
@Override
public <R> void reply(Object message, DeliveryOptions options, Handler<AsyncResult<Message<R>>> replyHandler) { }
@Override
public void fail(int failureCode, String message) { }
};
}
@Before
public void setUp() {
count = 0;
errorHandler = (jsonObjectMessage, s) -> count++;
}
@Test
public void missingNameTest() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("value", "34.4");
metric.put("tags", new JsonObject().put("foo", "bar"));
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, "", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertEquals(null, result);
assertTrue(count == 1);
}
@Test
public void missingValueTest() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("tags", new JsonObject().put("foo", "bar"));
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, "", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertEquals(null, result);
assertTrue(count == 1);
}
@Test
public void missingTagsTest() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("value", "17");
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, "", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertEquals(null, result);
assertTrue(count == 1);
}
@Test
public void defaultTagsTest() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("value", "17");
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, "foo=bar", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertTrue(Pattern.compile("put test.value \\d* 17 foo=bar\\n").matcher(result).matches());
assertTrue(count == 0);
}
@Test
public void parseTestSimple() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("value", "17");
metric.put("tags", new JsonObject().put("tag1", "val1").put("tag2", "val2"));
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, "foo=bar", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertTrue(Pattern.compile("put test.value \\d* 17 foo=bar tag1=val1 tag2=val2\\n").matcher(result).matches());
assertTrue(count == 0);
}
@Test
public void parseTestNoDefaultTags() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("value", "17");
metric.put("tags", new JsonObject().put("tag1", "val1").put("tag2", "val2"));
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser(null, null, errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertTrue(Pattern.compile("put test.value \\d* 17 tag1=val1 tag2=val2\\n").matcher(result).matches());
assertTrue(count == 0);
}
@Test
public void parseTestPrefix() {
JsonObject metric = new JsonObject();
metric.put("action", OpenTsDbService.ADD_COMMAND);
metric.put("name", "test.value");
metric.put("value", "17");
metric.put("tags", new JsonObject().put("tag1", "val1").put("tag2", "val2"));
Message<JsonObject> msg = getTestMessage(metric);
MetricsParser parser = new MetricsParser("test.service", "foo=bar", errorHandler);
String result = parser.createMetricString(msg, msg.body());
assertTrue(Pattern.compile("put test.service.test.value \\d* 17 foo=bar tag1=val1 tag2=val2\\n").matcher(result).matches());
assertTrue(count == 0);
}
}