package net.bytebuddy.test.utility; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; import org.newsclub.net.unix.AFUNIXSocket; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.logging.Logger; public class UnixSocketRule implements MethodRule { private final boolean enabled; public UnixSocketRule() { boolean enabled; try { Class.forName(AFUNIXSocket.class.getName(), true, UnixSocketRule.class.getClassLoader()); enabled = true; } catch (Throwable ignored) { enabled = false; } this.enabled = enabled; } @Override public Statement apply(Statement base, FrameworkMethod method, Object target) { return enabled || method.getAnnotation(Enforce.class) == null ? base : new NoOpStatement(); } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Enforce { } private static class NoOpStatement extends Statement { @Override public void evaluate() throws Throwable { Logger.getLogger("net.bytebuddy").warning("Ignoring use Unix sockets on this VM"); } } }