/*
* Copyright 2012-2017 the original author or authors.
*
* 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 org.glowroot.agent.plugin.api.internal;
import java.util.List;
import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.junit.Test;
import org.glowroot.agent.plugin.api.Message;
import static org.assertj.core.api.Assertions.assertThat;
public class MessageTest {
@Test
public void shouldFormatConstant() {
ReadableMessage message = (ReadableMessage) Message.create("constant");
assertThat(message.getText()).isEqualTo("constant");
}
@Test
public void shouldFormatSingle() {
ReadableMessage message = (ReadableMessage) Message.create("{}", "test");
assertThat(message.getText()).isEqualTo("test");
}
@Test
public void shouldFormatSinglePlus() {
ReadableMessage message = (ReadableMessage) Message.create("one {} two", "test");
assertThat(message.getText()).isEqualTo("one test two");
}
@Test
public void shouldFormatMultiple() {
ReadableMessage message =
(ReadableMessage) Message.create("one {} two {}{}", "test", "2", "3");
assertThat(message.getText()).isEqualTo("one test two 23");
}
@Test
public void shouldFormatConstantWithEmptyMethodBody() {
ReadableMessage message = (ReadableMessage) Message.create("public void run() {}");
assertThat(message.getText()).isEqualTo("public void run() {}");
}
@Test
public void shouldTruncateMessage() {
final String suffix = " [truncated to 100000 characters]";
String longString = Strings.repeat("a", 100000);
ReadableMessage message = (ReadableMessage) Message.create("{}", longString + "a");
assertThat(message.getText()).isEqualTo(longString + suffix);
}
@Test
public void shouldNotTruncateMessage() {
String longString = Strings.repeat("a", 100000);
ReadableMessage message = (ReadableMessage) Message.create("{}", longString);
assertThat(message.getText()).isEqualTo(longString);
}
@Test
public void shouldTruncateDetail() {
final String suffix = " [truncated to 10000 characters]";
String longString = Strings.repeat("a", 10000);
Map<String, Object> detail = Maps.newHashMap();
detail.put(longString, longString);
detail.put("a", longString + "a");
detail.put("x" + longString, "x");
detail.put("xx" + longString, "xx" + longString);
detail.put("list",
ImmutableList.of(longString, longString + "a", Optional.of("x" + longString)));
detail.put("absent", Optional.absent());
detail.put("oa", Optional.of("a"));
detail.put("ox", Optional.of("x" + longString));
detail.put("nested", ImmutableMap.of(longString + "a", longString + "a"));
ReadableMessage message = (ReadableMessage) Message.create("", detail);
Map<String, ?> truncatedDetail = message.getDetail();
assertThat(truncatedDetail.get(longString)).isEqualTo(longString);
assertThat(truncatedDetail.get("a")).isEqualTo(longString + suffix);
assertThat(truncatedDetail.get("x" + Strings.repeat("a", 9999) + suffix)).isEqualTo("x");
assertThat(truncatedDetail.get("xx" + Strings.repeat("a", 9998) + suffix))
.isEqualTo("xx" + Strings.repeat("a", 9998) + suffix);
assertThat((List<?>) truncatedDetail.get("list")).containsExactly(longString,
longString + suffix, Optional.of("x" + Strings.repeat("a", 9999) + suffix));
assertThat(truncatedDetail.get("absent")).isEqualTo(Optional.absent());
assertThat(truncatedDetail.get("oa")).isEqualTo(Optional.of("a"));
assertThat(truncatedDetail.get("ox"))
.isEqualTo(Optional.of("x" + Strings.repeat("a", 9999) + suffix));
assertThat(((Map<?, ?>) truncatedDetail.get("nested")).get(longString + suffix))
.isEqualTo(longString + suffix);
}
@Test
public void shouldTestNotEnoughArgsForTemplate() {
ReadableMessage message = (ReadableMessage) Message.create("{}, {} xyz {}", "test");
assertThat(message.getText()).isEqualTo("test, <not enough args provided for template> xyz"
+ " <not enough args provided for template>");
}
@Test
public void shouldTestNullTemplate() {
ReadableMessage message = (ReadableMessage) Message.create(null);
assertThat(message.getText()).isEqualTo("");
}
}