mirror of
https://github.com/alibaba/testable-mock.git
synced 2026-08-31 19:58:11 +08:00
79 lines
2.6 KiB
Java
Executable File
79 lines
2.6 KiB
Java
Executable File
package com.alibaba.testable.agent;
|
|
|
|
import com.alibaba.testable.agent.transformer.TestableClassTransformer;
|
|
import com.alibaba.testable.agent.util.GlobalConfig;
|
|
import com.alibaba.testable.core.model.MockScope;
|
|
import com.alibaba.testable.core.util.LogUtil;
|
|
import com.alibaba.ttl.threadpool.agent.TtlAgent;
|
|
|
|
import java.lang.instrument.Instrumentation;
|
|
|
|
/**
|
|
* Agent entry, dynamically modify the byte code of classes under testing
|
|
* @author flin
|
|
*/
|
|
public class PreMain {
|
|
|
|
private static final String AND = "&";
|
|
private static final String USE_THREAD_POOL = "useThreadPool";
|
|
private static final String LOG_LEVEL = "logLevel";
|
|
private static final String LOG_FILE = "logFile";
|
|
private static final String DUMP_PATH = "dumpPath";
|
|
private static final String PKG_PREFIX = "pkgPrefix";
|
|
private static final String MOCK_SCOPE = "mockScope";
|
|
private static final String EQUAL = "=";
|
|
private static boolean enhanceThreadLocal = false;
|
|
|
|
public static void premain(String agentArgs, Instrumentation inst) {
|
|
parseArgs(agentArgs);
|
|
GlobalConfig.setupLogRootPath();
|
|
if (enhanceThreadLocal) {
|
|
// add transmittable thread local transformer
|
|
TtlAgent.premain(agentArgs, inst);
|
|
}
|
|
// add testable mock transformer
|
|
inst.addTransformer(new TestableClassTransformer());
|
|
cleanup();
|
|
}
|
|
|
|
private static void parseArgs(String args) {
|
|
if (args == null) {
|
|
return;
|
|
}
|
|
for (String a : args.split(AND)) {
|
|
int i = a.indexOf(EQUAL);
|
|
if (i > 0) {
|
|
// parameter with key = value
|
|
String k = a.substring(0, i);
|
|
String v = a.substring(i + 1);
|
|
if (k.equals(LOG_LEVEL)) {
|
|
GlobalConfig.setLogLevel(v);
|
|
} else if (k.equals(LOG_FILE)) {
|
|
GlobalConfig.setLogFile(v);
|
|
} else if (k.equals(DUMP_PATH)) {
|
|
GlobalConfig.setDumpPath(v);
|
|
} else if (k.equals(PKG_PREFIX)) {
|
|
GlobalConfig.setPkgPrefix(v);
|
|
} else if (k.equals(MOCK_SCOPE)) {
|
|
GlobalConfig.setDefaultMockScope(MockScope.of(v));
|
|
}
|
|
} else {
|
|
// parameter with single value
|
|
if (a.equals(USE_THREAD_POOL)) {
|
|
enhanceThreadLocal = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void cleanup() {
|
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|
@Override
|
|
public void run() {
|
|
LogUtil.cleanup();
|
|
}
|
|
});
|
|
}
|
|
|
|
}
|