From a2a71e1777beb48f98e64811ca6cd43286b79be3 Mon Sep 17 00:00:00 2001
From: Guy Paddock <guy@rosieapp.com>
Date: Fri, 27 Oct 2017 04:49:24 +0000
Subject: [PATCH] Tests for sub-tree flattening config
---
opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfiguratorTest.java | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 201 insertions(+), 3 deletions(-)
diff --git a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfiguratorTest.java b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfiguratorTest.java
index 7c2e399..2a74a2d 100644
--- a/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfiguratorTest.java
+++ b/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/Rest2LdapJsonConfiguratorTest.java
@@ -29,6 +29,8 @@
import java.nio.file.Paths;
import java.util.Collections;
+import java.util.List;
+import java.util.Map;
import org.forgerock.api.CrestApiProducer;
import org.forgerock.api.models.ApiDescription;
import org.forgerock.api.models.Items;
@@ -43,6 +45,7 @@
import org.forgerock.services.context.RootContext;
import org.forgerock.testng.ForgeRockTestCase;
import org.forgerock.util.Options;
+import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -66,9 +69,8 @@
@Test
public void testConfigureEndpointsWithApiDescription() throws Exception {
- final DescribableRequestHandler handler =
- createDescribableHandler(CONFIG_DIR.resolve("endpoints").toFile());
-
+ final File endpointsDir = CONFIG_DIR.resolve("endpoints").toFile();
+ final DescribableRequestHandler handler = createDescribableHandler(endpointsDir);
final ApiDescription api = requestApi(handler, "api/users/bjensen");
assertThat(api).isNotNull();
@@ -82,6 +84,7 @@
assertThat(api.getPaths().getNames()).containsOnly(
"/api/users",
"/api/read-only-users",
+ "/api/all-users",
"/api/groups");
assertThat(api.getDefinitions().getNames()).containsOnly(
@@ -132,6 +135,201 @@
}
}
+ @DataProvider
+ public Object[][] invalidSubResourceConfigurations() {
+ // @Checkstyle:off
+ return new Object[][] {
+ {
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'writeable-collection': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'flattenSubtree': true"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ },
+ {
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'writeable-collection': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'isReadOnly': false,"
+ + "'flattenSubtree': true"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ }
+ };
+ // @Checkstyle:on
+ }
+
+ @DataProvider
+ public Object[][] validSubResourceConfigurations() {
+ // @Checkstyle:off
+ return new Object[][] {
+ {
+ false,
+ false,
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'all-users': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'flattenSubtree': false"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ },
+ {
+ true,
+ false,
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'all-users': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'isReadOnly': true"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ },
+ {
+ true,
+ false,
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'all-users': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'isReadOnly': true,"
+ + "'flattenSubtree': false"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ },
+ {
+ false,
+ false,
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'all-users': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'isReadOnly': false,"
+ + "'flattenSubtree': false"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ },
+ {
+ true,
+ true,
+ "{"
+ + "'example-v1': {"
+ + "'subResources': {"
+ + "'all-users': {"
+ + "'type': 'collection',"
+ + "'dnTemplate': 'ou=people,dc=example,dc=com',"
+ + "'resource': 'frapi:opendj:rest2ldap:user:1.0',"
+ + "'namingStrategy': {"
+ + "'type': 'clientDnNaming',"
+ + "'dnAttribute': 'uid'"
+ + "},"
+ + "'isReadOnly': true,"
+ + "'flattenSubtree': true"
+ + "}"
+ + "}"
+ + "}"
+ + "}"
+ }
+ };
+ // @Checkstyle:on
+ }
+
+ @Test(dataProvider = "invalidSubResourceConfigurations")
+ public void testInvalidSubResourceConfigurations(final String rawJson) throws Exception {
+ try {
+ Rest2LdapJsonConfigurator.configureResources(parseJson(rawJson));
+
+ fail("Expected an IllegalArgumentException");
+ }
+ catch (IllegalArgumentException ex) {
+ assertThat(ex.getMessage())
+ .isEqualTo("Sub-resources must be read-only to support sub-tree flattening.");
+ }
+ }
+
+ @Test(dataProvider = "validSubResourceConfigurations")
+ public void testValidSubResourceConfigurations(final boolean expectingReadOnly,
+ final boolean expectingSubtreeFlattened,
+ final String rawJson) throws Exception {
+ final List<org.forgerock.opendj.rest2ldap.Resource> resources =
+ Rest2LdapJsonConfigurator.configureResources(parseJson(rawJson));
+ final org.forgerock.opendj.rest2ldap.Resource firstResource;
+ final Map<String, SubResource> subResources;
+ final SubResourceCollection allUsersSubResource;
+
+ assertThat(resources.size()).isEqualTo(1);
+
+ firstResource = resources.get(0);
+
+ assertThat(firstResource.getResourceId()).isEqualTo("example-v1");
+
+ subResources = firstResource.getSubResourceMap();
+
+ assertThat(subResources.size()).isEqualTo(1);
+
+ allUsersSubResource = (SubResourceCollection)subResources.get("all-users");
+
+ assertThat(allUsersSubResource.isReadOnly()).isEqualTo(expectingReadOnly);
+ assertThat(allUsersSubResource.shouldFlattenSubtree()).isEqualTo(expectingSubtreeFlattened);
+ }
+
private RequestHandler createRequestHandler(final File endpointsDir) throws IOException {
return Rest2LdapJsonConfigurator.configureEndpoints(endpointsDir, Options.defaultOptions());
}
--
Gitblit v1.10.0