mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

gbellato
26.20.2006 cedfe056e1ce3de8a7e4f34edbb5bdc6f29900f3
Split the Attribute syntaxes tests.
Add some tests for better coverage of the Bit String syntax
13 files added
1 files modified
1273 ■■■■ changed files
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java 283 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java 66 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java 120 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/DITContentRuleSyntaxTest.java 104 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/GeneralizedTimeSyntaxTest.java 83 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/GuideSyntaxTest.java 76 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/IA5StringSyntaxTest.java 60 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java 69 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/MatchingRuleSyntaxTest.java 66 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/MatchingRuleUseSyntaxTest.java 66 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/OtherMailboxSyntaxTest.java 60 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/TelexSyntaxTest.java 71 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/UTCTimeSyntaxTest.java 79 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/UUIDSyntaxTest.java 70 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
@@ -27,280 +27,59 @@
package org.opends.server.schema;
import static org.testng.Assert.*;
import static org.opends.server.schema.SchemaConstants.*;
import org.opends.server.api.AttributeSyntax;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class AttributeSyntaxTest extends SchemaTestCase
public abstract class AttributeSyntaxTest extends SchemaTestCase
{
  /**
   * Create data for the testAcceptableValues test.
   * This should be a table of tables with 2 elements.
   * The first one should be the value to test, the second the expected
   * result of the test.
   *
   * @return a table containing data for the testAcceptableValues Test.
   */
  @DataProvider(name="acceptableValues")
  public Object[][] createapproximateMatchingRuleTest()
  {
    // fill this table with tables containing :
    // - the name of the Syntax rule to test
    // - a value that must be tested for correctness
    // - a boolean indicating if the value is correct.
    return new Object[][] {
        // tests for the UTC time syntax. This time syntax only uses 2 digits
        // for the year but it is currently implemented using 4 digits
        // disable the tests for now.
        // see issue 637
        /*
        {SYNTAX_UTC_TIME_OID,"060906135030+01", true},
        {SYNTAX_UTC_TIME_OID,"0609061350Z", true},
        {SYNTAX_UTC_TIME_OID,"060906135030Z", true},
        {SYNTAX_UTC_TIME_OID,"061116135030Z", true},
        {SYNTAX_UTC_TIME_OID,"061126135030Z", true},
        {SYNTAX_UTC_TIME_OID,"061231235959Z", true},
        {SYNTAX_UTC_TIME_OID,"060906135030+0101", true},
        {SYNTAX_UTC_TIME_OID,"060906135030+2359", true},
        */
        {SYNTAX_UTC_TIME_OID,"060906135030+3359", false},
        {SYNTAX_UTC_TIME_OID,"060906135030+2389", false},
        {SYNTAX_UTC_TIME_OID,"062231235959Z", false},
        {SYNTAX_UTC_TIME_OID,"061232235959Z", false},
        {SYNTAX_UTC_TIME_OID,"06123123595aZ", false},
        {SYNTAX_UTC_TIME_OID,"0a1231235959Z", false},
        {SYNTAX_UTC_TIME_OID,"06j231235959Z", false},
        {SYNTAX_UTC_TIME_OID,"0612-1235959Z", false},
        {SYNTAX_UTC_TIME_OID,"061231#35959Z", false},
        {SYNTAX_UTC_TIME_OID,"2006", false},
  public abstract Object[][] createAcceptableValues();
        // generalized time.
        {SYNTAX_GENERALIZED_TIME_OID,"2006090613Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+01", true},
        {SYNTAX_GENERALIZED_TIME_OID,"200609061350Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20061116135030Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20061126135030Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20061231235959Z", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+0101", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+2359", true},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+3359", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+2389", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+2361", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+0", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+010", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20061200235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"2006121a235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"2006122a235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20060031235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20061331235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20062231235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20061232235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"2006123123595aZ", false},
        {SYNTAX_GENERALIZED_TIME_OID,"200a1231235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"2006j231235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"200612-1235959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"20061231#35959Z", false},
        {SYNTAX_GENERALIZED_TIME_OID,"2006", false},
        // here starts the data for the tests of the Content rule syntax
        {SYNTAX_DIT_CONTENT_RULE_OID,
          "( 2.5.6.4 DESC 'content rule for organization' NOT "
             + "( x121Address $ telexNumber ) )", true},
        {SYNTAX_DIT_CONTENT_RULE_OID,
            "( 2.5.6.4 NAME 'full rule' DESC 'rule with all possible fields' "
              + " OBSOLETE"
              + " AUX ( person )"
              + " MUST ( cn $ sn )"
              + " MAY ( dc )"
              + " NOT ( x121Address $ telexNumber ) )"
                , true},
        {SYNTAX_DIT_CONTENT_RULE_OID,
              "( 2.5.6.4 NAME 'full rule' DESC 'ommit parenthesis' "
                  + " OBSOLETE"
                  + " AUX person "
                  + " MUST cn "
                  + " MAY dc "
                  + " NOT x121Address )"
              , true},
         {SYNTAX_DIT_CONTENT_RULE_OID,
              "( 2.5.6.4 NAME 'full rule' DESC 'use numeric OIDs' "
                + " OBSOLETE"
                + " AUX 2.5.6.6"
                + " MUST cn "
                + " MAY dc "
                + " NOT x121Address )"
                   , true},
         {SYNTAX_DIT_CONTENT_RULE_OID,
               "( 2.5.6.4 NAME 'full rule' DESC 'illegal OIDs' "
               + " OBSOLETE"
               + " AUX 2.5.6.."
               + " MUST cn "
               + " MAY dc "
               + " NOT x121Address )"
               , false},
         {SYNTAX_DIT_CONTENT_RULE_OID,
               "( 2.5.6.4 NAME 'full rule' DESC 'illegal OIDs' "
                 + " OBSOLETE"
                 + " AUX 2.5.6.x"
                 + " MUST cn "
                 + " MAY dc "
                 + " NOT x121Address )"
                 , false},
         {SYNTAX_DIT_CONTENT_RULE_OID,
               "( 2.5.6.4 NAME 'full rule' DESC 'missing closing parenthesis' "
                 + " OBSOLETE"
                 + " AUX person "
                 + " MUST cn "
                 + " MAY dc "
                 + " NOT x121Address"
             , false},
         {SYNTAX_DIT_CONTENT_RULE_OID,
               "( 2.5.6.4 NAME 'full rule' DESC 'extra parameterss' "
                 + " MUST cn "
                 + "( this is an extra parameter )"
             , true},
         // Here start the data for the tests of the matching rule syntaxes
         {SYNTAX_MATCHING_RULE_OID,
               "( 1.2.3.4 NAME 'full matching rule' "
               + " DESC 'description of matching rule' OBSOLETE "
               + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.17 "
               + " ( this is an extension ) )", true},
         {SYNTAX_MATCHING_RULE_OID,
               "( 1.2.3.4 NAME 'missing closing parenthesis' "
               + " DESC 'description of matching rule' "
               + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.17 "
               + " ( this is an extension ) ", false},
         // Here start the data for the tests of the matching rule use syntaxes
         {SYNTAX_MATCHING_RULE_USE_OID,
               "( 2.5.13.10 NAME 'full matching rule' "
               + " DESC 'description of matching rule' OBSOLETE "
               + " APPLIES 2.5.4.3 "
               + " ( this is an extension ) )", true},
         {SYNTAX_MATCHING_RULE_USE_OID,
                     "( 2.5.13.10 NAME 'missing closing parenthesis' "
                     + " DESC 'description of matching rule' "
                     + " SYNTAX 2.5.4.3 "
                     + " ( this is an extension ) ", false},
         {SYNTAX_BIT_STRING_OID, "'0101'B", true},
         {SYNTAX_BIT_STRING_OID, "'1'B", true},
         {SYNTAX_BIT_STRING_OID, "'0'B", true},
         {SYNTAX_BIT_STRING_OID, "invalid", false},
         // disabled because test is failing :
         // {SYNTAX_LDAP_SYNTAX_OID,
         //   "( 2.5.4.3 DESC 'full syntax description' "
         //  + "( this is an extension ) )", true},
         {SYNTAX_LDAP_SYNTAX_OID,
             "( 2.5.4.3 DESC 'full syntax description' )", true},
         {SYNTAX_LDAP_SYNTAX_OID,
               "   (    2.5.4.3    DESC  ' syntax description'    )", true},
         {SYNTAX_LDAP_SYNTAX_OID,
               "( 2.5.4.3 DESC syntax description )", false},
         {SYNTAX_LDAP_SYNTAX_OID,
                 "($%^*&!@ DESC 'syntax description' )", false},
         {SYNTAX_LDAP_SYNTAX_OID,
                   "(temp-oid DESC 'syntax description' )", true},
         {SYNTAX_LDAP_SYNTAX_OID,
                   "2.5.4.3 DESC 'syntax description' )", false},
         {SYNTAX_LDAP_SYNTAX_OID,
                     "(2.5.4.3 DESC 'syntax description' ", false},
         {SYNTAX_GUIDE_OID, "sn$EQ|!(sn$EQ)", true},
         {SYNTAX_GUIDE_OID, "!(sn$EQ)", true},
         {SYNTAX_GUIDE_OID, "person#sn$EQ", true},
         {SYNTAX_GUIDE_OID, "(sn$EQ)", true},
         {SYNTAX_GUIDE_OID, "sn$EQ", true},
         {SYNTAX_GUIDE_OID, "sn$SUBSTR", true},
         {SYNTAX_GUIDE_OID, "sn$GE", true},
         {SYNTAX_GUIDE_OID, "sn$LE", true},
         {SYNTAX_GUIDE_OID, "sn$ME", false},
         {SYNTAX_GUIDE_OID, "?true", true},
         {SYNTAX_GUIDE_OID, "?false", true},
         {SYNTAX_GUIDE_OID, "true|sn$GE", false},
         {SYNTAX_GUIDE_OID, "sn$APPROX", true},
         {SYNTAX_GUIDE_OID, "sn$EQ|(sn$EQ)", true},
         {SYNTAX_GUIDE_OID, "sn$EQ|(sn$EQ", false},
         {SYNTAX_GUIDE_OID, "sn$EQ|(sn$EQ)|sn$EQ", true},
         {SYNTAX_GUIDE_OID, "sn$EQ|(cn$APPROX&?false)", true},
         {SYNTAX_GUIDE_OID, "sn$EQ|(cn$APPROX&|?false)", false},
         {SYNTAX_ATTRIBUTE_TYPE_OID,
           "(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP 1.2" +
           " EQUALITY 2.3 ORDERING 5.6 SUBSTR 7.8 SYNTAX 9.1 SINGLE-VALUE" +
           " COLLECTIVE NO-USER-MODIFICATION USAGE directoryOperations )",
           true},
         {SYNTAX_ATTRIBUTE_TYPE_OID,
               "(1.2.8.5 NAME 'testtype' DESC 'full type')",
               true},
         {SYNTAX_ATTRIBUTE_TYPE_OID,
               "(1.2.8.5 USAGE directoryOperations )",
               true},
         {SYNTAX_UUID_OID, "12345678-9ABC-DEF0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "02345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "02345678-9abc-def0-1234-1234567890ab", true},
         {SYNTAX_UUID_OID, "G2345678-9abc-def0-1234-1234567890ab", false},
         {SYNTAX_UUID_OID, "g2345678-9abc-def0-1234-1234567890ab", false},
         {SYNTAX_UUID_OID, "12345678/9abc/def0/1234/1234567890ab", false},
         {SYNTAX_UUID_OID, "12345678-9abc-def0-1234-1234567890a", false},
         {SYNTAX_IA5_STRING_OID, "12345678", true},
         {SYNTAX_IA5_STRING_OID, "12345678\u2163", false},
         {SYNTAX_OTHER_MAILBOX_OID, "MyMail$Mymailbox", true},
         {SYNTAX_OTHER_MAILBOX_OID, "MyMailMymailbox", false},
         {SYNTAX_TELEX_OID, "123$france$456", true},
         {SYNTAX_TELEX_OID, "abcdefghijk$lmnopqr$stuvwxyz", true},
         {SYNTAX_TELEX_OID, "12345$67890$()+,-./:? ", true},
         /*
          * disabled because of issue : 701
          * should accept "
         {SYNTAX_TELEX_OID, "12345$67890$\"\"\"", true},
         */
         /* disabled because of issue : 701
          * should not accept backslash and equal sign
         {SYNTAX_TELEX_OID, "12345$67890$\'\'", false},
         {SYNTAX_TELEX_OID, "12345$67890$===", false},*/
    };
  }
  /**
   * Get an instance of the attribute syntax that muste be tested.
   *
   * @return An instance of the attribute syntax that muste be tested.
   */
  public abstract AttributeSyntax getRule();
  /**
   * Test the normalization and the approximate comparison.
   */
  @Test(dataProvider= "acceptableValues")
  public void testAcceptableValues(String oid, String value,
      Boolean result) throws Exception
  public void testAcceptableValues(String value, Boolean result)
         throws Exception
  {
    // Make sure that the specified class can be instantiated as a task.
    AttributeSyntax rule = DirectoryServer.getAttributeSyntax(oid, false);
    AttributeSyntax syntax = getRule();
    StringBuilder reason = new StringBuilder();
    // normalize the 2 provided values and check that they are equals
    // test the valueIsAcceptable method
    Boolean liveResult =
      rule.valueIsAcceptable(new ASN1OctetString(value), reason);
      syntax.valueIsAcceptable(new ASN1OctetString(value), reason);
    
    if (liveResult != result)
      fail(rule + ".valueIsAcceptable gave bad result for " + value +
      fail(syntax + ".valueIsAcceptable gave bad result for " + value +
          "reason : " + reason);
    // call the getters to increase code coverage...
    rule.getApproximateMatchingRule();
    rule.getDescription();
    rule.getEqualityMatchingRule();
    rule.getOID();
    rule.getOrderingMatchingRule();
    rule.getSubstringMatchingRule();
    rule.getSyntaxName();
    rule.toString();
    // call the getters
    syntax.getApproximateMatchingRule();
    syntax.getDescription();
    syntax.getEqualityMatchingRule();
    syntax.getOID();
    syntax.getOrderingMatchingRule();
    syntax.getSubstringMatchingRule();
    syntax.getSyntaxName();
    syntax.toString();
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
New file
@@ -0,0 +1,66 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the AttributeTypeSyntax.
 */
public class AttributeTypeSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new AttributeTypeSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"(1.2.8.5 NAME 'testtype' DESC 'full type' OBSOLETE SUP 1.2" +
          " EQUALITY 2.3 ORDERING 5.6 SUBSTR 7.8 SYNTAX 9.1 SINGLE-VALUE" +
          " COLLECTIVE NO-USER-MODIFICATION USAGE directoryOperations )",
          true},
        {"(1.2.8.5 NAME 'testtype' DESC 'full type')",
              true},
        {"(1.2.8.5 USAGE directoryOperations )",
              true},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
New file
@@ -0,0 +1,120 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import static org.testng.Assert.*;
import org.opends.server.api.AttributeSyntax;
import org.opends.server.api.EqualityMatchingRule;
import org.opends.server.config.ConfigEntry;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.types.ByteString;
import org.opends.server.types.DN;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
 * Test the BitStringSyntax.
 */
public class BitStringSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new BitStringSyntax();
  }
  /**
   * {@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},
    };
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @Test(dataProvider= "acceptableValues")
  public void testAcceptableValues(String value, Boolean result) throws Exception
  {
    AttributeSyntax syntax = new BitStringSyntax();
    ConfigEntry configEntry = DirectoryServer.getConfigEntry(
                        DN.decode("cn=Bit String,cn=Syntaxes,cn=config"));
    syntax.initializeSyntax(configEntry);
    ByteString byteStringValue = new ASN1OctetString(value);
    StringBuilder reason = new StringBuilder();
    Boolean liveResult =
      syntax.valueIsAcceptable(byteStringValue, reason);
    if (liveResult != result)
      fail(syntax + ".valueIsAcceptable gave bad result for " + value +
          "reason : " + reason);
    if (result == true)
    {
      byte[] decodedValue =
        BitStringSyntax.decodeBitStringValue(byteStringValue);
      ByteString newValue =
        BitStringSyntax.createBitStringValue(decodedValue).getNormalizedValue();
      EqualityMatchingRule matchingRule = syntax.getEqualityMatchingRule();
     /* disabled because it currently fails
      * see issue
      *
      * assertTrue(matchingRule.areEqual(byteStringValue, newValue));
      */
    }
    // call the getters
    syntax.getApproximateMatchingRule();
    syntax.getDescription();
    syntax.getOID();
    syntax.getOrderingMatchingRule();
    syntax.getSubstringMatchingRule();
    syntax.getSyntaxName();
    syntax.toString();
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/DITContentRuleSyntaxTest.java
New file
@@ -0,0 +1,104 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the DITContentRuleSyntax.
 */
public class DITContentRuleSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new DITContentRuleSyntax();
  }
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"( 2.5.6.4 DESC 'content rule for organization' NOT "
             + "( x121Address $ telexNumber ) )", true},
        {"( 2.5.6.4 NAME 'full rule' DESC 'rule with all possible fields' "
              + " OBSOLETE"
              + " AUX ( person )"
              + " MUST ( cn $ sn )"
              + " MAY ( dc )"
              + " NOT ( x121Address $ telexNumber ) )"
                , true},
        {"( 2.5.6.4 NAME 'full rule' DESC 'ommit parenthesis' "
                  + " OBSOLETE"
                  + " AUX person "
                  + " MUST cn "
                  + " MAY dc "
                  + " NOT x121Address )"
              , true},
         {"( 2.5.6.4 NAME 'full rule' DESC 'use numeric OIDs' "
                + " OBSOLETE"
                + " AUX 2.5.6.6"
                + " MUST cn "
                + " MAY dc "
                + " NOT x121Address )"
                   , true},
         {"( 2.5.6.4 NAME 'full rule' DESC 'illegal OIDs' "
               + " OBSOLETE"
               + " AUX 2.5.6.."
               + " MUST cn "
               + " MAY dc "
               + " NOT x121Address )"
               , false},
         {"( 2.5.6.4 NAME 'full rule' DESC 'illegal OIDs' "
                 + " OBSOLETE"
                 + " AUX 2.5.6.x"
                 + " MUST cn "
                 + " MAY dc "
                 + " NOT x121Address )"
                 , false},
         {"( 2.5.6.4 NAME 'full rule' DESC 'missing closing parenthesis' "
                 + " OBSOLETE"
                 + " AUX person "
                 + " MUST cn "
                 + " MAY dc "
                 + " NOT x121Address"
             , false},
         {"( 2.5.6.4 NAME 'full rule' DESC 'extra parameterss' "
                 + " MUST cn "
                 + "( this is an extra parameter )"
             , true},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/GeneralizedTimeSyntaxTest.java
New file
@@ -0,0 +1,83 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the GeneralizedTimeSyntax.
 */
public class GeneralizedTimeSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new GeneralizedTimeSyntax();
  }
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"2006090613Z", true},
        {"20060906135030+01", true},
        {"200609061350Z", true},
        {"20060906135030Z", true},
        {"20061116135030Z", true},
        {"20061126135030Z", true},
        {"20061231235959Z", true},
        {"20060906135030+0101", true},
        {"20060906135030+2359", true},
        {"20060906135030+3359", false},
        {"20060906135030+2389", false},
        {"20060906135030+2361", false},
        {"20060906135030+", false},
        {"20060906135030+0", false},
        {"20060906135030+010", false},
        {"20061200235959Z", false},
        {"2006121a235959Z", false},
        {"2006122a235959Z", false},
        {"20060031235959Z", false},
        {"20061331235959Z", false},
        {"20062231235959Z", false},
        {"20061232235959Z", false},
        {"2006123123595aZ", false},
        {"200a1231235959Z", false},
        {"2006j231235959Z", false},
        {"200612-1235959Z", false},
        {"20061231#35959Z", false},
        {"2006", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/GuideSyntaxTest.java
New file
@@ -0,0 +1,76 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the GuideSyntax.
 */
public class GuideSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new GuideSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"sn$EQ|!(sn$EQ)", true},
        {"!(sn$EQ)", true},
        {"person#sn$EQ", true},
        {"(sn$EQ)", true},
        {"sn$EQ", true},
        {"sn$SUBSTR", true},
        {"sn$GE", true},
        {"sn$LE", true},
        {"sn$ME", false},
        {"?true", true},
        {"?false", true},
        {"true|sn$GE", false},
        {"sn$APPROX", true},
        {"sn$EQ|(sn$EQ)", true},
        {"sn$EQ|(sn$EQ", false},
        {"sn$EQ|(sn$EQ)|sn$EQ", true},
        {"sn$EQ|(cn$APPROX&?false)", true},
        {"sn$EQ|(cn$APPROX&|?false)", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/IA5StringSyntaxTest.java
New file
@@ -0,0 +1,60 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the IA5StringSyntax.
 */
public class IA5StringSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new IA5StringSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"12345678", true},
        {"12345678\u2163", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/LDAPSyntaxTest.java
New file
@@ -0,0 +1,69 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the LDAPSyntaxDescriptionSyntax.
 */
public class LDAPSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new LDAPSyntaxDescriptionSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        // disabled because test is failing :
        // {
        //   "( 2.5.4.3 DESC 'full syntax description' "
        //  + "( this is an extension ) )", true},
        {"( 2.5.4.3 DESC 'full syntax description' )", true},
        {"   (    2.5.4.3    DESC  ' syntax description'    )", true},
        {"( 2.5.4.3 DESC syntax description )", false},
        {"($%^*&!@ 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},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/MatchingRuleSyntaxTest.java
New file
@@ -0,0 +1,66 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the MatchingRuleSyntax.
 */
public class MatchingRuleSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new MatchingRuleSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
          {"( 1.2.3.4 NAME 'full matching rule' "
              + " DESC 'description of matching rule' OBSOLETE "
              + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.17 "
              + " ( this is an extension ) )", true},
          {"( 1.2.3.4 NAME 'missing closing parenthesis' "
                + " DESC 'description of matching rule' "
                + " SYNTAX 1.3.6.1.4.1.1466.115.121.1.17 "
                + " ( this is an extension ) ", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/MatchingRuleUseSyntaxTest.java
New file
@@ -0,0 +1,66 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the MatchingRuleUseSyntax.
 */
public class MatchingRuleUseSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new MatchingRuleUseSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"( 2.5.13.10 NAME 'full matching rule' "
            + " DESC 'description of matching rule' OBSOLETE "
            + " APPLIES 2.5.4.3 "
            + " ( this is an extension ) )", true},
        {"( 2.5.13.10 NAME 'missing closing parenthesis' "
            + " DESC 'description of matching rule' "
            + " SYNTAX 2.5.4.3 "
            + " ( this is an extension ) ", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/OtherMailboxSyntaxTest.java
New file
@@ -0,0 +1,60 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the OtherMailboxSyntax.
 */
public class OtherMailboxSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new OtherMailboxSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"MyMail$Mymailbox", true},
        {"MyMailMymailbox", false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/TelexSyntaxTest.java
New file
@@ -0,0 +1,71 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the TelexNumberSyntax.
 */
public class TelexSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new TelexNumberSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"123$france$456", true},
        {"abcdefghijk$lmnopqr$stuvwxyz", true},
        {"12345$67890$()+,-./:? ", true},
        /*
         * disabled because of issue : 701
         * should accept "
        {"12345$67890$\"\"\"", true},
        */
        /* disabled because of issue : 701
         * should not accept backslash and equal sign
        {"12345$67890$\'\'", false},
        {"12345$67890$===", false},*/
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/UTCTimeSyntaxTest.java
New file
@@ -0,0 +1,79 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the UTCTimeSyntax.
 */
public class UTCTimeSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new UTCTimeSyntax();
  }
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        // tests for the UTC time syntax. This time syntax only uses 2 digits
        // for the year but it is currently implemented using 4 digits
        // disable the tests for now.
        // see issue 637
        /*
        {"060906135030+01",   true},
        {"0609061350Z",       true},
        {"060906135030Z",     true},
        {"061116135030Z",     true},
        {"061126135030Z",     true},
        {"061231235959Z",     true},
        {"060906135030+0101", true},
        {"060906135030+2359", true},
        */
        {"060906135030+3359", false},
        {"060906135030+2389", false},
        {"062231235959Z",     false},
        {"061232235959Z",     false},
        {"06123123595aZ",     false},
        {"0a1231235959Z",     false},
        {"06j231235959Z",     false},
        {"0612-1235959Z",     false},
        {"061231#35959Z",     false},
        {"2006",              false},
    };
  }
}
opends/tests/unit-tests-testng/src/server/org/opends/server/schema/UUIDSyntaxTest.java
New file
@@ -0,0 +1,70 @@
/*
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * 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
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  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
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server.schema;
import org.opends.server.api.AttributeSyntax;
import org.testng.annotations.DataProvider;
/**
 * Test the UUIDSyntax.
 */
public class UUIDSyntaxTest extends AttributeSyntaxTest
{
  /**
   * {@inheritDoc}
   */
  @Override
  public AttributeSyntax getRule()
  {
    return new UUIDSyntax();
  }
  /**
   * {@inheritDoc}
   */
  @Override
  @DataProvider(name="acceptableValues")
  public Object[][] createAcceptableValues()
  {
    return new Object [][] {
        {"12345678-9ABC-DEF0-1234-1234567890ab", true},
        {"12345678-9abc-def0-1234-1234567890ab", true},
        {"12345678-9abc-def0-1234-1234567890ab", true},
        {"12345678-9abc-def0-1234-1234567890ab", true},
        {"02345678-9abc-def0-1234-1234567890ab", true},
        {"12345678-9abc-def0-1234-1234567890ab", true},
        {"12345678-9abc-def0-1234-1234567890ab", true},
        {"02345678-9abc-def0-1234-1234567890ab", true},
        {"G2345678-9abc-def0-1234-1234567890ab", false},
        {"g2345678-9abc-def0-1234-1234567890ab", false},
        {"12345678/9abc/def0/1234/1234567890ab", false},
        {"12345678-9abc-def0-1234-1234567890a", false},
    };
  }
}