Skip to content

Commit 58d6bda

Browse files
committed
Implement Cyrus test conainer
1 parent 5323acd commit 58d6bda

File tree

11 files changed

+1351
-0
lines changed

11 files changed

+1351
-0
lines changed

docs/modules/cyrus.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Cyrus
2+
3+
!!! note
4+
This module is INCUBATING. While it is ready for use and operational in the current version of Testcontainers, it is possible that it may receive breaking changes in the future. See [our contributing guidelines](/contributing/#incubating-modules) for more information on our incubating modules policy.
5+
6+
Testcontainers module for [Cyrus Docker Test Server](https://github.com/cyrusimap/cyrus-docker-test-server).
7+
8+
## CyrusContainer usage example
9+
10+
You can start a Cyrus container instance from any Java application by using:
11+
12+
<!--codeinclude-->
13+
[Create a CyrusContainer](../../modules/cyrus/src/test/java/org/testcontainers/cyrus/CyrusContainerTest.java) inside_block:container
14+
<!--/codeinclude-->
15+
16+
The container exposes helpers for:
17+
18+
* protocol endpoints (`IMAP`, `POP3`, `HTTP/JMAP`, `LMTP`, `SIEVE`)
19+
* strict management operations (`exportUser`, `importUser`, `deleteUser`)
20+
* idempotent runtime helpers (`userExists`, `deleteUserIfExists`, `exportUserIfExists`, `createUserIfMissing`)
21+
* startup user seeding (`withSeedEmptyUser`, `withSeedUser`, `withSeedUsers`) with deterministic replace behavior
22+
* official image environment variables (`REFRESH`, `CYRUS_VERSION`, `DEFAULTDOMAIN`, `SERVERNAME`, `RELAYHOST`, `RELAYAUTH`)
23+
24+
## User Builder
25+
26+
Create a default empty user payload with `CyrusUser.builder(...)`:
27+
28+
<!--codeinclude-->
29+
[Build a default Cyrus user](../../modules/cyrus/src/test/java/org/testcontainers/cyrus/CyrusUserTest.java) inside_block:userBuilder
30+
<!--/codeinclude-->
31+
32+
## Startup Seeding
33+
34+
Seed users during container startup:
35+
36+
<!--codeinclude-->
37+
[Seed users at startup](../../modules/cyrus/src/test/java/org/testcontainers/cyrus/CyrusContainerTest.java) inside_block:startupSeeding
38+
<!--/codeinclude-->
39+
40+
When the same user is seeded multiple times, the last declaration wins.
41+
42+
## Runtime User Management
43+
44+
Use strict methods when missing users should fail fast, and idempotent methods when they should not:
45+
46+
* strict: `exportUser`, `importUser`, `deleteUser`
47+
* idempotent: `userExists`, `deleteUserIfExists`, `exportUserIfExists`, `createUserIfMissing`
48+
49+
## Adding this module to your project dependencies
50+
51+
Add the following dependency to your `pom.xml`/`build.gradle` file:
52+
53+
=== "Gradle"
54+
```groovy
55+
testImplementation "org.testcontainers:testcontainers-cyrus:{{latest_version}}"
56+
```
57+
58+
=== "Maven"
59+
```xml
60+
<dependency>
61+
<groupId>org.testcontainers</groupId>
62+
<artifactId>testcontainers-cyrus</artifactId>
63+
<version>{{latest_version}}</version>
64+
<scope>test</scope>
65+
</dependency>
66+
```

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ nav:
8080
- modules/azure.md
8181
- modules/chromadb.md
8282
- modules/consul.md
83+
- modules/cyrus.md
8384
- modules/docker_compose.md
8485
- modules/docker_mcp_gateway.md
8586
- modules/docker_model_runner.md

modules/cyrus/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
description = "Testcontainers :: Cyrus"
2+
3+
dependencies {
4+
api project(':testcontainers')
5+
testImplementation 'com.sun.mail:jakarta.mail:2.0.1'
6+
}

modules/cyrus/hs_err_pid28384.log

Lines changed: 287 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)