/** * Copyright 2014 SAP AG * * 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.aim.mainagent.probes.builder; import junit.framework.Assert; import org.junit.Test; import org.aim.api.exceptions.InstrumentationException; import org.aim.api.measurement.collector.AbstractDataSource; import org.aim.api.measurement.collector.IDataCollector; import org.aim.artifacts.records.NanoResponseTimeRecord; import org.aim.artifacts.records.ResponseTimeRecord; import org.aim.mainagent.TraceInstrumentor; import org.aim.mainagent.builder.MultiSnippet; import org.aim.mainagent.builder.SnippetProvider; import org.aim.mainagent.probes.IncrementalInstrumentationProbe; public class SnippetProviderTest { public static final String GENERIC_SNIPPET_CONTROL_SEQUENCE = "_GenericProbe_collector = " + AbstractDataSource.class.getName() + ".getDefaultDataSource();"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_1 = "System.out.println(\"BeforeControlSequence\");"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_2 = "_DummyProbe_record = new " + ResponseTimeRecord.class.getName() + "();"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_3 = "_DummyProbe_NanoResponseTimeRecordVariable = new " + NanoResponseTimeRecord.class.getName() + "();"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_4 = "_DummyProbe_record.setOperation(__methodSignature);"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_5 = "_DummyProbe_NanoResponseTimeRecordVariable.setTimeStamp(_GenericProbe_startTime);"; public static final String DUMMY_SNIPPET_CONTROL_SEQUENCE_6 = "System.out.println(\"AfetControlSequence\");"; public static final String INVALID_DUMMY_SNIPPET_CONTROL_SEQUENCE_1 = "System.out.println(testVariable);"; public static final String INVALID_DUMMY_SNIPPET_CONTROL_SEQUENCE_2 = "System.out.println(_InvalidDummyProbe_testVariable_2);"; public static final int GENERIC_SNIPPET_NUM_VARIABLES = 4; public static final int DUMMY_SNIPPET_NUM_VARIABLES = 3; public static final int INVALID_DUMMY_SNIPPET_NUM_VARIABLES = 2; @Test public void testGenericSnippet() throws InstrumentationException { MultiSnippet snippet_1 = SnippetProvider.getInstance().getGenericSnippet(); MultiSnippet snippet_2 = SnippetProvider.getInstance().getGenericSnippet(); Assert.assertEquals(snippet_1, snippet_2); Assert.assertTrue(snippet_1.getBeforePart("test").contains(GENERIC_SNIPPET_CONTROL_SEQUENCE)); Assert.assertTrue(snippet_1.getAfterPart("test").isEmpty()); Assert.assertEquals(snippet_1.getVariables().size(), GENERIC_SNIPPET_NUM_VARIABLES); Assert.assertEquals(snippet_1.getVariables().get("_GenericProbe_startTime"), long.class); Assert.assertEquals(snippet_1.getVariables().get("_GenericProbe_callId"), long.class); Assert.assertEquals(snippet_1.getVariables().get("_GenericProbe_collector"), IDataCollector.class); } @Test public void testDummySnippet() throws InstrumentationException { MultiSnippet snippet = SnippetProvider.getInstance().getSnippet(DummyProbe.class); Assert.assertTrue(snippet.getBeforePart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_1)); Assert.assertTrue(snippet.getBeforePart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_2)); Assert.assertTrue(snippet.getBeforePart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_3)); Assert.assertTrue(snippet.getBeforePart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_4)); Assert.assertTrue(snippet.getBeforePart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_5)); Assert.assertTrue(snippet.getAfterPart("test").contains(DUMMY_SNIPPET_CONTROL_SEQUENCE_6)); Assert.assertEquals(snippet.getVariables().size(), DUMMY_SNIPPET_NUM_VARIABLES); Assert.assertEquals(snippet.getVariables().get("_DummyProbe_testVariable"), int.class); Assert.assertEquals(snippet.getVariables().get("_DummyProbe_record"), ResponseTimeRecord.class); Assert.assertEquals(snippet.getVariables().get("_DummyProbe_NanoResponseTimeRecordVariable"), NanoResponseTimeRecord.class); } @Test public void testConditionalSnippet() throws InstrumentationException { MultiSnippet snippet = SnippetProvider.getInstance().getSnippet(DummyProbe2.class); Assert.assertTrue(snippet.getBeforePart("mymethodReqName").contains("BeforeControlSequence")); Assert.assertFalse(snippet.getBeforePart("mymethodReqName").contains("AnotherControlSequence")); Assert.assertTrue(snippet.getBeforePart("myotherMethodName").contains("AnotherControlSequence")); Assert.assertFalse(snippet.getBeforePart("myotherMethodName").contains("BeforeControlSequence")); Assert.assertTrue(snippet.getBeforePart("invalidMethodName").isEmpty()); Assert.assertTrue(snippet.getAfterPart("mymethodReqName").contains("AfterControlSequence")); Assert.assertFalse(snippet.getAfterPart("mymethodReqName").contains("AfterSecondControlSequence")); Assert.assertTrue(snippet.getAfterPart("myotherMethodName").contains("AfterSecondControlSequence")); Assert.assertFalse(snippet.getAfterPart("myotherMethodName").contains("AfterControlSequence")); Assert.assertTrue(snippet.getAfterPart("invalidMethodName").isEmpty()); } @Test public void testInvalidProbe() throws InstrumentationException { MultiSnippet snippet = SnippetProvider.getInstance().getSnippet(InvalidDummyProbe.class); Assert.assertFalse(snippet.getBeforePart("test").contains(INVALID_DUMMY_SNIPPET_CONTROL_SEQUENCE_1)); Assert.assertTrue(snippet.getAfterPart("test").contains(INVALID_DUMMY_SNIPPET_CONTROL_SEQUENCE_2)); Assert.assertFalse(snippet.getVariables().size() == INVALID_DUMMY_SNIPPET_NUM_VARIABLES); Assert.assertEquals(snippet.getVariables().get("testVariable"), String.class); Assert.assertFalse(snippet.getVariables().containsKey("_DummyProbe_record")); } @Test public void testIncrementalSnippet() throws InstrumentationException { MultiSnippet snippet = SnippetProvider.getInstance().getSnippet(IncrementalInstrumentationProbe.class); Assert.assertTrue(snippet.getBeforePart("test").isEmpty()); Assert.assertTrue(snippet.getAfterPart("test").isEmpty()); Assert.assertFalse(snippet.getIncrementalPart().isEmpty()); Assert.assertEquals(0, snippet.getVariables().size()); Assert.assertTrue(snippet.getIncrementalPart().contains( TraceInstrumentor.class.getName() + ".getInstance().instrumentIncrementally")); Assert.assertTrue(snippet.getIncrementalPart().contains("__clazz.getClass().getName()")); Assert.assertTrue(snippet.getIncrementalPart().contains("__methodSignature")); Assert.assertTrue(snippet.getIncrementalPart().contains("__instDescription")); } }