package org.stagemonitor.web.monitor.filter.htmlinjector;
import org.junit.Test;
import org.springframework.mock.web.MockServletContext;
import org.stagemonitor.configuration.ConfigurationRegistry;
import org.stagemonitor.tracing.MockTracer;
import org.stagemonitor.tracing.SpanContextInformation;
import org.stagemonitor.tracing.TracingPlugin;
import org.stagemonitor.util.IOUtils;
import org.stagemonitor.util.StringUtils;
import org.stagemonitor.web.WebPlugin;
import org.stagemonitor.web.monitor.filter.HtmlInjector;
import org.stagemonitor.web.monitor.rum.BoomerangJsHtmlInjector;
import java.io.InputStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class BoomerangJsHtmlInjectorTest {
@Test
public void testBommerangJsExistsAndHashIsCorrect() throws Exception {
final String location = "/stagemonitor/public/static/rum/" + BoomerangJsHtmlInjector.BOOMERANG_FILENAME;
final InputStream inputStream = getClass().getResourceAsStream(location);
assertNotNull(inputStream);
String contentHash = StringUtils.sha1Hash(IOUtils.toString(inputStream).replace("\r\n", "\n")).substring(0, 11);
assertEquals("boomerang-" + contentHash + ".min.js", BoomerangJsHtmlInjector.BOOMERANG_FILENAME);
}
@Test
public void injectWithNullRequestName() throws Exception {
final BoomerangJsHtmlInjector injector = new BoomerangJsHtmlInjector();
final ConfigurationRegistry configuration = mock(ConfigurationRegistry.class);
final WebPlugin webPlugin = mock(WebPlugin.class);
when(configuration.getConfig(WebPlugin.class)).thenReturn(webPlugin);
final TracingPlugin tracingPlugin = mock(TracingPlugin.class);
when(tracingPlugin.getTracer()).thenReturn(new MockTracer());
when(configuration.getConfig(TracingPlugin.class)).thenReturn(tracingPlugin);
injector.init(new HtmlInjector.InitArguments(configuration, new MockServletContext()));
final SpanContextInformation spanContext = mock(SpanContextInformation.class);
when(spanContext.getOperationName()).thenReturn("GET /index.html");
final HtmlInjector.InjectArguments injectArguments = new HtmlInjector.InjectArguments(spanContext);
injector.injectHtml(injectArguments);
assertEquals("<script src=\"/stagemonitor/public/static/rum/boomerang-56c823668fc.min.js\"></script>\n" +
"<script>\n" +
" BOOMR.init({\n" +
" log: null\n" +
" });\n" +
" BOOMR.addVar(\"requestName\", \"GET /index.html\");\n" +
" BOOMR.addVar(\"serverTime\", 0);\n" +
"</script>", injectArguments.getContentToInjectBeforeClosingBody());
}
}