|
| 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 | + ``` |
0 commit comments