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