Toxiproxy
Install
| npm install @testcontainers/toxiproxy --save-dev
|
Examples
These examples use the following libraries:
Choose an image from the container registry and substitute IMAGE
.
Create a proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | await using network = await new Network().start();
await using _ = await new GenericContainer("cristianrgreco/testcontainer:1.1.14")
.withExposedPorts(8080)
.withNetwork(network)
.withNetworkAliases("app")
.start();
await using toxiproxyContainer = await new ToxiProxyContainer(IMAGE).withNetwork(network).start();
const appProxy = await toxiproxyContainer.createProxy({
name: "app",
upstream: "app:8080",
});
const response = await fetch(`http://${appProxy.host}:${appProxy.port}/hello-world`);
expect(response.status).toBe(200);
|
Add a toxic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | await using network = await new Network().start();
await using _ = await new GenericContainer("cristianrgreco/testcontainer:1.1.14")
.withExposedPorts(8080)
.withNetwork(network)
.withNetworkAliases("app")
.start();
await using toxiproxyContainer = await new ToxiProxyContainer(IMAGE).withNetwork(network).start();
const appProxy = await toxiproxyContainer.createProxy({
name: "app",
upstream: "app:8080",
});
const toxic = await appProxy.instance.addToxic<TPClient.Latency>({
attributes: {
jitter: 50,
latency: 1500,
},
name: "upstream-latency",
stream: "upstream",
toxicity: 1, // 1 is 100%
type: "latency",
});
const before = Date.now();
await fetch(`http://${appProxy.host}:${appProxy.port}/hello-world`);
const after = Date.now();
expect(after - before).toBeGreaterThan(1000);
await toxic.remove();
|
Enable/disable the proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | await using network = await new Network().start();
await using _ = await new GenericContainer("cristianrgreco/testcontainer:1.1.14")
.withExposedPorts(8080)
.withNetwork(network)
.withNetworkAliases("app")
.start();
await using toxiproxyContainer = await new ToxiProxyContainer(IMAGE).withNetwork(network).start();
const appProxy = await toxiproxyContainer.createProxy({
name: "app",
upstream: "app:8080",
});
await appProxy.setEnabled(false);
await expect(fetch(`http://${appProxy.host}:${appProxy.port}/hello-world`)).rejects.toThrow();
await appProxy.setEnabled(true);
const response = await fetch(`http://${appProxy.host}:${appProxy.port}/hello-world`);
expect(response.status).toBe(200);
|