diff --git a/newrelic-weaver/src/test/java/com/newrelic/weave/weavepackage/WeavePackageManagerTest.java b/newrelic-weaver/src/test/java/com/newrelic/weave/weavepackage/WeavePackageManagerTest.java index 9a088e2321..73d01bc7b0 100644 --- a/newrelic-weaver/src/test/java/com/newrelic/weave/weavepackage/WeavePackageManagerTest.java +++ b/newrelic-weaver/src/test/java/com/newrelic/weave/weavepackage/WeavePackageManagerTest.java @@ -7,6 +7,7 @@ package com.newrelic.weave.weavepackage; +import com.github.benmanes.caffeine.cache.Cache; import com.newrelic.api.agent.weaver.MatchType; import com.newrelic.api.agent.weaver.Weave; import com.newrelic.api.agent.weaver.Weaver; @@ -83,7 +84,7 @@ public void testTwoWeaves() throws IOException { wpm.validPackages.getIfPresent(Thread.currentThread().getContextClassLoader()).values()) { WeaveTestUtils.expectViolations(res); } - Assert.assertEquals(1, wpm.validPackages.asMap().size()); + Assert.assertEquals(1, getCacheSize(wpm.validPackages)); Assert.assertEquals(2, wpm.validPackages.getIfPresent(Thread.currentThread().getContextClassLoader()).size()); Assert.assertNotNull(compositeBytes); @@ -124,8 +125,8 @@ public void testBootstrapWeave() throws IOException { WeaveTestUtils.getClassBytes(targetClassName)); Assert.assertTrue(bsPackage.hasMatcher(targetInternalName, superNames, interfaceNames, Collections.emptySet(), Collections.emptySet(), null)); - Assert.assertEquals(0, wpm.invalidPackages.asMap().size()); - Assert.assertEquals(1, wpm.validPackages.asMap().size()); + Assert.assertEquals(0, getCacheSize(wpm.invalidPackages)); + Assert.assertEquals(1, getCacheSize(wpm.validPackages)); Assert.assertNotNull(wpm.validPackages.getIfPresent(BootstrapLoader.PLACEHOLDER)); Assert.assertNotNull(wpm.validPackages.getIfPresent(BootstrapLoader.PLACEHOLDER).get(bsPackage)); @@ -147,7 +148,7 @@ public void testMaxValidClassLoaders() throws IOException { byte[] compositeBytes = WeaveTestUtils.getClassBytes(className); Assert.assertNotNull(compositeBytes); compositeBytes = wpm.weave(originalClassLoader, internalName, compositeBytes); - Assert.assertEquals(1, wpm.validPackages.asMap().size()); + Assert.assertEquals(1, getCacheSize(wpm.validPackages)); Assert.assertEquals(1, wpm.validPackages.getIfPresent(originalClassLoader).size()); Assert.assertNotNull(compositeBytes); @@ -169,7 +170,7 @@ public void testMaxValidClassLoaders() throws IOException { wpm.weave(cl, "com/newrelic/weave/weavepackage/testclasses/MyOriginalBase", WeaveTestUtils.getClassBytes("com.newrelic.weave.weavepackage.testclasses.MyOriginalBase")); } - Assert.assertTrue(wpm.validPackages.asMap().size() <= WeavePackageManager.MAX_VALID_PACKAGE_CACHE); + Assert.assertTrue(getCacheSize(wpm.validPackages) <= WeavePackageManager.MAX_VALID_PACKAGE_CACHE); // 3) load the original class and a new class with the original classloader and verify they load + weave @@ -187,7 +188,7 @@ public void testMaxValidClassLoaders() throws IOException { byte[] newCompositeBytes = WeaveTestUtils.getClassBytes(newClassName); Assert.assertNotNull(newCompositeBytes); newCompositeBytes = wpm.weave(originalClassLoader, newInternalName, newCompositeBytes); - Assert.assertTrue(wpm.validPackages.asMap().size() <= WeavePackageManager.MAX_VALID_PACKAGE_CACHE); + Assert.assertTrue(getCacheSize(wpm.validPackages) <= WeavePackageManager.MAX_VALID_PACKAGE_CACHE); Assert.assertEquals(1, wpm.validPackages.getIfPresent(originalClassLoader).size()); Assert.assertNotNull(newCompositeBytes); @@ -218,7 +219,7 @@ public void testMaxInvalidClassLoaders() throws IOException { byte[] compositeBytes = WeaveTestUtils.getClassBytes(className); Assert.assertNotNull(compositeBytes); compositeBytes = wpm.weave(originalClassLoader, internalName, compositeBytes); - Assert.assertEquals(1, wpm.invalidPackages.asMap().size()); + Assert.assertEquals(1, getCacheSize(wpm.invalidPackages)); Assert.assertEquals(1, wpm.invalidPackages.getIfPresent(originalClassLoader).size()); Assert.assertNull(compositeBytes); @@ -239,8 +240,7 @@ public void testMaxInvalidClassLoaders() throws IOException { wpm.weave(cl, "com/newrelic/weave/weavepackage/WeavePackageManagerTest$NewNoMatchClass", WeaveTestUtils.getClassBytes("com.newrelic.weave.weavepackage.WeavePackageManagerTest$NewNoMatchClass")); } - wpm.invalidPackages.cleanUp(); - Assert.assertTrue(WeavePackageManager.MAX_INVALID_PACKAGE_CACHE >= wpm.invalidPackages.asMap().size()); + Assert.assertTrue(WeavePackageManager.MAX_INVALID_PACKAGE_CACHE >= getCacheSize(wpm.invalidPackages)); // 3) load with the original classloader again and verify that class loads but doesn't weave (pushes to invalid) compositeBytes = WeaveTestUtils.getClassBytes(className); @@ -270,7 +270,7 @@ public void testWeakClassLoaders() throws IOException { wpm.weave(cl, "com/newrelic/weave/weavepackage/testclasses/MyOriginalBase", WeaveTestUtils.getClassBytes("com.newrelic.weave.weavepackage.testclasses.MyOriginalBase")); } - Assert.assertEquals(numClassLoaders, wpm.validPackages.asMap().size()); + Assert.assertEquals(numClassLoaders, getCacheSize(wpm.validPackages)); for (int i = 0; i < 5; ++i) { System.gc(); @@ -279,7 +279,7 @@ public void testWeakClassLoaders() throws IOException { wpm.weave(cl, "com/newrelic/weave/weavepackage/testclasses/MyOriginalBase", WeaveTestUtils.getClassBytes("com.newrelic.weave.weavepackage.testclasses.MyOriginalBase")); } - Assert.assertTrue(wpm.validPackages.asMap().size() >= numClassLoaders); + Assert.assertTrue(getCacheSize(wpm.validPackages) >= numClassLoaders); classloaders.clear(); for (int i = 0; i < 10; ++i) { @@ -292,7 +292,7 @@ public void testWeakClassLoaders() throws IOException { wpm.validPackages.invalidate(cl); } - Assert.assertTrue(wpm.validPackages.asMap().size() < numClassLoaders); + Assert.assertTrue(getCacheSize(wpm.validPackages) < numClassLoaders); } /** @@ -437,6 +437,12 @@ public void testListener() throws IOException { Assert.assertTrue(expectedInvokeCount == listener.invokeCount); } + private static int getCacheSize(Cache cache) { + // Trigger cache cleanup to evict expired entries. + cache.cleanUp(); + return cache.asMap().size(); + } + private static class TestListener implements WeavePackageLifetimeListener, ClassWeavedListener { public int invokeCount = 0;