-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1453 from michalvavrik/3.2-infinispan
[3.2] Fix InfinispanKafkaSaslIT by proxying localhost port to Docker host as certs are generated for localhost
- Loading branch information
Showing
4 changed files
with
147 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
...quarkus/ts/messaging/infinispan/grpc/kafka/LocalHostInfinispanManagedResourceBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package io.quarkus.ts.messaging.infinispan.grpc.kafka; | ||
|
||
import static io.quarkus.ts.messaging.infinispan.grpc.kafka.LocalHostManagedResourceUtil.wrapWithLocalhostManagedResource; | ||
|
||
import io.quarkus.test.bootstrap.ManagedResource; | ||
import io.quarkus.test.bootstrap.ServiceContext; | ||
import io.quarkus.test.services.containers.ContainerManagedResourceBuilder; | ||
|
||
public class LocalHostInfinispanManagedResourceBuilder extends ContainerManagedResourceBuilder { | ||
@Override | ||
public ManagedResource build(ServiceContext context) { | ||
return wrapWithLocalhostManagedResource(super.build(context)); | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
...kus/ts/messaging/infinispan/grpc/kafka/LocalHostKafkaContainerManagedResourceBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package io.quarkus.ts.messaging.infinispan.grpc.kafka; | ||
|
||
import static io.quarkus.ts.messaging.infinispan.grpc.kafka.LocalHostManagedResourceUtil.wrapWithLocalhostManagedResource; | ||
|
||
import io.quarkus.test.bootstrap.ManagedResource; | ||
import io.quarkus.test.bootstrap.ServiceContext; | ||
import io.quarkus.test.services.containers.KafkaContainerManagedResourceBuilder; | ||
|
||
public class LocalHostKafkaContainerManagedResourceBuilder extends KafkaContainerManagedResourceBuilder { | ||
@Override | ||
public ManagedResource build(ServiceContext context) { | ||
return wrapWithLocalhostManagedResource(super.build(context)); | ||
} | ||
} |
117 changes: 117 additions & 0 deletions
117
...test/java/io/quarkus/ts/messaging/infinispan/grpc/kafka/LocalHostManagedResourceUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
package io.quarkus.ts.messaging.infinispan.grpc.kafka; | ||
|
||
import java.io.IOException; | ||
import java.util.List; | ||
|
||
import org.junit.jupiter.api.condition.OS; | ||
|
||
import io.quarkus.test.bootstrap.ManagedResource; | ||
import io.quarkus.test.bootstrap.Protocol; | ||
import io.quarkus.test.services.URILike; | ||
import io.quarkus.test.utils.Command; | ||
|
||
class LocalHostManagedResourceUtil { | ||
|
||
/** | ||
* Our Linux bare-metal instances use Docker on localhost. | ||
*/ | ||
private static final boolean forwardPort = OS.current() == OS.WINDOWS; | ||
|
||
/** | ||
* Forward Docker ports from localhost to Docker host on Windows. This works around issue when | ||
* certificates are only generated for localhost. | ||
*/ | ||
static ManagedResource wrapWithLocalhostManagedResource(ManagedResource delegate) { | ||
return new ManagedResource() { | ||
|
||
@Override | ||
public String getDisplayName() { | ||
return delegate.getDisplayName(); | ||
} | ||
|
||
@Override | ||
public void stop() { | ||
if (forwardPort) { | ||
try { | ||
// stop port proxy | ||
new Command("netsh", "interface", "portproxy", "delete", "v4tov4", | ||
"listenport=" + getExposedPort(), "listenaddress=127.0.0.1").runAndWait(); | ||
} catch (IOException | InterruptedException e) { | ||
throw new RuntimeException( | ||
"Failed delete port proxy for Infinispan container port " + getExposedPort(), e); | ||
} | ||
} | ||
delegate.stop(); | ||
} | ||
|
||
@Override | ||
public void start() { | ||
delegate.start(); | ||
if (forwardPort) { | ||
try { | ||
// forward localhost:somePort to dockerIp:somePort | ||
new Command("netsh", "interface", "portproxy", "add", "v4tov4", "listenport=" + getExposedPort(), | ||
"listenaddress=127.0.0.1", "connectport=" + getExposedPort(), | ||
"connectaddress=" + getDockerHost()).runAndWait(); | ||
} catch (IOException | InterruptedException e) { | ||
throw new RuntimeException( | ||
"Failed to setup forwarding for Infinispan container port " + getExposedPort(), e); | ||
} | ||
} | ||
} | ||
|
||
@Override | ||
public URILike getURI(Protocol protocol) { | ||
var uriLike = delegate.getURI(protocol); | ||
if (forwardPort) { | ||
// replace Docker IP with local host | ||
uriLike = new URILike(uriLike.getScheme(), "localhost", uriLike.getPort(), uriLike.getPath()); | ||
} | ||
return uriLike; | ||
} | ||
|
||
private String getDockerHost() { | ||
return delegate.getURI(Protocol.NONE).getHost(); | ||
} | ||
|
||
private int getExposedPort() { | ||
return delegate.getURI(Protocol.NONE).getPort(); | ||
} | ||
|
||
@Override | ||
public boolean isRunning() { | ||
return delegate.isRunning(); | ||
} | ||
|
||
@Override | ||
public boolean isFailed() { | ||
return delegate.isFailed(); | ||
} | ||
|
||
@Override | ||
public List<String> logs() { | ||
return delegate.logs(); | ||
} | ||
|
||
@Override | ||
public void restart() { | ||
delegate.restart(); | ||
} | ||
|
||
@Override | ||
public void validate() { | ||
delegate.validate(); | ||
} | ||
|
||
@Override | ||
public void afterStart() { | ||
delegate.afterStart(); | ||
} | ||
|
||
@Override | ||
public URILike createURI(String scheme, String host, int port) { | ||
return delegate.createURI(scheme, host, port); | ||
} | ||
}; | ||
} | ||
} |