From 6ba16f1ee8774928b4e28d64b5b9bff0174ea871 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 03 Apr 2013 15:17:27 +0000
Subject: [PATCH] Add basic tests for performing read requests.

---
 opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java |  141 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 141 insertions(+), 0 deletions(-)

diff --git a/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java b/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
new file mode 100644
index 0000000..79b8a02
--- /dev/null
+++ b/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
@@ -0,0 +1,141 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.rest2ldap;
+
+import static org.fest.assertions.Assertions.assertThat;
+import static org.forgerock.json.resource.Requests.newReadRequest;
+import static org.forgerock.json.resource.Resources.newCollection;
+import static org.forgerock.json.resource.Resources.newInternalConnection;
+import static org.forgerock.opendj.ldap.Connections.newInternalConnectionFactory;
+import static org.forgerock.opendj.rest2ldap.Rest2LDAP.object;
+import static org.forgerock.opendj.rest2ldap.Rest2LDAP.simple;
+
+import java.io.IOException;
+
+import org.forgerock.json.resource.NotFoundException;
+import org.forgerock.json.resource.RequestHandler;
+import org.forgerock.json.resource.Resource;
+import org.forgerock.json.resource.RootContext;
+import org.forgerock.opendj.ldap.ConnectionFactory;
+import org.forgerock.opendj.ldap.MemoryBackend;
+import org.forgerock.opendj.ldif.LDIFEntryReader;
+import org.forgerock.opendj.rest2ldap.Rest2LDAP.Builder;
+import org.forgerock.testng.ForgeRockTestCase;
+import org.testng.annotations.Test;
+
+/**
+ * Tests that CREST requests are correctly mapped to LDAP.
+ */
+@SuppressWarnings({ "javadoc" })
+@Test
+public final class BasicRequestsTest extends ForgeRockTestCase {
+    // FIXME: we need to test the request handler, not internal connections,
+    // so that we can check that the request handler is returning everything.
+    // FIXME: factor out test for re-use as common test suite (e.g. for InMemoryBackend).
+
+    @Test
+    public void testRead() throws Exception {
+        final RequestHandler handler = newCollection(builder().build());
+        final Resource resource =
+                newInternalConnection(handler).read(c(), newReadRequest("/test1"));
+        checkTestUser1(resource);
+    }
+
+    @Test(expectedExceptions = NotFoundException.class)
+    public void testReadNotFound() throws Exception {
+        final RequestHandler handler = newCollection(builder().build());
+        newInternalConnection(handler).read(c(), newReadRequest("/missing"));
+    }
+
+    @Test
+    public void testReadSelectAllFields() throws Exception {
+        final RequestHandler handler = newCollection(builder().build());
+        final Resource resource =
+                newInternalConnection(handler).read(c(), newReadRequest("/test1").addField("/"));
+        checkTestUser1(resource);
+    }
+
+    @Test
+    public void testReadSelectPartial() throws Exception {
+        final RequestHandler handler = newCollection(builder().build());
+        final Resource resource =
+                newInternalConnection(handler).read(c(),
+                        newReadRequest("/test1").addField("surname"));
+        assertThat(resource.getId()).isEqualTo("test1");
+        assertThat(resource.getRevision()).isEqualTo("12345");
+        assertThat(resource.getContent().get("id").asString()).isNull();
+        assertThat(resource.getContent().get("displayName").asString()).isNull();
+        assertThat(resource.getContent().get("surname").asString()).isEqualTo("user 1");
+        assertThat(resource.getContent().get("rev").asString()).isNull();
+    }
+
+    private Builder builder() throws IOException {
+        return Rest2LDAP.builder().ldapConnectionFactory(getConnectionFactory()).baseDN("dc=test")
+                .useEtagAttribute().useClientDNNaming("uid").readOnUpdatePolicy(
+                        ReadOnUpdatePolicy.CONTROLS).authorizationPolicy(AuthorizationPolicy.NONE)
+                .additionalLDAPAttribute("objectClass", "top", "person").mapper(
+                        object().attribute("id", simple("uid").isSingleValued().isRequired())
+                                .attribute("displayName",
+                                        simple("cn").isSingleValued().isRequired()).attribute(
+                                        "surname", simple("sn").isSingleValued().isRequired())
+                                .attribute("rev", simple("etag").isSingleValued().isRequired()));
+    }
+
+    private RootContext c() {
+        return new RootContext();
+    }
+
+    private void checkTestUser1(final Resource resource) {
+        assertThat(resource.getId()).isEqualTo("test1");
+        assertThat(resource.getRevision()).isEqualTo("12345");
+        assertThat(resource.getContent().get("id").asString()).isEqualTo("test1");
+        assertThat(resource.getContent().get("displayName").asString()).isEqualTo("test user 1");
+        assertThat(resource.getContent().get("surname").asString()).isEqualTo("user 1");
+        assertThat(resource.getContent().get("rev").asString()).isEqualTo("12345");
+    }
+
+    private ConnectionFactory getConnectionFactory() throws IOException {
+        // @formatter:off
+        final MemoryBackend backend =
+                new MemoryBackend(new LDIFEntryReader(
+                        "dn: dc=test",
+                        "objectClass: domain",
+                        "objectClass: top",
+                        "dc: com",
+                        "",
+                        "dn: uid=test1,dc=test",
+                        "objectClass: top",
+                        "objectClass: person",
+                        "uid: test1",
+                        "userpassword: password",
+                        "cn: test user 1",
+                        "sn: user 1",
+                        "etag: 12345",
+                        "",
+                        "dn: uid=test2,dc=test",
+                        "objectClass: top",
+                        "objectClass: person",
+                        "uid: test2",
+                        "userpassword: password",
+                        "cn: test user 2",
+                        "sn: user 2",
+                        "etag: 67890"
+                ));
+        // @formatter:on
+
+        return newInternalConnectionFactory(backend);
+    }
+}

--
Gitblit v1.10.0