Skip to content

Commit 7bedef7

Browse files
authored
Add OpenFGA module (#8371)
Fixes #8367
1 parent ef43682 commit 7bedef7

File tree

12 files changed

+160
-0
lines changed

12 files changed

+160
-0
lines changed

.github/ISSUE_TEMPLATE/bug_report.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ body:
4141
- MySQL
4242
- Neo4j
4343
- NGINX
44+
- OpenFGA
4445
- Oracle Free
4546
- Oracle XE
4647
- OrientDB

.github/ISSUE_TEMPLATE/enhancement.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ body:
4141
- MySQL
4242
- Neo4j
4343
- NGINX
44+
- OpenFGA
4445
- Oracle Free
4546
- Oracle XE
4647
- OrientDB

.github/ISSUE_TEMPLATE/feature.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ body:
4141
- MySQL
4242
- Neo4j
4343
- NGINX
44+
- OpenFGA
4445
- Oracle Free
4546
- Oracle XE
4647
- OrientDB

.github/dependabot.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ updates:
211211
schedule:
212212
interval: "weekly"
213213
open-pull-requests-limit: 10
214+
- package-ecosystem: "gradle"
215+
directory: "/modules/openfga"
216+
schedule:
217+
interval: "weekly"
214218
- package-ecosystem: "gradle"
215219
directory: "/modules/oracle-free"
216220
schedule:

.github/labeler.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@
131131
- changed-files:
132132
- any-glob-to-any-file:
133133
- modules/nginx/**/*
134+
"modules/openfga":
135+
- changed-files:
136+
- any-glob-to-any-file:
137+
- modules/openfga/**/*
134138
"modules/oracle":
135139
- changed-files:
136140
- any-glob-to-any-file:

.github/settings.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ labels:
190190
- name: modules/nginx
191191
color: '#006b75'
192192

193+
- name: modules/openfga
194+
color: '#006b75'
195+
193196
- name: modules/oracle
194197
color: '#006b75'
195198

docs/modules/openfga.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# OpenFGA
2+
3+
Testcontainers module for [OpenFGA](https://hub.docker.com/r/"openfga/openfga).
4+
5+
## OpenFGAContainer's usage examples
6+
7+
You can start an OpenFGA container instance from any Java application by using:
8+
9+
<!--codeinclude-->
10+
[OpenFGA container](../../modules/openfga/src/test/java/org/testcontainers/openfga/OpenFGAContainerTest.java) inside_block:container
11+
<!--/codeinclude-->
12+
13+
## Adding this module to your project dependencies
14+
15+
Add the following dependency to your `pom.xml`/`build.gradle` file:
16+
17+
=== "Gradle"
18+
```groovy
19+
testImplementation "org.testcontainers:openfga:{{latest_version}}"
20+
```
21+
22+
=== "Maven"
23+
```xml
24+
<dependency>
25+
<groupId>org.testcontainers</groupId>
26+
<artifactId>openfga</artifactId>
27+
<version>{{latest_version}}</version>
28+
<scope>test</scope>
29+
</dependency>
30+
```

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ nav:
8888
- modules/minio.md
8989
- modules/mockserver.md
9090
- modules/nginx.md
91+
- modules/openfga.md
9192
- modules/pulsar.md
9293
- modules/qdrant.md
9394
- modules/rabbitmq.md

modules/openfga/build.gradle

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
description = "Testcontainers :: OpenFGA"
2+
3+
dependencies {
4+
api project(':testcontainers')
5+
6+
testImplementation 'org.assertj:assertj-core:3.25.1'
7+
testImplementation 'dev.openfga:openfga-sdk:0.3.2'
8+
}
9+
10+
test {
11+
javaLauncher = javaToolchains.launcherFor {
12+
languageVersion = JavaLanguageVersion.of(11)
13+
}
14+
}
15+
16+
compileTestJava {
17+
javaCompiler = javaToolchains.compilerFor {
18+
languageVersion = JavaLanguageVersion.of(11)
19+
}
20+
options.release.set(11)
21+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.testcontainers.openfga;
2+
3+
import org.testcontainers.containers.GenericContainer;
4+
import org.testcontainers.containers.wait.strategy.Wait;
5+
import org.testcontainers.utility.DockerImageName;
6+
7+
/**
8+
* Testcontainers implementation for OpenFGA.
9+
* <p>
10+
* Supported image: {@code openfga/openfga}
11+
* <p>
12+
* Exposed ports:
13+
* <ul>
14+
* <li>Playground: 3000</li>
15+
* <li>HTTP: 8080</li>
16+
* <li>gRPC: 8081</li>
17+
* </ul>
18+
*/
19+
public class OpenFGAContainer extends GenericContainer<OpenFGAContainer> {
20+
21+
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("openfga/openfga");
22+
23+
public OpenFGAContainer(String image) {
24+
this(DockerImageName.parse(image));
25+
}
26+
27+
public OpenFGAContainer(DockerImageName dockerImageName) {
28+
super(dockerImageName);
29+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
30+
31+
withExposedPorts(3000, 8080, 8081);
32+
withCommand("run");
33+
waitingFor(
34+
Wait.forHttp("/healthz").forPort(8080).forResponsePredicate(response -> response.contains("SERVING"))
35+
);
36+
}
37+
38+
public String getHttpEndpoint() {
39+
return "http://" + getHost() + ":" + getMappedPort(8080);
40+
}
41+
42+
public String getGrpcEndpoint() {
43+
return "http://" + getHost() + ":" + getMappedPort(8081);
44+
}
45+
}

0 commit comments

Comments
 (0)