/** * {@inheritDoc} */ @Override public void run() { // never do any transformation with this thread threadTransformHelper.setThreadTransformDisabled(true); super.run(); };
boolean threadTransformDisabled = threadTransformHelper.isThreadTransformDisabled(); if (threadTransformDisabled) { threadTransformHelper.setThreadTransformDisabled(true); } finally { threadTransformHelper.setThreadTransformDisabled(false);
/** * {@inheritDoc} */ @Override public void run() { // never do any transformation with this thread threadTransformHelper.setThreadTransformDisabled(true); super.run(); };
threadTransformHelper.setThreadTransformDisabled(false); instrumentation.retransformClasses(classesToRetransform.toArray(new Class[classesToRetransform.size()])); } catch (Exception e) { threadTransformHelper.setThreadTransformDisabled(true);
@Test @SuppressWarnings("unchecked") public void instrumentationThrowsOneException() throws UnmodifiableClassException { InstrumentationDefinition iDefinition = mock(InstrumentationDefinition.class); when(iDefinition.getClassName()).thenReturn("java.lang.Object"); IAgentMessage<?> message = new UpdatedInstrumentationMessage(); ((UpdatedInstrumentationMessage) message).getMessageContent().add(iDefinition); AgentMessagesReceivedEvent event = new AgentMessagesReceivedEvent(eventSource, Arrays.<IAgentMessage<?>> asList(message)); when(instrumentation.getAllLoadedClasses()).thenReturn(new Class[] { Object.class, String.class }); when(instrumentation.isModifiableClass(any(Class.class))).thenReturn(true).thenThrow(RuntimeException.class); when(agent.isUsingRetransformation()).thenReturn(true); retransformManager.onApplicationEvent(event); verify(classHashHelper).registerInstrumentationDefinition(eq("java.lang.Object"), eq(iDefinition)); verify(instrumentation).getAllLoadedClasses(); verify(instrumentation).retransformClasses(eq(Object.class)); verify(instrumentation, times(2)).isModifiableClass(any(Class.class)); InOrder inOrder = inOrder(threadTransformHelper); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(false); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(true); verifyNoMoreInteractions(instrumentation, classHashHelper, threadTransformHelper); }
@Test public void retransformationThrowsException() throws UnmodifiableClassException { InstrumentationDefinition iDefinition = mock(InstrumentationDefinition.class); when(iDefinition.getClassName()).thenReturn("java.lang.Object"); IAgentMessage<?> message = new UpdatedInstrumentationMessage(); ((UpdatedInstrumentationMessage) message).getMessageContent().add(iDefinition); AgentMessagesReceivedEvent event = new AgentMessagesReceivedEvent(eventSource, Arrays.<IAgentMessage<?>> asList(message)); when(instrumentation.getAllLoadedClasses()).thenReturn(new Class[] { Object.class, String.class }); doThrow(Exception.class).when(instrumentation).retransformClasses(any(Class.class)); when(instrumentation.isModifiableClass(Matchers.<Class<?>> any())).thenReturn(true); when(agent.isUsingRetransformation()).thenReturn(true); retransformManager.onApplicationEvent(event); verify(classHashHelper).registerInstrumentationDefinition(eq("java.lang.Object"), eq(iDefinition)); verify(instrumentation).getAllLoadedClasses(); verify(instrumentation).retransformClasses(any(Class.class)); verify(instrumentation, times(2)).isModifiableClass(any(Class.class)); InOrder inOrder = inOrder(threadTransformHelper); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(false); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(true); verifyNoMoreInteractions(instrumentation, classHashHelper); verifyZeroInteractions(threadTransformHelper); }
@Test public void successful() throws UnmodifiableClassException { InstrumentationDefinition objectDefinition = mock(InstrumentationDefinition.class); when(objectDefinition.getClassName()).thenReturn("java.lang.Object"); InstrumentationDefinition stringDefinition = mock(InstrumentationDefinition.class); when(stringDefinition.getClassName()).thenReturn("java.lang.String"); IAgentMessage<?> message = new UpdatedInstrumentationMessage(); ((UpdatedInstrumentationMessage) message).getMessageContent().add(objectDefinition); ((UpdatedInstrumentationMessage) message).getMessageContent().add(stringDefinition); AgentMessagesReceivedEvent event = new AgentMessagesReceivedEvent(eventSource, Arrays.<IAgentMessage<?>> asList(message)); when(instrumentation.getAllLoadedClasses()).thenReturn(new Class[] { Object.class, String.class }); when(instrumentation.isModifiableClass(any(Class.class))).thenReturn(true); when(agent.isUsingRetransformation()).thenReturn(true); retransformManager.onApplicationEvent(event); verify(classHashHelper).registerInstrumentationDefinition(eq("java.lang.Object"), eq(objectDefinition)); verify(classHashHelper).registerInstrumentationDefinition(eq("java.lang.String"), eq(stringDefinition)); verify(instrumentation).getAllLoadedClasses(); verify(instrumentation).retransformClasses(eq(Object.class), eq(String.class)); verify(instrumentation, times(2)).isModifiableClass(any(Class.class)); verify(agent).isUsingRetransformation(); InOrder inOrder = inOrder(threadTransformHelper); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(false); inOrder.verify(threadTransformHelper).setThreadTransformDisabled(true); verifyNoMoreInteractions(instrumentation, classHashHelper, threadTransformHelper, agent); }