package com.navercorp.pinpoint.profiler.instrument; import com.navercorp.pinpoint.common.util.ClassLoaderUtils; import com.navercorp.pinpoint.profiler.util.BytecodeUtils; import com.navercorp.pinpoint.profiler.util.JavaAssistUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import java.util.Collections; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; /** * @author Woonduk Kang(emeroad) */ @RunWith(MockitoJUnitRunner.class) public class BytecodeDumpServiceTest { private final String classInternalName = JavaAssistUtils.javaNameToJvmName("java.lang.String"); @Mock private ASMBytecodeDisassembler disassembler; @InjectMocks private BytecodeDumpService bytecodeDumpService = new ASMBytecodeDumpService(true, true, true, Collections.singletonList(classInternalName)); @InjectMocks private BytecodeDumpService disableBytecodeDumpService = new ASMBytecodeDumpService(false, false, false, Collections.singletonList(classInternalName)); @Test public void dumpBytecode() throws Exception { ClassLoader classLoader = ClassLoaderUtils.getDefaultClassLoader(); byte[] classFile = BytecodeUtils.getClassFile(classLoader, classInternalName); bytecodeDumpService.dumpBytecode("testDump", classInternalName, classFile, classLoader); Mockito.verify(this.disassembler, times(1)).dumpBytecode(classFile); Mockito.verify(this.disassembler, times(1)).dumpVerify(classFile, classLoader); Mockito.verify(this.disassembler, times(1)).dumpASM(classFile); } @Test public void dumpBytecode_disable() throws Exception { ClassLoader classLoader = ClassLoaderUtils.getDefaultClassLoader(); byte[] classFile = BytecodeUtils.getClassFile(classLoader, classInternalName); disableBytecodeDumpService.dumpBytecode("disableTestDump", classInternalName, classFile, classLoader); Mockito.verify(this.disassembler, never()).dumpBytecode(classFile); Mockito.verify(this.disassembler, never()).dumpVerify(classFile, classLoader); Mockito.verify(this.disassembler, never()).dumpASM(classFile); } @Test public void dumpBytecode_filter() throws Exception { ClassLoader classLoader = ClassLoaderUtils.getDefaultClassLoader(); byte[] classFile = BytecodeUtils.getClassFile(classLoader, classInternalName); bytecodeDumpService.dumpBytecode("testDump", "invalidName", classFile, classLoader); Mockito.verify(this.disassembler, never()).dumpBytecode(classFile); Mockito.verify(this.disassembler, never()).dumpVerify(classFile, classLoader); Mockito.verify(this.disassembler, never()).dumpASM(classFile); } }