-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
377 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
.../java/rocks/inspectit/gepard/agent/instrumentation/filling/ClassDiscoveryServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package rocks.inspectit.gepard.agent.instrumentation.filling; | ||
|
||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import rocks.inspectit.gepard.agent.instrumentation.PendingClassesCache; | ||
|
||
import java.lang.instrument.Instrumentation; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.Mockito.*; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class ClassDiscoveryServiceTest { | ||
|
||
@Mock | ||
private Instrumentation instrumentation; | ||
|
||
@Test | ||
void discoveryDoesFillCache() { | ||
Class<?>[] clazz = {getClass()}; | ||
when(instrumentation.getAllLoadedClasses()).thenReturn(clazz); | ||
PendingClassesCache cache = new PendingClassesCache(); | ||
ClassDiscoveryService service = new ClassDiscoveryService(cache, instrumentation); | ||
|
||
service.discoverClasses(); | ||
|
||
assertEquals(1, cache.getSize()); | ||
verify(instrumentation, times(1)).getAllLoadedClasses(); | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
.../java/rocks/inspectit/gepard/agent/instrumentation/filling/ConfigurationReceiverTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package rocks.inspectit.gepard.agent.instrumentation.filling; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.Mockito.*; | ||
|
||
import java.lang.instrument.Instrumentation; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import rocks.inspectit.gepard.agent.instrumentation.PendingClassesCache; | ||
import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; | ||
import rocks.inspectit.gepard.agent.internal.configuration.observer.ConfigurationReceivedEvent; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class ConfigurationReceiverTest { | ||
|
||
@Mock private Instrumentation instrumentation; | ||
|
||
@Test | ||
void receiverDoesFillCache() { | ||
Class<?>[] clazz = {getClass()}; | ||
when(instrumentation.getAllLoadedClasses()).thenReturn(clazz); | ||
PendingClassesCache cache = new PendingClassesCache(); | ||
ConfigurationReceiver receiver = new ConfigurationReceiver(cache, instrumentation); | ||
ConfigurationReceivedEvent event = new ConfigurationReceivedEvent(this, new InspectitConfiguration()); | ||
|
||
receiver.handleConfiguration(event); | ||
|
||
assertEquals(1, cache.getSize()); | ||
verify(instrumentation, times(1)).getAllLoadedClasses(); | ||
} | ||
} |
89 changes: 89 additions & 0 deletions
89
...t/java/rocks/inspectit/gepard/agent/instrumentation/processing/BatchInstrumenterTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
package rocks.inspectit.gepard.agent.instrumentation.processing; | ||
|
||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import rocks.inspectit.gepard.agent.instrumentation.PendingClassesCache; | ||
import rocks.inspectit.gepard.agent.internal.configuration.ConfigurationHolder; | ||
import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; | ||
import rocks.inspectit.gepard.agent.internal.configuration.model.instrumentation.InstrumentationConfiguration; | ||
import rocks.inspectit.gepard.agent.internal.configuration.model.instrumentation.Scope; | ||
import rocks.inspectit.gepard.agent.internal.configuration.observer.ConfigurationReceivedEvent; | ||
|
||
import java.lang.instrument.Instrumentation; | ||
import java.lang.instrument.UnmodifiableClassException; | ||
import java.util.HashSet; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
import java.util.Set; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.Mockito.verify; | ||
import static org.mockito.Mockito.when; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
class BatchInstrumenterTest { | ||
|
||
private final static int BATCH_SIZE = 10; | ||
|
||
private final Class<?> TEST_CLASS = getClass(); | ||
|
||
@Mock | ||
private Instrumentation instrumentation; | ||
|
||
@Mock | ||
private PendingClassesCache cache; | ||
|
||
@Test | ||
void classIsRemovedFromCacheAndNotAddedToBatch() { | ||
Set<Class<?>> classes = new HashSet<>(); | ||
classes.add(TEST_CLASS); | ||
when(cache.getKeyIterator()).thenReturn(classes.iterator()); | ||
BatchInstrumenter instrumenter = new BatchInstrumenter(cache, instrumentation); | ||
|
||
Set<Class<?>> classesToBeInstrumented = instrumenter.getNextBatch(BATCH_SIZE); | ||
|
||
assertEquals(0, classesToBeInstrumented.size()); | ||
assertEquals(0, classes.size()); | ||
} | ||
|
||
@Test | ||
void classIsRemovedFromCacheAndAddedToBatch() { | ||
updateConfigurationHolder(); | ||
Set<Class<?>> classes = new HashSet<>(); | ||
classes.add(TEST_CLASS); | ||
when(cache.getKeyIterator()).thenReturn(classes.iterator()); | ||
BatchInstrumenter instrumenter = new BatchInstrumenter(cache, instrumentation); | ||
|
||
Set<Class<?>> classesToBeInstrumented = instrumenter.getNextBatch(BATCH_SIZE); | ||
|
||
assertEquals(1, classesToBeInstrumented.size()); | ||
assertEquals(0, classes.size()); | ||
} | ||
|
||
@Test | ||
void classIsRetransformed() throws UnmodifiableClassException { | ||
Set<Class<?>> classes = new HashSet<>(); | ||
classes.add(TEST_CLASS); | ||
BatchInstrumenter instrumenter = new BatchInstrumenter(cache, instrumentation); | ||
|
||
instrumenter.retransformBatch(classes.iterator()); | ||
|
||
verify(instrumentation).retransformClasses(TEST_CLASS); | ||
} | ||
|
||
/** | ||
* Updates the current {@link InspectitConfiguration} | ||
*/ | ||
private void updateConfigurationHolder() { | ||
Scope scope = new Scope(TEST_CLASS.getName(), true); | ||
InstrumentationConfiguration instrumentationConfiguration = | ||
new InstrumentationConfiguration(List.of(scope)); | ||
InspectitConfiguration configuration = new InspectitConfiguration(instrumentationConfiguration); | ||
|
||
ConfigurationHolder holder = ConfigurationHolder.getInstance(); | ||
ConfigurationReceivedEvent event = new ConfigurationReceivedEvent(this, configuration); | ||
holder.handleConfiguration(event); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
...pectit/gepard/agent/internal/configuration/observer/ConfigurationReceivedSubjectTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package rocks.inspectit.gepard.agent.internal.configuration.observer; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import java.util.concurrent.atomic.AtomicBoolean; | ||
import org.junit.jupiter.api.Test; | ||
import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; | ||
|
||
class ConfigurationReceivedSubjectTest { | ||
|
||
@Test | ||
void listenersAreNotified() { | ||
AtomicBoolean wasNotified = new AtomicBoolean(false); | ||
|
||
ConfigurationReceivedObserver observer = (event) -> wasNotified.set(true); | ||
observer.subscribeToConfigurationReceivedEvents(); | ||
|
||
ConfigurationReceivedSubject subject = ConfigurationReceivedSubject.getInstance(); | ||
subject.notifyListeners(new InspectitConfiguration()); | ||
|
||
assertTrue(wasNotified.get()); | ||
} | ||
} |
Oops, something went wrong.