簡體   English   中英

使用 testcontainers 模擬數據庫的網絡中斷

[英]simulate network outage for database with testcontainers

我正在嘗試使用 testcontainers 模擬網絡中斷。 我想使用 Socat 容器來公開端口,然后將其關閉,然后再次打開。 我無法做到這一點,因為沒有停頓。

我該如何管理?

這很容易!

您需要 2 個容器,SocatContainer(由 Testcontainers 提供)和您的目標容器。 將它們(Socat 和目標)與網絡連接,請參見此處的示例:
https://github.com/testcontainers/testcontainers-java/blob/bcecd5cd9f9325517fd45db585312df2624315bb/core/src/test/java/org/testcontainers/containers/NetworkTest.java

當您需要模擬中斷時,只需將目標與網絡斷開連接(通過使用您通過DockerClientFactory.instance().client()disconnectFromNetworkCmd獲得的 Docker 客戶DockerClientFactory.instance().client() )。

在您確認中斷處理正確后,使用connectToNetworkCmd將您的目標連接到網絡)。

另一種解決方案是使用 Shopify 的 Toxiproxy:
https://github.com/shopify/toxiproxy 在容器中啟動它(當然還有 Testcontainers ;))並使用他們的 Java 客戶端來應用混沌操作。

最簡單的方法是通過 testcontainers 支持 toxiproxy ( https://www.testcontainers.org/modules/toxiproxy/ )。

從上面的網頁復制粘貼:

E.g. // Create a common docker network so that containers can communicate
@Rule
public Network network = Network.newNetwork();

// the target container - this could be anything
@Rule
public GenericContainer redis = new GenericContainer("redis:5.0.4")
    .withExposedPorts(6379)
    .withNetwork(network);

// Toxiproxy container, which will be used as a TCP proxy
@Rule
public ToxiproxyContainer toxiproxy = new ToxiproxyContainer()
    .withNetwork(network);
// To simulate an outage you do:

final ToxiproxyContainer.ContainerProxy proxy = toxiproxy.getProxy(redis, 6379);
proxy.setConnectionCut(true);

最簡單的方法是通過testcontainers對toxiproxy的支持。 檢查一下: https : //www.testcontainers.org/modules/toxiproxy/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM