Skip to content

Commit 30285f5

Browse files
committed
chore(flagd): update testharness and add metadata tests
Signed-off-by: Simon Schrottner <[email protected]>
1 parent 3410427 commit 30285f5

File tree

4 files changed

+68
-2
lines changed

4 files changed

+68
-2
lines changed

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
[submodule "providers/flagd/test-harness"]
55
path = providers/flagd/test-harness
66
url = https://github.com/open-feature/test-harness.git
7-
branch = v2.7.0
7+
branch = v2.7.1git
88
[submodule "providers/flagd/spec"]
99
path = providers/flagd/spec
1010
url = https://github.com/open-feature/spec.git

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/steps/FlagSteps.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@
44

55
import dev.openfeature.contrib.providers.flagd.e2e.State;
66
import dev.openfeature.sdk.FlagEvaluationDetails;
7+
import dev.openfeature.sdk.ImmutableMetadata;
78
import dev.openfeature.sdk.Value;
89
import io.cucumber.java.en.Given;
910
import io.cucumber.java.en.Then;
1011
import io.cucumber.java.en.When;
12+
import lombok.val;
1113
import org.junit.jupiter.api.parallel.Isolated;
14+
import java.io.IOException;
15+
import java.lang.reflect.Field;
16+
import java.util.List;
17+
import java.util.Map;
1218

1319
@Isolated()
1420
public class FlagSteps extends AbstractSteps {
@@ -84,4 +90,49 @@ public Flag(String type, String name, Object defaultValue) {
8490
this.type = type;
8591
}
8692
}
93+
94+
@Then("the resolved metadata is empty")
95+
@SuppressWarnings("unchecked")
96+
public void the_resolved_metadata_is_empty() throws NoSuchFieldException, IllegalAccessException {
97+
ImmutableMetadata flagMetadata = state.evaluation.getFlagMetadata();
98+
99+
Field metadataField = flagMetadata.getClass().getDeclaredField("metadata");
100+
metadataField.setAccessible(true);
101+
Map<String, Object> metadataMap = (Map<String, Object>) metadataField.get(flagMetadata);
102+
assertThat(metadataMap).isEmpty();
103+
}
104+
105+
106+
@Then("the resolved metadata should contain")
107+
@SuppressWarnings("unchecked")
108+
public void the_resolved_metadata_should_contain(io.cucumber.datatable.DataTable dataTable)
109+
throws IOException, ClassNotFoundException {
110+
111+
ImmutableMetadata flagMetadata = state.evaluation.getFlagMetadata();
112+
113+
List<Map<String, String>> rows = dataTable.asMaps(String.class, String.class);
114+
for (Map<String, String> row : rows) {
115+
switch (row.get("metadata_type")) {
116+
case "String":
117+
assertThat(flagMetadata.getString(row.get("key"))).isEqualTo(
118+
Utils.convert(row.get("value"), row.get("metadata_type")));
119+
break;
120+
case "Boolean":
121+
assertThat(flagMetadata.getBoolean(row.get("key"))).isEqualTo(
122+
Utils.convert(row.get("value"), row.get("metadata_type")));
123+
break;
124+
case "Float":
125+
assertThat(flagMetadata.getDouble(row.get("key"))).isEqualTo(
126+
Utils.convert(row.get("value"), row.get("metadata_type")));
127+
break;
128+
case "Integer":
129+
assertThat(flagMetadata.getInteger(row.get("key"))).isEqualTo(
130+
Utils.convert(row.get("value"), row.get("metadata_type")));
131+
break;
132+
default:
133+
throw new AssertionError("type not supported");
134+
}
135+
}
136+
}
137+
87138
}

providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/e2e/steps/ProviderSteps.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static io.restassured.RestAssured.when;
44

55
import dev.openfeature.contrib.providers.flagd.Config;
6+
import dev.openfeature.contrib.providers.flagd.FlagdOptions;
67
import dev.openfeature.contrib.providers.flagd.FlagdProvider;
78
import dev.openfeature.contrib.providers.flagd.e2e.FlagdContainer;
89
import dev.openfeature.contrib.providers.flagd.e2e.State;
@@ -104,7 +105,21 @@ public void setupProvider(String providerType) throws InterruptedException {
104105
.certPath(absolutePath);
105106
flagdConfig = "ssl";
106107
break;
108+
case "metadata":
109+
flagdConfig = "metadata";
107110

111+
if (State.resolverType == Config.Resolver.FILE) {
112+
FlagdOptions build = state.builder.build();
113+
String selector = build.getSelector();
114+
String replace = selector.replace("rawflags/", "");
115+
116+
state.builder
117+
.port(UNAVAILABLE_PORT)
118+
.offlineFlagSourcePath(new File("test-harness/flags/"+ replace).getAbsolutePath());
119+
} else {
120+
state.builder.port(container.getPort(State.resolverType));
121+
}
122+
break;
108123
default:
109124
this.state.providerType = ProviderType.DEFAULT;
110125
if (State.resolverType == Config.Resolver.FILE) {

providers/flagd/test-harness

0 commit comments

Comments
 (0)