Search in sources :

Example 61 with MockRPMService

use of com.newrelic.agent.MockRPMService in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method testWithTransaction_JAVA2614Regression.

@Test
public void testWithTransaction_JAVA2614Regression() throws Exception {
    String appName = "Dude";
    Map<String, Object> config = new HashMap<>();
    config.put(AgentConfigImpl.APP_NAME, appName);
    config.put("custom_insights_events.max_samples_stored", 2);
    config.put("token_timeout", 180);
    HarvestService harvestService = Mockito.mock(HarvestService.class);
    ServiceFactory.setServiceManager(Mockito.mock(ServiceManager.class));
    Mockito.when(ServiceFactory.getServiceManager().getHarvestService()).thenReturn(harvestService);
    TransactionService txService = Mockito.mock(TransactionService.class);
    Mockito.when(ServiceFactory.getServiceManager().getTransactionService()).thenReturn(txService);
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager()).thenReturn(Mockito.mock(RPMServiceManager.class));
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService()).thenReturn(Mockito.mock(RPMService.class));
    Mockito.when(ServiceFactory.getServiceManager().getConfigService()).thenReturn(Mockito.mock(ConfigService.class));
    Mockito.when(ServiceFactory.getServiceManager().getConfigService().getDefaultAgentConfig()).thenReturn(AgentConfigImpl.createAgentConfig(config));
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService().getApplicationName()).thenReturn(appName);
    Transaction transaction = Mockito.mock(Transaction.class);
    Mockito.when(txService.getTransaction(false)).thenReturn(transaction);
    TransactionInsights txInsights = new TransactionInsights(AgentConfigImpl.createAgentConfig(Collections.<String, Object>emptyMap()));
    Mockito.when(transaction.getInsightsData()).thenReturn(txInsights);
    Mockito.when(transaction.getApplicationName()).thenReturn(appName);
    Mockito.when(transaction.isInProgress()).thenReturn(true);
    InsightsServiceImpl insights = new InsightsServiceImpl();
    insights.start();
    insights.recordCustomEvent("everything", ImmutableMap.<String, Object>of("is", 5, "awesome", true, "key1", Whatever.ONE_THING, "key2", Whatever.ANOTHER_THING));
    // JAVA-2614 - null values as recordCustomEvent arguments for eventType or the attribute Map's key/value result
    // in an NPE being thrown. The following five API calls will cause an NPE if we have reintroduced the problem.
    Map<String, String> m;
    m = Collections.singletonMap("key", "value");
    insights.recordCustomEvent(null, m);
    m = Collections.singletonMap(null, null);
    insights.recordCustomEvent("bothNull", m);
    m = Collections.singletonMap("key", null);
    insights.recordCustomEvent("valueNull", m);
    m = Collections.singletonMap(null, "value");
    insights.recordCustomEvent("keyNull", m);
    m = new HashMap<>();
    m.put("goodKey1", "goodValue");
    m.put("goodKey2", null);
    m.put(null, null);
    insights.recordCustomEvent("AllKeyValueCombos", m);
    MockRPMService analyticsData = new MockRPMService();
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService(appName)).thenReturn(analyticsData);
    assertEquals(0, analyticsData.getEvents().size());
    assertEquals(5, txInsights.events.size());
    CustomInsightsEvent customEvent = txInsights.events.poll();
    assertNotNull(customEvent);
    assertEquals(Whatever.ONE_THING.toString(), customEvent.getUserAttributesCopy().get("key1"));
    Writer writer = new StringWriter();
    customEvent.writeJSONString(writer);
    String json = writer.toString();
    assertNotNull(json);
    // JAVA-2614 - through 3.33, attribute values that were not JSON types would cause the Agent
    // to generate invalid JSON. We check for this by attempting to parse the JSON. If an exception
    // occurs in the line below, we have reintroduced the problem and are generating invalid JSON.
    // The assert may be useful, but is really just to ensure the parse actually occurs. N.B.: we
    // need to make the outer JSON look like a JSON object for the GSON parser to accept it.
    json = "{ 'x':" + json + "}";
    Reader reader = new InputStreamReader(new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)));
    assertNotNull(new Gson().fromJson(reader, Object.class));
}
Also used : HarvestService(com.newrelic.agent.HarvestService) TransactionService(com.newrelic.agent.TransactionService) InputStreamReader(java.io.InputStreamReader) HashMap(java.util.HashMap) Reader(java.io.Reader) InputStreamReader(java.io.InputStreamReader) Gson(com.google.gson.Gson) TransactionInsights(com.newrelic.agent.service.analytics.InsightsServiceImpl.TransactionInsights) RPMServiceManager(com.newrelic.agent.RPMServiceManager) CustomInsightsEvent(com.newrelic.agent.model.CustomInsightsEvent) ConfigService(com.newrelic.agent.config.ConfigService) Transaction(com.newrelic.agent.Transaction) StringWriter(java.io.StringWriter) ByteArrayInputStream(java.io.ByteArrayInputStream) MockServiceManager(com.newrelic.agent.MockServiceManager) RPMServiceManager(com.newrelic.agent.RPMServiceManager) ServiceManager(com.newrelic.agent.service.ServiceManager) MockRPMService(com.newrelic.agent.MockRPMService) RPMService(com.newrelic.agent.RPMService) MockRPMService(com.newrelic.agent.MockRPMService) StringWriter(java.io.StringWriter) Writer(java.io.Writer) Test(org.junit.Test)

Example 62 with MockRPMService

use of com.newrelic.agent.MockRPMService in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method testNoTransaction.

@Test
public void testNoTransaction() throws Exception {
    InsightsServiceImpl insights = createService(createConfig(true, 2));
    insights.addHarvestableToService(appName);
    Mockito.verify(txService, Mockito.times(1)).addTransactionListener(insights.transactionListener);
    insights.recordCustomEvent("everything", ImmutableMap.<String, Object>of("is", 5, "awesome", true));
    insights.recordCustomEvent("class", ImmutableMap.<String, Object>of("name", "Foo", "number", 666));
    insights.recordCustomEvent("method", ImmutableMap.of("className", "Foo", "methodName", "getSomething"));
    // Invalid:
    insights.recordCustomEvent("invalid-type", ImmutableMap.<String, Object>of("name", "Foo", "number", 666));
    Map<String, String> m;
    m = Collections.singletonMap("key", "value");
    insights.recordCustomEvent(null, m);
    m = Collections.singletonMap(null, null);
    insights.recordCustomEvent("bothNull", m);
    m = Collections.singletonMap("key", null);
    insights.recordCustomEvent("valueNull", m);
    m = Collections.singletonMap(null, "value");
    insights.recordCustomEvent("keyNull", m);
    m = new HashMap<>();
    m.put("goodKey1", "goodValue");
    m.put("goodKey2", null);
    m.put(null, null);
    insights.recordCustomEvent("AllKeyValueCombos", m);
    MockRPMService analyticsData = new MockRPMService();
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getOrCreateRPMService(appName)).thenReturn(analyticsData);
    insights.harvestHarvestables();
    assertEquals(2, analyticsData.getEvents().size());
    insights.stop();
    Mockito.verify(txService, Mockito.times(1)).removeTransactionListener(insights.transactionListener);
}
Also used : MockRPMService(com.newrelic.agent.MockRPMService) Test(org.junit.Test)

Example 63 with MockRPMService

use of com.newrelic.agent.MockRPMService in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method checkForEvent.

public void checkForEvent() {
    StatsEngine statsEngineForHarvest = ServiceFactory.getStatsService().getStatsEngineForHarvest(EventTestHelper.APP_NAME);
    assertTrue(statsEngineForHarvest.getStats(MetricName.create(MetricNames.SUPPORTABILITY_INSIGHTS_SERVICE_CUSTOMER_SEEN)).hasData());
    assertTrue(statsEngineForHarvest.getStats(MetricName.create(MetricNames.SUPPORTABILITY_INSIGHTS_SERVICE_CUSTOMER_SENT)).hasData());
    assertEquals(1, ((MockRPMService) ServiceFactory.getRPMService()).getEvents().size());
    CustomInsightsEvent customEvent = (CustomInsightsEvent) Iterables.get(((MockRPMService) ServiceFactory.getRPMService()).getEvents(), 0);
    assertEquals("CustomEvent", customEvent.getType());
}
Also used : StatsEngine(com.newrelic.agent.stats.StatsEngine) MockRPMService(com.newrelic.agent.MockRPMService) CustomInsightsEvent(com.newrelic.agent.model.CustomInsightsEvent)

Example 64 with MockRPMService

use of com.newrelic.agent.MockRPMService in project newrelic-java-agent by newrelic.

the class InsightsServiceImplTest method testHighSecurity.

@Test
public void testHighSecurity() throws Exception {
    Map<String, Object> config = createConfig(true, 2);
    config.put(AgentConfigImpl.HIGH_SECURITY, true);
    config.put(AgentConfigImpl.ASYNC_TIMEOUT, 180);
    InsightsServiceImpl insights = createService(config);
    Transaction transaction = Mockito.mock(Transaction.class);
    Mockito.when(ServiceFactory.getTransactionService().getTransaction(false)).thenReturn(transaction);
    TransactionInsights txInsights = new TransactionInsights(AgentConfigImpl.createAgentConfig(Collections.<String, Object>emptyMap()));
    Mockito.when(transaction.getInsightsData()).thenReturn(txInsights);
    Mockito.when(transaction.getApplicationName()).thenReturn(appName);
    Mockito.when(transaction.isInProgress()).thenReturn(true);
    insights.recordCustomEvent("everything", ImmutableMap.<String, Object>of("is", 5, "awesome", true));
    insights.recordCustomEvent("class", ImmutableMap.<String, Object>of("name", "Foo", "number", 666));
    insights.recordCustomEvent("method", ImmutableMap.of("className", "Foo", "methodName", "getSomething"));
    MockRPMService analyticsData = new MockRPMService();
    Mockito.when(ServiceFactory.getServiceManager().getRPMServiceManager().getRPMService(appName)).thenReturn(analyticsData);
    TransactionData transactionData = Mockito.mock(TransactionData.class);
    Mockito.when(transactionData.getApplicationName()).thenReturn(appName);
    Mockito.when(transactionData.getInsightsData()).thenReturn(txInsights);
    insights.transactionListener.dispatcherTransactionFinished(transactionData, null);
    insights.harvestHarvestables();
    assertEquals(0, analyticsData.getEvents().size());
    assertEquals(0, txInsights.events.size());
}
Also used : Transaction(com.newrelic.agent.Transaction) TransactionInsights(com.newrelic.agent.service.analytics.InsightsServiceImpl.TransactionInsights) TransactionData(com.newrelic.agent.TransactionData) MockRPMService(com.newrelic.agent.MockRPMService) Test(org.junit.Test)

Example 65 with MockRPMService

use of com.newrelic.agent.MockRPMService in project newrelic-java-agent by newrelic.

the class RPMConnectionServiceTest method appServerPortAvailable.

@Test
public void appServerPortAvailable() throws Exception {
    ServiceFactory.getEnvironmentService().getEnvironment().setServerPort(666);
    rpmConnectionService.setInitialAppServerPortDelay(0L);
    CountDownLatch latch = new CountDownLatch(1);
    MockRPMService rpmService = new MockRPMService(latch);
    rpmConnectionService.connect(rpmService);
    Assert.assertTrue(latch.await(10, TimeUnit.SECONDS));
}
Also used : CountDownLatch(java.util.concurrent.CountDownLatch) MockRPMService(com.newrelic.agent.MockRPMService) Test(org.junit.Test) AgentConfigFactoryTest(com.newrelic.agent.config.AgentConfigFactoryTest)

Aggregations

MockRPMService (com.newrelic.agent.MockRPMService)97 Test (org.junit.Test)59 MockRPMServiceManager (com.newrelic.agent.MockRPMServiceManager)44 MockServiceManager (com.newrelic.agent.MockServiceManager)39 MockHarvestService (com.newrelic.agent.MockHarvestService)30 HashMap (java.util.HashMap)28 TransactionService (com.newrelic.agent.TransactionService)26 ConfigService (com.newrelic.agent.config.ConfigService)21 MockCoreService (com.newrelic.agent.MockCoreService)20 StatsEngineImpl (com.newrelic.agent.stats.StatsEngineImpl)18 HarvestService (com.newrelic.agent.HarvestService)17 ErrorServiceImpl (com.newrelic.agent.errors.ErrorServiceImpl)17 ThreadService (com.newrelic.agent.ThreadService)15 StatsService (com.newrelic.agent.stats.StatsService)15 TransactionTraceService (com.newrelic.agent.trace.TransactionTraceService)15 OtherRootSqlTracer (com.newrelic.agent.tracers.OtherRootSqlTracer)15 SqlTracer (com.newrelic.agent.tracers.SqlTracer)15 Tracer (com.newrelic.agent.tracers.Tracer)15 BasicRequestRootTracer (com.newrelic.agent.tracers.servlet.BasicRequestRootTracer)15 TransactionData (com.newrelic.agent.TransactionData)14