package net.bytebuddy.agent;
import org.junit.AssumptionViolatedException;
import org.junit.Test;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import static org.junit.Assert.fail;
public class AttacherTest {
private static final String FOO = "foo", BAR = "bar", QUX = "qux", BAZ = "baz";
@Test
public void testPseudoAttachment() throws Exception {
PseudoAttacher.ERROR.set(null);
Attacher.main(new String[]{PseudoAttacher.class.getName(), FOO, BAR, "=" + QUX, BAZ});
if (PseudoAttacher.ERROR.get() != null) {
throw new AssertionError(PseudoAttacher.ERROR.get());
}
}
@Test
public void testPseudoAttachmentNoArgument() throws Exception {
PseudoAttacherNoArgument.ERROR.set(null);
Attacher.main(new String[]{PseudoAttacherNoArgument.class.getName(), FOO, BAR, ""});
if (PseudoAttacherNoArgument.ERROR.get() != null) {
throw new AssertionError(PseudoAttacherNoArgument.ERROR.get());
}
}
@Test(expected = UnsupportedOperationException.class)
public void testConstructorThrowsException() throws Exception {
Constructor<?> constructor = Attacher.class.getDeclaredConstructor();
constructor.setAccessible(true);
try {
constructor.newInstance();
fail();
} catch (InvocationTargetException exception) {
throw (Exception) exception.getCause();
}
}
@SuppressWarnings("unused")
public static class PseudoAttacher {
static final ThreadLocal<String> ERROR = new ThreadLocal<String>();
public static PseudoAttacher attach(String processId) {
if (!processId.equals(FOO)) {
ERROR.set("Unexpected process id: " + processId);
}
return new PseudoAttacher();
}
public void loadAgent(String path, String argument) {
if (!path.equals(new File(BAR).getAbsolutePath())) {
ERROR.set("Unexpected file: " + path);
} else if (!argument.equals(QUX + " " + BAZ)) {
ERROR.set("Unexpected argument: " + argument);
}
}
public void detach() {
}
}
@SuppressWarnings("unused")
public static class PseudoAttacherNoArgument {
static final ThreadLocal<String> ERROR = new ThreadLocal<String>();
public static PseudoAttacherNoArgument attach(String processId) {
if (!processId.equals(FOO)) {
ERROR.set("Unexpected process id: " + processId);
}
return new PseudoAttacherNoArgument();
}
public void loadAgent(String path, String argument) {
if (!path.equals(new File(BAR).getAbsolutePath())) {
ERROR.set("Unexpected file: " + path);
} else if (argument != null) {
ERROR.set("Unexpected argument: " + argument);
}
}
public void detach() {
}
}
}