From b41064a683f0161b508c7e9747888fa5a1591683 Mon Sep 17 00:00:00 2001 From: John Oliver <1615532+johnoliver@users.noreply.github.com> Date: Mon, 3 Apr 2023 18:14:08 +0100 Subject: [PATCH] Fix NPE when pulling profiler configuration --- .../config/ProfilerConfiguration.java | 2 ++ .../config/ProfilerConfigurationTest.java | 34 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfiguration.java b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfiguration.java index 362aa261d08..76b5d902b67 100644 --- a/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfiguration.java +++ b/agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfiguration.java @@ -56,8 +56,10 @@ public boolean hasBeenConfigured() { @Nullable public abstract String getCollectionPlan(); + @Nullable public abstract String getCpuTriggerConfiguration(); + @Nullable public abstract String getMemoryTriggerConfiguration(); @Nullable diff --git a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfigurationTest.java b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfigurationTest.java index 186f74486c2..0e55c14ca3d 100644 --- a/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfigurationTest.java +++ b/agent/agent-tooling/src/test/java/com/microsoft/applicationinsights/agent/internal/profiler/config/ProfilerConfigurationTest.java @@ -13,14 +13,40 @@ public class ProfilerConfigurationTest { @Test void hasBeenConfiguredDetectsDefaultDate() throws JsonProcessingException { - ObjectMapper mapper = - new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - String configStr = "{\"id\":\"an-id\",\"lastModified\":\"0001-01-01T00:00:00+00:00\",\"enabledLastModified\":\"0001-01-01T00:00:00+00:00\",\"enabled\":true,\"collectionPlan\":\"\",\"cpuTriggerConfiguration\":\"--cpu-threshold 80 --cpu-trigger-profilingDuration 120 --cpu-trigger-cooldown 14400 --cpu-trigger-enabled true\",\"memoryTriggerConfiguration\":\"--memory-threshold 80 --memory-trigger-profilingDuration 120 --memory-trigger-cooldown 14400 --memory-trigger-enabled true\",\"defaultConfiguration\":null,\"agentConcurrency\":0}"; - ProfilerConfiguration config = mapper.readValue(configStr, ProfilerConfiguration.class); + ProfilerConfiguration config = parseConfig(configStr); Assertions.assertFalse(config.hasBeenConfigured()); } + + @Test + void parsingCopesWithNullCpuTriggerConfiguration() throws JsonProcessingException { + String configStr = + "{\"id\":\"an-id\",\"lastModified\":\"0001-01-01T00:00:00+00:00\",\"enabledLastModified\":\"0001-01-01T00:00:00+00:00\",\"enabled\":true,\"collectionPlan\":\"\",\"cpuTriggerConfiguration\":null,\"memoryTriggerConfiguration\":\"--memory-threshold 80 --memory-trigger-profilingDuration 120 --memory-trigger-cooldown 14400 --memory-trigger-enabled true\",\"defaultConfiguration\":null,\"agentConcurrency\":0}"; + + ProfilerConfiguration config = parseConfig(configStr); + + Assertions.assertTrue(config.getCpuTriggerConfiguration() == null); + } + + @Test + void parsingCopesWithNullMemoryTriggerConfiguration() throws JsonProcessingException { + String configStr = + "{\"id\":\"an-id\",\"lastModified\":\"0001-01-01T00:00:00+00:00\",\"enabledLastModified\":\"0001-01-01T00:00:00+00:00\",\"enabled\":true,\"collectionPlan\":\"\",\"cpuTriggerConfiguration\":\"--cpu-threshold 80 --cpu-trigger-profilingDuration 120 --cpu-trigger-cooldown 14400 --cpu-trigger-enabled true\",\"memoryTriggerConfiguration\":null,\"defaultConfiguration\":null,\"agentConcurrency\":0}"; + + ProfilerConfiguration config = parseConfig(configStr); + + Assertions.assertTrue(config.getMemoryTriggerConfiguration() == null); + } + + private static ProfilerConfiguration parseConfig(String configStr) + throws JsonProcessingException { + ObjectMapper mapper = + new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + ProfilerConfiguration config = mapper.readValue(configStr, ProfilerConfiguration.class); + return config; + } }