testcontainers-java
78 строк · 2.8 Кб
1package org.testcontainers.junit;
2
3import lombok.Cleanup;
4import org.junit.BeforeClass;
5import org.junit.Rule;
6import org.junit.Test;
7import org.testcontainers.containers.NginxContainer;
8import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
9import org.testcontainers.utility.DockerImageName;
10import org.testcontainers.utility.MountableFile;
11
12import java.io.BufferedReader;
13import java.io.File;
14import java.io.FileOutputStream;
15import java.io.IOException;
16import java.io.InputStreamReader;
17import java.io.PrintStream;
18import java.net.URL;
19import java.net.URLConnection;
20
21import static org.assertj.core.api.Assertions.assertThat;
22
23public class SimpleNginxTest {
24
25private static final DockerImageName NGINX_IMAGE = DockerImageName.parse("nginx:1.27.0-alpine3.19-slim");
26
27private static String tmpDirectory = System.getProperty("user.home") + "/.tmp-test-container";
28
29// creatingContainer {
30@Rule
31public NginxContainer<?> nginx = new NginxContainer<>(NGINX_IMAGE)
32.withCopyFileToContainer(MountableFile.forHostPath(tmpDirectory), "/usr/share/nginx/html")
33.waitingFor(new HttpWaitStrategy());
34
35// }
36
37@SuppressWarnings({ "Duplicates", "ResultOfMethodCallIgnored" })
38@BeforeClass
39public static void setupContent() throws Exception {
40// addCustomContent {
41// Create a temporary dir
42File contentFolder = new File(tmpDirectory);
43contentFolder.mkdir();
44contentFolder.deleteOnExit();
45
46// And "hello world" HTTP file
47File indexFile = new File(contentFolder, "index.html");
48indexFile.deleteOnExit();
49@Cleanup
50PrintStream printStream = new PrintStream(new FileOutputStream(indexFile));
51printStream.println("<html><body>Hello World!</body></html>");
52// }
53}
54
55@Test
56public void testSimple() throws Exception {
57// getFromNginxServer {
58URL baseUrl = nginx.getBaseUrl("http", 80);
59
60assertThat(responseFromNginx(baseUrl))
61.as("An HTTP GET from the Nginx server returns the index.html from the custom content directory")
62.contains("Hello World!");
63// }
64assertHasCorrectExposedAndLivenessCheckPorts(nginx);
65}
66
67private void assertHasCorrectExposedAndLivenessCheckPorts(NginxContainer<?> nginxContainer) throws Exception {
68assertThat(nginxContainer.getExposedPorts()).containsExactly(80);
69assertThat(nginxContainer.getLivenessCheckPortNumbers()).containsExactly(nginxContainer.getMappedPort(80));
70}
71
72private static String responseFromNginx(URL baseUrl) throws IOException {
73URLConnection urlConnection = baseUrl.openConnection();
74@Cleanup
75BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
76return reader.readLine();
77}
78}
79