From f7a98b019d743f118b93112235d1b8916c854343 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 10 Mar 2016 10:23:52 +0000
Subject: [PATCH] Added tests for new MonitorData class
---
opendj-server-legacy/src/test/java/org/opends/server/api/MonitorDataTestCase.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++
opendj-server-legacy/src/main/java/org/opends/server/types/AttributeBuilder.java | 2
opendj-server-legacy/src/main/java/org/opends/server/types/Attribute.java | 7 +
opendj-server-legacy/src/main/java/org/opends/server/types/Attributes.java | 2
opendj-server-legacy/src/main/java/org/opends/server/api/MonitorData.java | 3
5 files changed, 213 insertions(+), 0 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/api/MonitorData.java b/opendj-server-legacy/src/main/java/org/opends/server/api/MonitorData.java
index 8729922..47ac6fc 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/api/MonitorData.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/api/MonitorData.java
@@ -33,6 +33,7 @@
import org.forgerock.opendj.ldap.schema.CoreSchema;
import org.forgerock.opendj.ldap.schema.Syntax;
import org.opends.server.types.Attribute;
+import org.opends.server.types.Attribute.RemoveOnceSwitchingAttributes;
import org.opends.server.types.AttributeBuilder;
import org.opends.server.types.Attributes;
import org.opends.server.types.PublicAPI;
@@ -159,6 +160,8 @@
* @param attrValues
* the attribute values
*/
+ @RemoveOnceSwitchingAttributes(comment = "once using the non immutable SDK's Attribute class, "
+ + "we can incrementally build an attribute by using the add(String attrName, Object attrValue) method")
public void add(String attrName, Collection<?> attrValues)
{
AttributeBuilder builder = new AttributeBuilder(attrName);
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/Attribute.java b/opendj-server-legacy/src/main/java/org/opends/server/types/Attribute.java
index d784e17..fcf3450 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/Attribute.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/Attribute.java
@@ -45,6 +45,13 @@
mayInvoke = true)
public interface Attribute extends Iterable<ByteString>
{
+ /** Marks code that can be removed once we are switching from server's to SDK's {@code Attribute}. */
+ public @interface RemoveOnceSwitchingAttributes
+ {
+ /** Free-form comment. */
+ String comment() default "";
+ }
+
/**
* Indicates whether this attribute has any value(s) that are
* approximately equal to the provided value.
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/AttributeBuilder.java b/opendj-server-legacy/src/main/java/org/opends/server/types/AttributeBuilder.java
index 2404df9..4a6fe84 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/AttributeBuilder.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/AttributeBuilder.java
@@ -40,6 +40,7 @@
import org.forgerock.util.Reject;
import org.forgerock.util.Utils;
import org.opends.server.core.DirectoryServer;
+import org.opends.server.types.Attribute.RemoveOnceSwitchingAttributes;
import org.opends.server.util.CollectionUtils;
/**
@@ -97,6 +98,7 @@
mayInstantiate = true,
mayExtend = false,
mayInvoke = true)
+@RemoveOnceSwitchingAttributes
public final class AttributeBuilder implements Iterable<ByteString>
{
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/types/Attributes.java b/opendj-server-legacy/src/main/java/org/opends/server/types/Attributes.java
index 8a289bb..954427a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/types/Attributes.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/types/Attributes.java
@@ -26,6 +26,7 @@
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.opends.server.types.Attribute.RemoveOnceSwitchingAttributes;
/**
* This class contains various methods for manipulating
@@ -49,6 +50,7 @@
* {@link AttributeBuilder} should be used in order to incrementally
* construct multi-valued attributes.
*/
+@RemoveOnceSwitchingAttributes
public final class Attributes
{
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/api/MonitorDataTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/api/MonitorDataTestCase.java
new file mode 100644
index 0000000..89a4db9
--- /dev/null
+++ b/opendj-server-legacy/src/test/java/org/opends/server/api/MonitorDataTestCase.java
@@ -0,0 +1,199 @@
+/*
+ * 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 2016 ForgeRock AS.
+ */
+package org.opends.server.api;
+
+import static org.opends.server.schema.SchemaConstants.*;
+import static org.testng.Assert.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.assertj.core.api.Assertions;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.opendj.ldap.ByteString;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.forgerock.opendj.ldap.schema.Syntax;
+import org.opends.server.TestCaseUtils;
+import org.opends.server.types.Attribute;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/** Tests for {@link MonitorData} class. */
+@SuppressWarnings("javadoc")
+public class MonitorDataTestCase extends APITestCase
+{
+ @BeforeClass
+ public void setUp() throws Exception
+ {
+ TestCaseUtils.startFakeServer();
+ }
+
+ @AfterClass
+ public void tearDown()
+ {
+ TestCaseUtils.shutdownFakeServer();
+ }
+
+ @Test
+ public void verifyInferredAttributeSyntaxes() throws Exception
+ {
+ final MonitorData attrs = new MonitorData();
+ attrs.add("string", "this is a string");
+ attrs.add("bytestring", ByteString.valueOfUtf8("this is a string"));
+ attrs.add("int", 1);
+ attrs.add("long", 1L);
+ attrs.add("float", 1f);
+ attrs.add("double", 1d);
+ attrs.add("boolean", true);
+ attrs.add("dn", DN.valueOf("cn=test"));
+ attrs.add("uuid", DN.valueOf("cn=test").toUUID());
+ attrs.add("date", new Date());
+ attrs.add("calender", Calendar.getInstance());
+ attrs.add("other", 'a');
+
+ assertSyntaxes(attrs);
+ assertEquals(attrs.size(), 12);
+ }
+
+ private void assertSyntaxes(final MonitorData attrs)
+ {
+ for (Attribute attr : attrs)
+ {
+ final AttributeType attrType = attr.getAttributeDescription().getAttributeType();
+ final Syntax syntax = attrType.getSyntax();
+
+ switch (attrType.getNameOrOID())
+ {
+ case "int":
+ case "long":
+ assertSyntax(attr, syntax, SYNTAX_INTEGER_OID);
+ continue;
+
+ case "string":
+ case "bytestring":
+ case "float":
+ case "double":
+ case "other":
+ assertSyntax(attr, syntax, SYNTAX_DIRECTORY_STRING_OID);
+ continue;
+
+ case "boolean":
+ assertSyntax(attr, syntax, SYNTAX_BOOLEAN_OID);
+ continue;
+
+ case "dn":
+ assertSyntax(attr, syntax, SYNTAX_DN_OID);
+ continue;
+
+ case "date":
+ case "calender":
+ assertSyntax(attr, syntax, SYNTAX_GENERALIZED_TIME_OID);
+ continue;
+
+ case "uuid":
+ assertSyntax(attr, syntax, SYNTAX_UUID_OID);
+ continue;
+
+ default:
+ fail("Untested type: \"" + attrType.getNameOrOID() + "\"");
+ }
+ }
+ }
+
+ private void assertSyntax(Attribute attr, final Syntax syntax, String syntaxOid)
+ {
+ assertEquals(syntax.getOID(), syntaxOid, "For attribute: " + attr);
+
+ final LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
+ final ByteString firstAttrValue = attr.iterator().next();
+ final boolean result = syntax.valueIsAcceptable(firstAttrValue, invalidReason);
+ assertTrue(result, "For attribute: " + attr + " expected value to be acceptable, but got:" + invalidReason);
+ }
+
+ @Test
+ public void addBean() throws Exception
+ {
+ class MyBean
+ {
+ // converted to attributes
+ public int getint() { return 1; }
+ public long getlong() { return 1; }
+ public String getstring() { return "this is a test"; }
+ public boolean isboolean() { return true; }
+
+ // not converted to attributes
+ public DN getAnother() { return DN.valueOf("cn=test"); }
+ public DN isAnother() { return getAnother(); }
+ }
+
+ final MonitorData attrs = new MonitorData();
+ attrs.addBean(new MyBean(), "");
+ assertSyntaxes(attrs);
+
+ List<String> names = new ArrayList<>();
+ for (Attribute attr : attrs)
+ {
+ names.add(attr.getAttributeDescription().getAttributeType().getNameOrOID());
+ }
+ Assertions.assertThat(names).containsOnly("int", "long", "string", "boolean");
+ assertEquals(attrs.size(), names.size());
+ }
+
+ @Test
+ public void addCollectionOfValues() throws Exception
+ {
+ final MonitorData attrs = new MonitorData();
+ attrs.add("string", Arrays.asList("this", "is", "a", "test"));
+
+ final Iterator<Attribute> it = attrs.iterator();
+ assertTrue(it.hasNext());
+ final Attribute attr = it.next();
+ assertEquals(attr.getAttributeDescription().getAttributeType().getNameOrOID(), "string");
+ Assertions.assertThat(attr).containsExactly(bs("this"), bs("is"), bs("a"), bs("test"));
+ assertFalse(it.hasNext());
+ }
+
+ private ByteString bs(String s)
+ {
+ return ByteString.valueOfUtf8(s);
+ }
+
+ @Test
+ public void addIfNotNull() throws Exception
+ {
+ final MonitorData attrs = new MonitorData();
+
+ attrs.addIfNotNull("string", null);
+ assertEquals(attrs.size(), 0);
+ final Iterator<Attribute> it1 = attrs.iterator();
+ assertFalse(it1.hasNext());
+
+ attrs.addIfNotNull("string", "this is a test");
+ assertEquals(attrs.size(), 1);
+ final Iterator<Attribute> it2 = attrs.iterator();
+ assertTrue(it2.hasNext());
+ final Attribute attr = it2.next();
+ assertEquals(attr.getAttributeDescription().getAttributeType().getNameOrOID(), "string");
+ Assertions.assertThat(attr).containsExactly(bs("this is a test"));
+ assertFalse(it2.hasNext());
+ }
+}
--
Gitblit v1.10.0