-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathContainerFactory.java
More file actions
62 lines (51 loc) · 2.58 KB
/
Copy pathContainerFactory.java
File metadata and controls
62 lines (51 loc) · 2.58 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package common.container;
import dasniko.testcontainers.keycloak.KeycloakContainer;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.testcontainers.containers.KafkaContainer;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.utility.DockerImageName;
/**
* Factory class that holds and provides containers used for testing with Testcontainers.
*/
public final class ContainerFactory {
private ContainerFactory() {}
public static KeycloakContainer keycloakContainer(DynamicPropertyRegistry registry) {
KeycloakContainer keycloak = new KeycloakContainer()
.withRealmImportFiles("/test-realm.json")
.withReuse(true);
registry.add(
"spring.security.oauth2.resourceserver.jwt.issuer-uri",
() -> "%s%s".formatted(keycloak.getAuthServerUrl(), "/realms/quarkus")
);
registry.add(
"spring.security.oauth2.resourceserver.jwt.jwk-set-uri",
() -> "%s%s".formatted(keycloak.getAuthServerUrl(), "/realms/quarkus/protocol/openid-connect/certs")
);
return keycloak;
}
public static KafkaContainer kafkaContainer(DynamicPropertyRegistry registry, String version) {
var kafkaContainer = new KafkaContainer(
DockerImageName.parse("confluentinc/cp-kafka:%s".formatted(version))
);
registry.add("spring.kafka.bootstrap-servers", kafkaContainer::getBootstrapServers);
registry.add("bootstrap.servers", kafkaContainer::getBootstrapServers);
// Consumer properties
registry.add("auto.offset.reset", () -> "earliest");
registry.add("spring.kafka.producer.bootstrap-servers", kafkaContainer::getBootstrapServers);
// Producer properties
registry.add("spring.kafka.consumer.bootstrap-servers", kafkaContainer::getBootstrapServers);
return kafkaContainer;
}
public static PostgreSQLContainer pgvector(DynamicPropertyRegistry registry, String version) {
var image = DockerImageName.parse("pgvector/pgvector:%s".formatted(version))
.asCompatibleSubstituteFor("postgres");
var postgres = new PostgreSQLContainer<>(image);
postgres.start();
registry.add("spring.datasource.url", postgres::getJdbcUrl);
registry.add("spring.datasource.username", postgres::getUsername);
registry.add("spring.datasource.password", postgres::getPassword);
return postgres;
}
}