pact - How to make Netty listen on all interfaces via System property? -
i using https://github.com/dius/pact-jvm/tree/master/pact-jvm-consumer-junit, uses mockserver, uses netty.
the launched netty listens on loopback (netstat -tulpn output:)
tcp 0 0 127.0.0.1:21221 0.0.0.0:* listen 27681/java
, want listen "the outside world". want launched netty accept connections on lan-ip address (192.168.x.y:21221 local address, example), or every incoming connection netty-port (0.0.0.0:21221 local address). framework chain somehow makes netty-configuration, well, far away, when starting application, using system property.
system.setproperty("io.netty.listenaddress", "0.0.0.0");
is somehow possible?
you can achieve requirement placing reverseproxy in front of (pact->mockserver->)netty.
here full example. having reverseproxy, littleproxy used. example uses, mentioned, pact-jvm-consumer-junit, , doing http-calls, htmlunit.
import au.com.dius.pact.consumer.pact; import au.com.dius.pact.consumer.pactproviderrule; import au.com.dius.pact.consumer.pactverification; import au.com.dius.pact.consumer.dsl.pactdslwithprovider; import au.com.dius.pact.model.mockproviderconfig; import au.com.dius.pact.model.pactfragment; import com.gargoylesoftware.htmlunit.page; import com.gargoylesoftware.htmlunit.webclient; import java.io.ioexception; import java.net.inetsocketaddress; import org.junit.assert; import org.junit.rule; import org.junit.test; import org.littleshoot.proxy.chainedproxyadapter; import org.littleshoot.proxy.chainedproxymanager; import org.littleshoot.proxy.httpproxyserver; import org.littleshoot.proxy.impl.defaulthttpproxyserver; public class helloit { private static final string provider_service_path = "/provider-endpoint"; @rule public pactproviderrule pactproviderservicemock = new pactproviderrule("provider-service", this); private final string providerservicereverseproxyurl; private static httpproxyserver createreverseproxy(final mockproviderconfig mockproviderconfig) { final string ip = mockproviderconfig.gethostname(); final int port = mockproviderconfig.getport(); final chainedproxymanager cpm = (httprequest, chainedproxies) -> { final chainedproxyadapter chainedproxy = new chainedproxyadapter() { @override public inetsocketaddress getchainedproxyaddress() { return new inetsocketaddress(ip, port); } }; chainedproxies.add(chainedproxy); }; return defaulthttpproxyserver.bootstrap() .withchainproxymanager(cpm) .withport(0) .withallowlocalonly(false) .withallowrequesttooriginserver(true) .start(); } { /* * pact-mock provider-service listens on loopback only. using reverse proxy interaction * between consumer-service , provider-service on external ip. */ final httpproxyserver providerservicereverseproxy = helloit.createreverseproxy(pactproviderservicemock.getconfig()); this.providerservicereverseproxyurl = "http://<your-external-ip>:" + providerservicereverseproxy.getlistenaddress().getport(); } @pact(consumer = "consumer-service") public pactfragment createfragment(final pactdslwithprovider builder) { return builder .uponreceiving("some request") .path(provider_service_path) .method("get") .willrespondwith() .status(200) .tofragment(); } @test @pactverification public void index() throws ioexception { final page page = new webclient().getpage(this.providerservicereverseproxyurl + provider_service_path); assert.assertequals(200, page.getwebresponse().getstatuscode()); } }
Comments
Post a Comment