Skip to content

Commit

Permalink
test: add EventDispatcherSpec
Browse files Browse the repository at this point in the history
  • Loading branch information
linyimin0812 committed Dec 11, 2023
1 parent c6bd146 commit 354bfbe
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package io.github.linyimin0812.profiler.core.container;

import io.github.linyimin0812.profiler.api.EventListener;
import io.github.linyimin0812.profiler.api.event.AtEnterEvent;
import io.github.linyimin0812.profiler.api.event.AtExceptionExitEvent;
import io.github.linyimin0812.profiler.api.event.AtExitEvent;
import io.github.linyimin0812.profiler.api.event.Event;
import org.kohsuke.MetaInfServices;

import java.util.ArrayList;
import java.util.List;

/**
Expand All @@ -12,32 +16,63 @@
**/
@MetaInfServices
public class EventListenerTest implements EventListener {

public static AtEnterEvent atEnterEvent;
public static AtExitEvent atExitEvent;
public static AtExceptionExitEvent atExceptionExitEvent;

@Override
public boolean filter(String className) {
return "org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory".equals(className);
return "org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory".equals(className)
|| "java.net.URLClassLoader".equals(className);
}

@Override
public boolean filter(String methodName, String[] methodTypes) {
if (!"createBean".equals(methodName)) {
if (!"createBean".equals(methodName) && !"findResource".equals(methodName)) {
return false;
}

if (methodTypes == null || methodTypes.length != 3) {
if (methodTypes == null) {
return false;
}

return "java.lang.String".equals(methodTypes[0]) && "org.springframework.beans.factory.support.RootBeanDefinition".equals(methodTypes[1]) && "java.lang.Object[]".equals(methodTypes[2]);
if (methodTypes.length == 3) {
return "java.lang.String".equals(methodTypes[0]) && "org.springframework.beans.factory.support.RootBeanDefinition".equals(methodTypes[1]) && "java.lang.Object[]".equals(methodTypes[2]);
}

if (methodTypes.length == 1) {
return "java.lang.String".equals(methodTypes[0]);
}

return false;

}

@Override
public void onEvent(Event event) {
if (event instanceof AtEnterEvent) {
atEnterEvent = (AtEnterEvent) event;
}

if (event instanceof AtExitEvent) {
atExitEvent = (AtExitEvent) event;
}

if (event instanceof AtExceptionExitEvent) {
atExceptionExitEvent = (AtExceptionExitEvent) event;
}
}

@Override
public List<Event.Type> listen() {
return null;

List<Event.Type> types = new ArrayList<>();
types.add(Event.Type.AT_ENTER);
types.add(Event.Type.AT_EXIT);
types.add(Event.Type.AT_EXCEPTION_EXIT);

return types;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,51 @@
package io.github.linyimin0812.profiler.core.enhance

import io.github.linyimin0812.profiler.core.container.EventListenerTest
import io.github.linyimin0812.profiler.core.container.IocContainer
import spock.lang.Shared
import spock.lang.Specification

/**
* @author linyimin
* */
class EventDispatcherSpec extends Specification {

def "test atEnter"() {
@Shared
EventDispatcher eventDispatcher = new EventDispatcher()

def setupSpec() {
IocContainer.start()
}

def "test atExit"() {
def cleanupSpec() {
try {
IocContainer.stop()
} catch(Exception ignored) {

}
}

def "test atExceptionExit"() {
def "test atEnter and atExit"() {
when:
eventDispatcher.atEnter(URLClassLoader, null, 'findResource', '(Ljava/lang/String;)Ljava/net/URL;', null)
eventDispatcher.atExit(URLClassLoader, null, 'findResource', '(Ljava/lang/String;)Ljava/net/URL;', null, null)

then:
EventListenerTest.atEnterEvent != null
EventListenerTest.atExitEvent != null
EventListenerTest.atExitEvent.invokeId == EventListenerTest.atEnterEvent.invokeId

}

def "test atEnter and atExceptionExit"() {
when:
eventDispatcher.atEnter(URLClassLoader, null, 'findResource', '(Ljava/lang/String;)Ljava/net/URL;', null)
eventDispatcher.atExceptionExit(URLClassLoader, null, 'findResource', '(Ljava/lang/String;)Ljava/net/URL;', null, null)

then:
EventListenerTest.atEnterEvent != null
EventListenerTest.atExceptionExitEvent != null
EventListenerTest.atEnterEvent.invokeId == EventListenerTest.atExceptionExitEvent.invokeId

}
}

0 comments on commit 354bfbe

Please sign in to comment.