diff options
Diffstat (limited to 'dexmaker-mockito-inline-tests/src')
2 files changed, 26 insertions, 39 deletions
diff --git a/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/MultipleJvmtiAgentsInterference.java b/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/MultipleJvmtiAgentsInterference.java index 9231202..bdc0626 100644 --- a/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/MultipleJvmtiAgentsInterference.java +++ b/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/MultipleJvmtiAgentsInterference.java @@ -17,27 +17,18 @@ package com.android.dx.mockito.inline.tests; import android.os.Build; +import android.os.Debug; +import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; - -import dalvik.system.BaseDexClassLoader; - import static org.junit.Assert.assertNull; import static org.junit.Assume.assumeTrue; import static org.mockito.Mockito.mock; -@Ignore("Leaving the transformation hook enabled causes a lot of unnecessary transformations. " + - "This is too expensive. Hence for now, we cannot support multiple agents") public class MultipleJvmtiAgentsInterference { - private static final String AGENT_LIB_NAME = "multiplejvmtiagentsinterferenceagent"; + private static final String AGENT_LIB_NAME = "libmultiplejvmtiagentsinterferenceagent.so"; public class TestClass { public String returnA() { @@ -50,29 +41,8 @@ public class MultipleJvmtiAgentsInterference { // TODO (moltmann@google.com): Replace with proper check for >= P assumeTrue(Build.VERSION.CODENAME.equals("P")); - // Currently Debug.attachJvmtiAgent requires a file in the right directory - File copiedAgent = File.createTempFile("testagent", ".so"); - copiedAgent.deleteOnExit(); - - try (InputStream is = new FileInputStream(((BaseDexClassLoader) - MultipleJvmtiAgentsInterference.class.getClassLoader()).findLibrary - (AGENT_LIB_NAME))) { - try (OutputStream os = new FileOutputStream(copiedAgent)) { - byte[] buffer = new byte[64 * 1024]; - - while (true) { - int numRead = is.read(buffer); - if (numRead == -1) { - break; - } - os.write(buffer, 0, numRead); - } - } - } - - // TODO (moltmann@google.com): Replace with regular method call once the API becomes public - Class.forName("android.os.Debug").getMethod("attachJvmtiAgent", String.class, String - .class).invoke(null, copiedAgent.getAbsolutePath(), null); + Debug.attachJvmtiAgent(AGENT_LIB_NAME, null, + MultipleJvmtiAgentsInterference.class.getClassLoader()); } @Test @@ -90,5 +60,11 @@ public class MultipleJvmtiAgentsInterference { assertNull(t.returnA()); } + @AfterClass + public static void DisableRetransfromHook() { + disableRetransformHook(); + } + private native int nativeRetransformClasses(Class<?>[] classes); + private static native int disableRetransformHook(); } diff --git a/dexmaker-mockito-inline-tests/src/main/jni/multiplejvmtiagentsinterferenceagent/agent.cc b/dexmaker-mockito-inline-tests/src/main/jni/multiplejvmtiagentsinterferenceagent/agent.cc index a293fe7..b1c5455 100644 --- a/dexmaker-mockito-inline-tests/src/main/jni/multiplejvmtiagentsinterferenceagent/agent.cc +++ b/dexmaker-mockito-inline-tests/src/main/jni/multiplejvmtiagentsinterferenceagent/agent.cc @@ -22,9 +22,9 @@ #include "jvmti.h" -#include <dex_ir.h> -#include <writer.h> -#include <reader.h> +#include <slicer/dex_ir.h> +#include <slicer/writer.h> +#include <slicer/reader.h> using namespace dex; @@ -148,4 +148,15 @@ namespace com_android_dx_mockito_inline_tests { return error; } -}
\ No newline at end of file + + // Disable hook to not slow down test + extern "C" JNIEXPORT jint JNICALL + Java_com_android_dx_mockito_inline_tests_MultipleJvmtiAgentsInterference_disableRetransformHook( + JNIEnv *env, + jclass ignored) { + return localJvmtiEnv->SetEventNotificationMode(JVMTI_DISABLE, + JVMTI_EVENT_CLASS_FILE_LOAD_HOOK, + NULL); + + } +} |