-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathSolrTestContainer.java
46 lines (36 loc) · 1.53 KB
/
SolrTestContainer.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package examples.solrboot;
import java.io.IOException;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.testcontainers.containers.SolrContainer;
import org.testcontainers.utility.DockerImageName;
public class SolrTestContainer extends SolrContainer {
private static final String CONNECTION_URL = "http://%s:%d/solr/solr";
private static final DockerImageName IMAGE_NAME = DockerImageName.parse("paulcwarren/solr").asCompatibleSubstituteFor("solr");
private SolrTestContainer() {
super(IMAGE_NAME);
setStartupAttempts(10);
start();
try {
execInContainer("sh", "-c", "solr create_collection -c solr -d /opt/solr/server/solr/configsets/_default/");
} catch (IOException | InterruptedException e) {
throw new RuntimeException("Failed to setup solr container", e);
}
}
public static SolrClient getSolrClient() {
return new HttpSolrClient.Builder(solrUrl()).build();
}
public static String solrUrl() {
return String.format(
CONNECTION_URL,
Singleton.INSTANCE.getContainerIpAddress(),
Singleton.INSTANCE.getMappedPort(SolrContainer.SOLR_PORT));
}
@SuppressWarnings("unused") // Serializable safe singleton usage
protected SolrTestContainer readResolve() {
return Singleton.INSTANCE;
}
private static class Singleton {
private static final SolrTestContainer INSTANCE = new SolrTestContainer();
}
}