OPENDJ-1631 CR-6864 Fix LDAPSyntaxDescriptionSyntax bug and improve syntaxes tests
- LDAPSyntaxDescriptionSyntax: fix bug on regexp syntax
- As SDK syntaxes become the reference, ensure tests for SDK
syntaxes are at least as complete as tests for server syntaxes
3 files added
14 files modified
| | |
| | | if (values.hasNext()) { |
| | | final String pattern = values.next(); |
| | | try { |
| | | Pattern.compile(values.next()); |
| | | Pattern.compile(pattern); |
| | | } catch (final Exception e) { |
| | | throwDecodeException(logger, |
| | | WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN.get(oid, pattern)); |
| | |
| | | */ |
| | | package org.forgerock.opendj.ldap; |
| | | |
| | | import static org.fest.assertions.Assertions.assertThat; |
| | | import static org.fest.assertions.Assertions.*; |
| | | |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | |
| | | |
| | | @DataProvider |
| | | public Object[][] invalidStrings() { |
| | | return new Object[][] { { "20060906135030+3359" }, { "20060906135030+2389" }, |
| | | return new Object[][] { {"20060906135030+3359" }, { "20060906135030+2389" }, |
| | | { "20060906135030+2361" }, { "20060906135030+" }, { "20060906135030+0" }, |
| | | { "20060906135030+010" }, { "20061200235959Z" }, { "2006121a235959Z" }, |
| | | { "2006122a235959Z" }, { "20060031235959Z" }, { "20061331235959Z" }, |
| | |
| | | { "20061231235959Z" }, { "20060906135030+0101" }, { "20060906135030+2359" }, }; |
| | | } |
| | | |
| | | /** |
| | | * Create data for toString test. |
| | | * |
| | | * @return Returns test data. |
| | | */ |
| | | @DataProvider() |
| | | public Object[][] createToStringData() |
| | | { |
| | | return new Object [][] { |
| | | // Note that Calendar months run from 0-11, |
| | | // and that there was no such year as year 0 (1 BC -> 1 AD). |
| | | { 1, 0, 1, 0, 0, 0, 0, "00010101000000Z"}, |
| | | { 9, 0, 1, 0, 0, 0, 0, "00090101000000Z"}, |
| | | { 10, 0, 1, 0, 0, 0, 0, "00100101000000Z"}, |
| | | { 99, 0, 1, 0, 0, 0, 0, "00990101000000Z"}, |
| | | { 100, 0, 1, 0, 0, 0, 0, "01000101000000Z"}, |
| | | { 999, 0, 1, 0, 0, 0, 0, "09990101000000Z"}, |
| | | {1000, 0, 1, 0, 0, 0, 0, "10000101000000Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 0, "20000101000000Z"}, |
| | | {2099, 0, 1, 0, 0, 0, 0, "20990101000000Z"}, |
| | | {2000, 8, 1, 0, 0, 0, 0, "20000901000000Z"}, |
| | | {2000, 9, 1, 0, 0, 0, 0, "20001001000000Z"}, |
| | | {2000, 10, 1, 0, 0, 0, 0, "20001101000000Z"}, |
| | | {2000, 11, 1, 0, 0, 0, 0, "20001201000000Z"}, |
| | | {2000, 0, 9, 0, 0, 0, 0, "20000109000000Z"}, |
| | | {2000, 0, 10, 0, 0, 0, 0, "20000110000000Z"}, |
| | | {2000, 0, 19, 0, 0, 0, 0, "20000119000000Z"}, |
| | | {2000, 0, 20, 0, 0, 0, 0, "20000120000000Z"}, |
| | | {2000, 0, 29, 0, 0, 0, 0, "20000129000000Z"}, |
| | | {2000, 0, 30, 0, 0, 0, 0, "20000130000000Z"}, |
| | | {2000, 0, 31, 0, 0, 0, 0, "20000131000000Z"}, |
| | | {2000, 0, 1, 9, 0, 0, 0, "20000101090000Z"}, |
| | | {2000, 0, 1, 10, 0, 0, 0, "20000101100000Z"}, |
| | | {2000, 0, 1, 19, 0, 0, 0, "20000101190000Z"}, |
| | | {2000, 0, 1, 20, 0, 0, 0, "20000101200000Z"}, |
| | | {2000, 0, 1, 23, 0, 0, 0, "20000101230000Z"}, |
| | | {2000, 0, 1, 0, 9, 0, 0, "20000101000900Z"}, |
| | | {2000, 0, 1, 0, 10, 0, 0, "20000101001000Z"}, |
| | | {2000, 0, 1, 0, 59, 0, 0, "20000101005900Z"}, |
| | | {2000, 0, 1, 0, 0, 9, 0, "20000101000009Z"}, |
| | | {2000, 0, 1, 0, 0, 10, 0, "20000101000010Z"}, |
| | | {2000, 0, 1, 0, 0, 59, 0, "20000101000059Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 9, "20000101000000.009Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 10, "20000101000000.010Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 99, "20000101000000.099Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 100, "20000101000000.100Z"}, |
| | | {2000, 0, 1, 0, 0, 0, 999, "20000101000000.999Z"}, |
| | | }; |
| | | } |
| | | |
| | | private static final String TIME_ZONE_UTC = "UTC"; |
| | | |
| | | |
| | | @Test(dataProvider="createToStringData") |
| | | public void testToString(int yyyy, int MM, int dd, int HH, int mm, int ss, int SSS, String expected) |
| | | throws Exception |
| | | { |
| | | Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone(TIME_ZONE_UTC)); |
| | | calendar.set(yyyy, MM, dd, HH, mm, ss); |
| | | calendar.set(Calendar.MILLISECOND, SSS); |
| | | |
| | | long time = calendar.getTimeInMillis(); |
| | | // test creation with long only if it is positive because negative values will be rejected |
| | | if (time > 0) |
| | | { |
| | | assertThat(GeneralizedTime.valueOf(time).toString()).isEqualTo(expected); |
| | | } |
| | | |
| | | Date date = new Date(time); |
| | | assertThat(GeneralizedTime.valueOf(date).toString()).isEqualTo(expected); |
| | | } |
| | | |
| | | } |
| | |
| | | if (!liveResult.equals(result)) { |
| | | fail(syntax + ".valueIsAcceptable gave bad result for " + value + "reason : " + reason); |
| | | } |
| | | |
| | | // call the getters |
| | | syntax.getApproximateMatchingRule(); |
| | | syntax.getDescription(); |
| | | syntax.getEqualityMatchingRule(); |
| | | syntax.getOID(); |
| | | syntax.getOrderingMatchingRule(); |
| | | syntax.getSubstringMatchingRule(); |
| | | syntax.hashCode(); |
| | | syntax.isHumanReadable(); |
| | | syntax.toString(); |
| | | } |
| | | |
| | | /** |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_ATTRIBUTE_TYPE_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Attribute type syntax tests. |
| | | */ |
| | | @Test |
| | | public class AttributeTypeSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | |
| | | + " X-APPROX 'equalLengthApproximateMatch'" |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" |
| | | + " COLLECTIVE USAGE userApplications )", true }, |
| | | { "(1.2.8.5 NAME 'testtype' DESC 'full type')", true }, |
| | | { "(1.2.8.5 USAGE directoryOperation )", true }, |
| | | { |
| | | "(1.2.8.5 NAME 'testtype' DESC 'full type')", true }, |
| | | { |
| | | "(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)", true}, |
| | | { |
| | | "(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' )", true}, |
| | | { "(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' " |
| | | + " X-SCHEMA-FILE '33-test.ldif' )", true}, |
| | | { |
| | | "(1.2.8.5 USAGE directoryOperation )", true }, |
| | | |
| | | // Collective can inherit from non-collective |
| | | { "(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP cn " |
| | | + " EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch" |
| | | + " SUBSTR caseIgnoreSubstringsMatch" |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" |
| | | + " COLLECTIVE USAGE userApplications )", true}, |
| | | // Collective can be operational |
| | | { "(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE " |
| | | + " EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch" |
| | | + " SUBSTR caseIgnoreSubstringsMatch" |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" |
| | | + " COLLECTIVE USAGE directoryOperation )", true}, |
| | | |
| | | // X-NAME is invalid extension (no value) |
| | | { "(1.2.8.5 NAME 'testType' DESC 'full type' EQUALITY caseIgnoreMatch " |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'test' " |
| | | + " X-SCHEMA-FILE '33-test.ldif' X-NAME )", false}, |
| | | |
| | | { |
| | | "(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP cn " |
| | | + " EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch" |
| | |
| | | + " SUBSTR caseIgnoreSubstringsMatch" |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" |
| | | + " BADTOKEN USAGE directoryOperation )", false }, |
| | | |
| | | // NO-USER-MODIFICATION can't have non-operational usage |
| | | { |
| | | "1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE " |
| | | + " EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch" |
| | |
| | | protected Syntax getRule() { |
| | | return Schema.getCoreSchema().getSyntax(SYNTAX_ATTRIBUTE_TYPE_OID); |
| | | } |
| | | |
| | | } |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_BIT_STRING_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Bit string syntax tests. |
| | | */ |
| | | @Test |
| | | public class BitStringSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | return new Object[][] { { "'0101'B", true }, { "'1'B", true }, { "'0'B", true }, |
| | | { "invalid", false }, { "1", false }, { "'010100000111111010101000'B", true }, }; |
| | | return new Object[][] { |
| | | { "'0101'B", true }, |
| | | { "'1'B", true }, |
| | | { "'0'B", true }, |
| | | { "invalid", false }, |
| | | { "1", false }, |
| | | { "'010100000111111010101000'B", true }, }; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | assertEquals(liveResult, result, |
| | | syntax + ".valueIsAcceptable gave bad result for " + value + "reason : " + reason); |
| | | |
| | | // call the getters |
| | | syntax.getApproximateMatchingRule(); |
| | | syntax.getDescription(); |
| | | syntax.getEqualityMatchingRule(); |
| | | syntax.getOID(); |
| | | syntax.getOrderingMatchingRule(); |
| | | syntax.getSubstringMatchingRule(); |
| | | syntax.hashCode(); |
| | | syntax.isHumanReadable(); |
| | | syntax.toString(); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Test(dataProvider = "acceptableValues") |
| | | public void testAllowMalformedCertificates(ByteString value, Boolean result) { |
| | | // Make sure that the specified class can be instantiated as a task. |
| | | SchemaBuilder builder = new SchemaBuilder(getCoreSchema()).setOption(ALLOW_MALFORMED_CERTIFICATES, true); |
| | | final Syntax syntax = builder.toSchema().getSyntax(SYNTAX_CERTIFICATE_OID); |
| | | |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_COUNTRY_STRING_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Country String syntax tests. |
| | | */ |
| | | @Test |
| | | public class CountryStringSyntaxTest extends AbstractSyntaxTestCase { |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | |
| | | { "12", false }, |
| | | { "UK", true }, |
| | | { "Xf", false }, |
| | | { "ÖÄ", false }, |
| | | { "ÖÄ", false }, // "\u00D6\u00C4" |
| | | }; |
| | | } |
| | | |
| New file |
| | |
| | | /* |
| | | * CDDL HEADER START |
| | | * |
| | | * The contents of this file are subject to the terms of the |
| | | * Common Development and Distribution License, Version 1.0 only |
| | | * (the "License"). You may not use this file except in compliance |
| | | * with the License. |
| | | * |
| | | * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt |
| | | * or http://forgerock.org/license/CDDLv1.0.html. |
| | | * See the License for the specific language governing permissions |
| | | * and limitations under the License. |
| | | * |
| | | * When distributing Covered Code, include this CDDL HEADER in each |
| | | * file and include the License file at legal-notices/CDDLv1_0.txt. |
| | | * If applicable, add the following below this CDDL HEADER, with the |
| | | * fields enclosed by brackets "[]" replaced with your own identifying |
| | | * information: |
| | | * Portions Copyright [yyyy] [name of copyright owner] |
| | | * |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2009 Sun Microsystems, Inc. |
| | | * Portions copyright 2014 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.ldap.schema; |
| | | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_INTEGER_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Integer syntax tests. |
| | | */ |
| | | @Test |
| | | public class IntegerSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | return new Object [][] { |
| | | {"123", true}, |
| | | {"987654321", true}, |
| | | {"-1", true}, |
| | | {"10001", true}, |
| | | {"001", false}, |
| | | {"-01", false}, |
| | | {"12345678\u2163", false}, |
| | | {" 123", false}, |
| | | {"123 ", false} |
| | | }; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | protected Syntax getRule() { |
| | | return Schema.getCoreSchema().getSyntax(SYNTAX_INTEGER_OID); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | /* |
| | | * CDDL HEADER START |
| | | * |
| | | * The contents of this file are subject to the terms of the |
| | | * Common Development and Distribution License, Version 1.0 only |
| | | * (the "License"). You may not use this file except in compliance |
| | | * with the License. |
| | | * |
| | | * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt |
| | | * or http://forgerock.org/license/CDDLv1.0.html. |
| | | * See the License for the specific language governing permissions |
| | | * and limitations under the License. |
| | | * |
| | | * When distributing Covered Code, include this CDDL HEADER in each |
| | | * file and include the License file at legal-notices/CDDLv1_0.txt. |
| | | * If applicable, add the following below this CDDL HEADER, with the |
| | | * fields enclosed by brackets "[]" replaced with your own identifying |
| | | * information: |
| | | * Portions Copyright [yyyy] [name of copyright owner] |
| | | * |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2009 Sun Microsystems, Inc. |
| | | * Portions copyright 2014-2015 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.ldap.schema; |
| | | |
| | | import static org.forgerock.opendj.ldap.schema.Schema.*; |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.*; |
| | | import static org.forgerock.opendj.ldap.schema.SchemaOptions.*; |
| | | import static org.testng.Assert.*; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * JPEG syntax tests. |
| | | */ |
| | | @SuppressWarnings("javadoc") |
| | | @Test |
| | | public class JPEGSyntaxTest extends AbstractSchemaTestCase { |
| | | |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | String non_image = |
| | | "AAECAwQFBgcICQ=="; |
| | | String jfif_image = |
| | | "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDACMYGh4aFiMeHB4nJSMpNFc4NDAwNGpM" + |
| | | "UD9Xfm+EgnxveneLnMipi5S9lnd6ru2wvc7V4OLgh6f1//PZ/8jb4Nf/2wBDASUn" + |
| | | "JzQuNGY4OGbXj3qP19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX" + |
| | | "19fX19fX19fX19fX19f/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA" + |
| | | "AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh" + |
| | | "MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6" + |
| | | "Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZ" + |
| | | "mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx" + |
| | | "8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA" + |
| | | "AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV" + |
| | | "YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hp" + |
| | | "anN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE" + |
| | | "xcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwCC" + |
| | | "iiiuM9g//9k="; |
| | | String exif_image = |
| | | "/9j/4QD2RXhpZgAATU0AKgAAAAgACQESAAMAAAABAAEAAAEaAAUAAAABAAAAegEb" + |
| | | "AAUAAAABAAAAggEoAAMAAAABAAIAAAExAAIAAAAQAAAAigEyAAIAAAAUAAAAmgE8" + |
| | | "AAIAAAAOAAAArgITAAMAAAABAAEAAIdpAAQAAAABAAAAvAAAAAAASAAAAAEAAABI" + |
| | | "AAAAAQAAUXVpY2tUaW1lIDcuNy4xADIwMTI6MDg6MjAgMTI6MTE6MTIATWFjIE9T" + |
| | | "IFggMTAuOAAAApAAAAcAAAAEMDIyMJADAAIAAAAUAAAA2gAAAAAyMDEyOjA4OjIw" + |
| | | "IDEyOjEwOjA2AP/+AAxBcHBsZU1hcmsK/9sAQwAjGBoeGhYjHhweJyUjKTRXODQw" + |
| | | "MDRqTFA/V35vhIJ8b3p3i5zIqYuUvZZ3eq7tsL3O1eDi4Ien9f/z2f/I2+DX/9sA" + |
| | | "QwElJyc0LjRmODhm1496j9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX" + |
| | | "19fX19fX19fX19fX19fX19fX/8AAEQgAAQABAwEiAAIRAQMRAf/EAB8AAAEFAQEB" + |
| | | "AQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAE" + |
| | | "EQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2" + |
| | | "Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SV" + |
| | | "lpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn" + |
| | | "6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//E" + |
| | | "ALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkj" + |
| | | "M1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2Rl" + |
| | | "ZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5" + |
| | | "usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMR" + |
| | | "AD8AgooorjPYP//Z"; |
| | | String png_image = |
| | | "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAMAAAAoyzS7AAAABlBMVEX/JgAAAAAP" + |
| | | "IsinAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg=="; |
| | | |
| | | try |
| | | { |
| | | return new Object[][] { |
| | | { ByteString.valueOfBase64(non_image), false }, |
| | | { ByteString.valueOfBase64(jfif_image), true }, |
| | | { ByteString.valueOfBase64(exif_image), true }, |
| | | { ByteString.valueOfBase64(png_image), false } }; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return new Object[][] {}; |
| | | } |
| | | } |
| | | |
| | | /** Test acceptable values for this syntax when not allowing malformed JPEG photos. */ |
| | | @Test(dataProvider = "acceptableValues") |
| | | public void testAcceptableValues(ByteString value, boolean expectedResult) { |
| | | final Syntax syntax = getSyntax(false); |
| | | final LocalizableMessageBuilder reason = new LocalizableMessageBuilder(); |
| | | |
| | | final boolean result = syntax.valueIsAcceptable(value, reason); |
| | | assertEquals(result, expectedResult, |
| | | syntax + ".valueIsAcceptable gave bad result for " + value + "reason : " + reason); |
| | | |
| | | } |
| | | |
| | | /** Test acceptable values for this syntax when allowing malformed JPEG photos. */ |
| | | @Test(dataProvider = "acceptableValues") |
| | | public void testAcceptableValuesWhenAllowingMalformedJPEG(ByteString value, boolean notUsedForThisTest) { |
| | | final Syntax syntax = getSyntax(true); |
| | | final LocalizableMessageBuilder reason = new LocalizableMessageBuilder(); |
| | | |
| | | final boolean liveResult = syntax.valueIsAcceptable(value, reason); |
| | | // should always be true |
| | | assertTrue(liveResult, syntax + ".valueIsAcceptable gave bad result for " + value + "reason : " + reason); |
| | | } |
| | | |
| | | private Syntax getSyntax(boolean allowMalformedJpegPhotos) { |
| | | SchemaBuilder builder = |
| | | new SchemaBuilder(getCoreSchema()).setOption(ALLOW_MALFORMED_JPEG_PHOTOS, allowMalformedJpegPhotos); |
| | | return builder.toSchema().getSyntax(SYNTAX_JPEG_OID); |
| | | } |
| | | |
| | | } |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_LDAP_SYNTAX_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * LDAP syntax tests. |
| | | */ |
| | | @Test |
| | | public class LDAPSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | return new Object[][] { |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-9EN ('this' 'is' 'a' 'test'))", |
| | | false }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-9EN ('this' 'is' 'a' 'test'))", false }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "(X-name 'this", false }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "(X-name 'this'", false }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "Y-name 'this')", false }, |
| | |
| | | + "X-name ('this' 'is' 'a' 'test') X-name-a 'X-name-b' ('this'))))", false }, |
| | | { |
| | | "( 2.5.4.3 DESC 'full syntax description' " |
| | | + "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ('this'))", |
| | | true }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-a-_eN_- ('this' 'is' 'a' 'test'))", |
| | | true }, |
| | | + "X-name ('this' 'is' 'a' 'test') X-name-a 'this' X-name-b ('this'))", true }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-a-_eN_- ('this' 'is' 'a' 'test'))", true }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-name ('this'))", true }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-name 'this')", true }, |
| | | { "( 2.5.4.3 DESC 'full syntax description' " + "X-name 'this' X-name-a 'test')", true }, |
| | |
| | | { "($%^*&!@ DESC 'syntax description' )", false }, |
| | | { "(temp-oid DESC 'syntax description' )", true }, |
| | | { "2.5.4.3 DESC 'syntax description' )", false }, |
| | | { "(2.5.4.3 DESC 'syntax description' ", false }, }; |
| | | { "(2.5.4.3 DESC 'syntax description' ", false }, |
| | | { "( 1.1.1 DESC 'Host and Port in the format of HOST:PORT' X-PATTERN '^[a-z-A-Z]+:[0-9.]+\\d$' )", true }, |
| | | }; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_MATCHING_RULE_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Matching rule syntax tests. |
| | | */ |
| | | @Test |
| | | public class MatchingRuleSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_MATCHING_RULE_USE_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Matching rule use syntax tests. |
| | | */ |
| | | @Test |
| | | public class MatchingRuleUseSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_OTHER_MAILBOX_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Other mailbox syntax tests. |
| | | */ |
| | | @Test |
| | | public class OtherMailboxSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | |
| | | false); |
| | | } |
| | | |
| | | @Test |
| | | public final void testSchemaBuilderWithAttributeUsageDifferentFromSuperior() { |
| | | final SchemaBuilder scBuild = new SchemaBuilder(); |
| | | |
| | | // directoryOperation can't inherit from userApplications |
| | | scBuild.addAttributeType("(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP cn " |
| | | + " EQUALITY caseIgnoreMatch ORDERING caseIgnoreOrderingMatch" |
| | | + " SUBSTR caseIgnoreSubstringsMatch" |
| | | + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE" |
| | | + " NO-USER-MODIFICATION USAGE directoryOperation )", true); |
| | | scBuild.addSchema(Schema.getCoreSchema(), false); |
| | | Schema schema = scBuild.toSchema(); |
| | | assertThat(schema.getWarnings()).hasSize(1); |
| | | assertThat(schema.getWarnings().toString()).contains("attribute usage directoryOperation is not the same"); |
| | | } |
| | | |
| | | /** |
| | | * The builder allows to have twin or more attributes if it can overwrite |
| | | * them. Only the last is kept. Attributes may have same OID and name. |
| New file |
| | |
| | | /* |
| | | * CDDL HEADER START |
| | | * |
| | | * The contents of this file are subject to the terms of the |
| | | * Common Development and Distribution License, Version 1.0 only |
| | | * (the "License"). You may not use this file except in compliance |
| | | * with the License. |
| | | * |
| | | * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt |
| | | * or http://forgerock.org/license/CDDLv1.0.html. |
| | | * See the License for the specific language governing permissions |
| | | * and limitations under the License. |
| | | * |
| | | * When distributing Covered Code, include this CDDL HEADER in each |
| | | * file and include the License file at legal-notices/CDDLv1_0.txt. |
| | | * If applicable, add the following below this CDDL HEADER, with the |
| | | * fields enclosed by brackets "[]" replaced with your own identifying |
| | | * information: |
| | | * Portions Copyright [yyyy] [name of copyright owner] |
| | | * |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2015 ForgeRock AS. |
| | | */ |
| | | package org.forgerock.opendj.ldap.schema; |
| | | |
| | | import static org.forgerock.opendj.ldap.schema.Schema.*; |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.*; |
| | | import static org.forgerock.opendj.ldap.schema.SchemaOptions.*; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Telephone number syntax tests. |
| | | */ |
| | | @Test |
| | | public class TelephoneNumberSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | return new Object[][] { |
| | | { "+61 3 9896 7830", true}, |
| | | { "+1 512 315 0280", true}, |
| | | { "+1-512-315-0280", true}, |
| | | { "3 9896 7830", false}, |
| | | { "+1+512 315 0280", false}, |
| | | { "+1x512x315x0280", false}, |
| | | { " ", false}, |
| | | { "", false} |
| | | }; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | protected Syntax getRule() |
| | | { |
| | | SchemaBuilder builder = new SchemaBuilder(getCoreSchema()).setOption(ALLOW_NON_STANDARD_TELEPHONE_NUMBERS, false); |
| | | return builder.toSchema().getSyntax(SYNTAX_TELEPHONE_OID); |
| | | } |
| | | |
| | | } |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_TELEX_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Telex syntax tests. |
| | | */ |
| | | @Test |
| | | public class TelexSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | @DataProvider(name = "acceptableValues") |
| | | public Object[][] createAcceptableValues() { |
| | | return new Object[][] { { "123$france$456", true }, |
| | | { "abcdefghijk$lmnopqr$stuvwxyz", true }, { "12345$67890$()+,-./:? ", true }, }; |
| | | return new Object[][] { |
| | | { "123$france$456", true }, |
| | | { "abcdefghijk$lmnopqr$stuvwxyz", true }, |
| | | { "12345$67890$()+,-./:? ", true }, }; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | import static org.forgerock.opendj.ldap.schema.SchemaConstants.SYNTAX_UUID_OID; |
| | | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * UUID syntax tests. |
| | | */ |
| | | @Test |
| | | public class UUIDSyntaxTest extends AbstractSyntaxTestCase { |
| | | /** {@inheritDoc} */ |
| | | @Override |