SocketImpl и JUnit / Gradle - PullRequest
       6

SocketImpl и JUnit / Gradle

0 голосов
/ 11 апреля 2020

Я пытаюсь заставить Socks v4 работать из коробки в java. net, и, похоже, мне это удалось! Обычно я использую следующий код:

    class SocketImplFactorySocks4 implements SocketImplFactory {
        @Override
        public SocketImpl createSocketImpl() {
            System.out.println("Socket implementation triggered");
            try {
                return socketSocks4Factory();
            } catch (Exception e) {
                e.printStackTrace();
                throw new Error("Can't go further");
            }
        }

        private SocketImpl socketSocks4Factory() throws
                [...] {
            Class<?> aClass = Class.forName("java.net.SocksSocketImpl");
            Constructor<?> cons = aClass.getDeclaredConstructor();
            if (!cons.isAccessible())
                cons.setAccessible(true);
            Object socket = cons.newInstance();
            Method method = socket.getClass().getDeclaredMethod("setV4");
            if (!method.isAccessible())
                method.setAccessible(true);
            method.invoke(socket);
            Field field = socket.getClass().getDeclaredField("useV4");
            field.setAccessible(true);
            Object value = field.get(socket);
            return (SocketImpl) socket;
        }

    }

Короче говоря, он работает, когда я создаю сокет и передаю -DsocksProxyHost и -DsocksProxyPort.

Моя проблема заключается в том, что я используйте тот же код в моем тесте junit, я могу проверить с помощью Reflections, что Socket.impl.useV4 имеет значение true, настройки socksProxy * установлены в масштабе всей системы, но когда я использую свой сокет, он вообще не использует прокси (я вижу это в wireshark).

Это либо JUnit, либо Gradle, но я достиг своих пределов. Пожалуйста, совет, где я должен go дальше. build.gradle.kts для справки:

tasks{
    test{
        systemProperty("socksProxyHost", "localhost")
        systemProperty("socksProxyPort", "8080")
    }
}

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...