| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| package org.apache.directory.shared.ldap.model.schema.syntaxes.parser; |
| |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.text.ParseException; |
| |
| import com.mycila.junit.concurrent.Concurrency; |
| import com.mycila.junit.concurrent.ConcurrentJunitRunner; |
| import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl; |
| import org.apache.directory.shared.ldap.model.schema.UsageEnum; |
| import org.apache.directory.shared.ldap.model.schema.parsers.ConsoleParserMonitor; |
| import org.apache.directory.shared.ldap.model.schema.parsers.AttributeTypeDescriptionSchemaParser; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| /** |
| * Tests the AttributeTypeDescriptionSchemaParser class. |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| @RunWith(ConcurrentJunitRunner.class) |
| @Concurrency() |
| public class AttributeTypeDescriptionSchemaParserTest |
| { |
| /** the parser instance */ |
| private AttributeTypeDescriptionSchemaParser parser; |
| |
| |
| @Before |
| public void setUp() throws Exception |
| { |
| parser = new AttributeTypeDescriptionSchemaParser(); |
| parser.setParserMonitor( new ConsoleParserMonitor() ); |
| } |
| |
| |
| @After |
| public void tearDown() throws Exception |
| { |
| parser = null; |
| } |
| |
| |
| /** |
| * Test numericoid |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testNumericOid() throws ParseException |
| { |
| SchemaParserTestUtils.testNumericOid( parser, "SYNTAX 1.1" ); |
| } |
| |
| |
| /** |
| * Tests NAME and its values |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testNames() throws ParseException |
| { |
| SchemaParserTestUtils.testNames( parser, "1.1", "SYNTAX 1.1" ); |
| } |
| |
| |
| /** |
| * Tests DESC |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testDescription() throws ParseException |
| { |
| SchemaParserTestUtils.testDescription( parser, "1.1", "SYNTAX 1.1" ); |
| } |
| |
| |
| /** |
| * Tests OBSOLETE |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testObsolete() throws ParseException |
| { |
| SchemaParserTestUtils.testObsolete(parser, "1.1", "SYNTAX 1.1"); |
| } |
| |
| |
| /** |
| * Test SUP and its value. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testSuperType() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // no SUP |
| value = "( 1.1 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getSuperiorOid() ); |
| |
| // SUP numericoid |
| value = "( 1.1 SYNTAX 1.1 SUP 1.2.3.4.5.6.7.8.9.0 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4.5.6.7.8.9.0", attributeType.getSuperiorOid() ); |
| |
| // SUP descr, no space |
| value = "(1.1 SYNTAX1.1 SUPabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getSuperiorOid() ); |
| |
| // SUP descr, newline |
| value = "\t(\t1.1\tSYNTAX\t1.1\tSUP\tabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789\t)\t"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getSuperiorOid() ); |
| |
| // quoted SUP value |
| value = "( 1.1 SYNTAX 1.1 SUP 'name' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "name", attributeType.getSuperiorOid() ); |
| |
| // quoted SUP value |
| value = "( 1.1 SYNTAX 1.1 SUP '1.2.3.4' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4", attributeType.getSuperiorOid() ); |
| |
| // quoted SUP value |
| value = "( 1.1 SYNTAX 1.1 SUP ('1.2.3.4') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4", attributeType.getSuperiorOid() ); |
| |
| // invalid character |
| value = "( 1.1 SYNTAX 1.1 SUP 1.2.3.4.A )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SUP '1.2.3.4.A' (invalid character)" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| // only single SUP allowed |
| value = "( 1.1 SYNTAX 1.1 SUP ( name1 $ name2 ) )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, only single SUP allowed" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| // empty sup |
| value = "( 1.1 SYNTAX 1.1 SUP )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, no SUP value" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Tests EQUALITY and its values. |
| * Very similar to SUP, so here are less test cases. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testEquality() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // no EQUALITY |
| value = "( 1.1 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getEqualityOid() ); |
| |
| // EQUALITY numericoid |
| value = "( 1.1 SYNTAX 1.1 EQUALITY 1.2.3.4567.8.9.0 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getEqualityOid() ); |
| |
| // EQUALITY descr, no space |
| value = "(1.1 SYNTAX1.1 EQUALITYabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getEqualityOid() ); |
| |
| // EQUALITY descr, newline |
| value = "\n(\n1.1\nSYNTAX\n1.1\nEQUALITY\nabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789\n)\n"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getEqualityOid() ); |
| |
| // quoted value |
| value = "( 1.1 SYNTAX 1.1 EQUALITY 'caseExcactMatch' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "caseExcactMatch", attributeType.getEqualityOid() ); |
| |
| // quote value in parentheses |
| value = "( 1.1 SYNTAX 1.1 EQUALITY ('caseExcactMatch') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "caseExcactMatch", attributeType.getEqualityOid() ); |
| } |
| |
| |
| /** |
| * Tests ORDERING and its values. |
| * Very similar to SUP, so here are less test cases. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testOrdering() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // no ORDERING |
| value = "( 1.1 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getOrderingOid() ); |
| |
| // ORDERING numericoid |
| value = "( 1.1 SYNTAX 1.1 ORDERING 1.2.3.4567.8.9.0 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getOrderingOid() ); |
| |
| // ORDERING descr, no space |
| value = "(1.1 SYNTAX1.1 ORDERINGabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getOrderingOid() ); |
| |
| // ORDERING descr, newline |
| value = "\r(\r1.1\rSYNTAX\r1.1\rORDERING\rabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789\r)\r"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getOrderingOid() ); |
| |
| // quoted value |
| value = "( 1.1 SYNTAX 1.1 ORDERING 'generalizedTimeOrderingMatch' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "generalizedTimeOrderingMatch", attributeType.getOrderingOid() ); |
| |
| // quote value in parentheses |
| value = "( 1.1 SYNTAX 1.1 ORDERING ('generalizedTimeOrderingMatch') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "generalizedTimeOrderingMatch", attributeType.getOrderingOid() ); |
| } |
| |
| |
| /** |
| * Tests SUBSTRING and its values. |
| * Very similar to SUP, so here are less test cases. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testSubstring() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // no SUBSTR |
| value = "( 1.1 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getSubstringOid() ); |
| |
| // SUBSTR numericoid |
| value = "( 1.1 SYNTAX 1.1 SUBSTR 1.2.3.4567.8.9.0 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSubstringOid() ); |
| |
| // SUBSTR descr, no space |
| value = "(1.1 SYNTAX1.1 SUBSTRabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getSubstringOid() ); |
| |
| // SUBSTR descr, newline |
| value = "\r\n(\r\n1.1\r\nSYNTAX\r\n1.1\r\nSUBSTR\r\nabcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789\r\n)\r\n"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getSubstringOid() ); |
| |
| // quoted value |
| value = "( 1.1 SYNTAX 1.1 SUBSTR 'caseIgnoreSubstringsMatch' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "caseIgnoreSubstringsMatch", attributeType.getSubstringOid() ); |
| |
| // quote value in parentheses |
| value = "( 1.1 SYNTAX 1.1 SUBSTR ('caseIgnoreSubstringsMatch') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "caseIgnoreSubstringsMatch", attributeType.getSubstringOid() ); |
| } |
| |
| |
| /** |
| * Tests SYNTAX |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testSyntax() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // no SYNTAX |
| value = "( 1.1 SUP 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // SYNTAX string |
| value = "( 1.1 SYNTAX IA5String )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "IA5String", attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // SYNTAX numericoid |
| value = "( 1.1 SYNTAX 1.2.3.4567.8.9.0 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // quoted numericoid |
| value = "( 1.1 SYNTAX '1.2.3.4567.8.9.0' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // quoted numericoid |
| value = "( 1.1 SYNTAX ('1.2.3.4567.8.9.0') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // SYNTAX numericoid and length, no spaces |
| value = "(1.1 SYNTAX1.2.3.4567.8.9.0{1234567890})"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSyntaxOid() ); |
| assertEquals( 1234567890, attributeType.getSyntaxLength() ); |
| |
| // SYNTAX, with tabs |
| value = "\t(\t1.1\tSYNTAX\t1.2.3.4567.8.9.0\t{1234567890}\t)\t"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4567.8.9.0", attributeType.getSyntaxOid() ); |
| assertEquals( 1234567890, attributeType.getSyntaxLength() ); |
| |
| // SYNTAX numericoid and zero length |
| value = "( 1.1 SYNTAX 1.2.3 {0} )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3", attributeType.getSyntaxOid() ); |
| assertEquals( 0, attributeType.getSyntaxLength() ); |
| |
| // quoted value |
| value = "( 1.1 SYNTAX '1.2.3{32}' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3", attributeType.getSyntaxOid() ); |
| assertEquals( 32, attributeType.getSyntaxLength() ); |
| |
| // quote value in parentheses |
| value = "( 1.1 SYNTAX ( '1.2.3{32}' ) )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3", attributeType.getSyntaxOid() ); |
| assertEquals( 32, attributeType.getSyntaxLength() ); |
| |
| // empty length |
| value = "( 1.1 SYNTAX 1.2.3.4{} )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SYNTAX 1.2.3.4{} (empty length)" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| // leading zero in length |
| value = "( 1.1 SYNTAX 1.2.3.4{01} )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "1.2.3.4", attributeType.getSyntaxOid() ); |
| assertEquals( 1, attributeType.getSyntaxLength() ); |
| |
| // invalid syntax length |
| value = "( 1.1 SYNTAX 1.2.3.4{X} )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SYNTAX 1.2.3.4{X} (invalid length)" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| // no syntax |
| value = "( 1.1 SYNTAX {32} )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SYNTAX {32} (no syntax)" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| // length overflow |
| value = "( 1.1 SYNTAX 1.2.3.4{123456789012234567890} )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SYNTAX 1.2.3.4{12345678901234567890} (length overflow)" ); |
| } |
| catch ( NumberFormatException nfe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Tests SINGLE-VALUE |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testSingleValue() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // not single-value |
| value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isSingleValued() ); |
| |
| // single-value |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' SINGLE-VALUE)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isSingleValued() ); |
| |
| // single-value |
| value = "(1.1 SYNTAX 1.1 SINGLE-VALUE)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isSingleValued() ); |
| |
| // invalid |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' SINGLE-VALU )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid SINGLE-VALUE value" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Tests COLLECTIVE |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testCollective() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // not collective |
| value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isCollective() ); |
| |
| // single-value |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' COLLECTIVE )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isCollective() ); |
| |
| // single-value |
| value = "(1.1 SYNTAX 1.1 COLLECTIVE)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isCollective() ); |
| |
| // ivalid |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' COLLECTIV )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid COLLECTIVE value" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Tests NO-USER-MODIFICATION |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testNoUserModification() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // not NO-USER-MODIFICATION |
| value = "( 1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isUserModifiable() ); |
| |
| // NO-USER-MODIFICATION |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' NO-USER-MODIFICATION USAGE directoryOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isUserModifiable() ); |
| |
| // NO-USER-MODIFICATION |
| value = "(1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE directoryOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isUserModifiable() ); |
| |
| // ivalid |
| value = "(1.1 SYNTAX 1.1 NAME 'test' DESC 'Descripton' NO-USER-MODIFICATIO USAGE directoryOperation )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid NO-USER-MODIFICATION value" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Tests usage |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testUsage() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| // DEFAULT is userApplications |
| value = "( 1.1 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| |
| // userApplications |
| value = "( 1.1 SYNTAX 1.1 USAGE userApplications )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| |
| // directoryOperation |
| value = "( 1.1 SYNTAX 1.1 USAGE directoryOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.DIRECTORY_OPERATION, attributeType.getUsage() ); |
| |
| // distributedOperation, tabs |
| value = "\t(\t1.1\tSYNTAX\t1.1\tUSAGE\tdistributedOperation\t)\t"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.DISTRIBUTED_OPERATION, attributeType.getUsage() ); |
| |
| // dSAOperation, no space |
| value = "(1.1 SYNTAX1.1 USAGEdSAOperation)"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.DSA_OPERATION, attributeType.getUsage() ); |
| |
| // directoryOperation, case insensitivity |
| value = "( 1.1 SYNTAX 1.1 USAGE DiReCtOrYoPeRaTiOn )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( UsageEnum.DIRECTORY_OPERATION, attributeType.getUsage() ); |
| |
| // ivalid |
| value = "( 1.1 SYNTAX 1.1 USAGE abc )"; |
| try |
| { |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, invalid USAGE value" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| |
| |
| /** |
| * Test extensions. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testExtensions() throws ParseException |
| { |
| SchemaParserTestUtils.testExtensions( parser, "1.1", "SYNTAX 1.1" ); |
| } |
| |
| |
| /** |
| * Test full attribute type description. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testFull() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| value = "( 1.2.3.4.5.6.7.8.9.0 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton \u00E4\u00F6\u00FC\u00DF \u90E8\u9577' OBSOLETE SUP abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 EQUALITY 2.3.4.5.6.7.8.9.0.1 ORDERING 3.4.5.6.7.8.9.0.1.2 SUBSTR 4.5.6.7.8.9.0.1.2.3 SYNTAX 5.6.7.8.9.0.1.2.3.4{1234567890} SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| |
| assertEquals( "1.2.3.4.5.6.7.8.9.0", attributeType.getOid() ); |
| assertEquals( 2, attributeType.getNames().size() ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType.getNames().get( |
| 0 ) ); |
| assertEquals( "test", attributeType.getNames().get( 1 ) ); |
| assertEquals( "Descripton \u00E4\u00F6\u00FC\u00DF \u90E8\u9577", attributeType.getDescription() ); |
| assertTrue( attributeType.isObsolete() ); |
| assertEquals( "abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789", attributeType |
| .getSuperiorOid() ); |
| assertEquals( "2.3.4.5.6.7.8.9.0.1", attributeType.getEqualityOid() ); |
| assertEquals( "3.4.5.6.7.8.9.0.1.2", attributeType.getOrderingOid() ); |
| assertEquals( "4.5.6.7.8.9.0.1.2.3", attributeType.getSubstringOid() ); |
| assertEquals( "5.6.7.8.9.0.1.2.3.4", attributeType.getSyntaxOid() ); |
| assertEquals( 1234567890, attributeType.getSyntaxLength() ); |
| |
| assertTrue( attributeType.isSingleValued() ); |
| assertFalse( attributeType.isCollective() ); |
| assertFalse( attributeType.isUserModifiable() ); |
| assertEquals( UsageEnum.DSA_OPERATION, attributeType.getUsage() ); |
| |
| assertEquals( 2, attributeType.getExtensions().size() ); |
| assertNotNull( attributeType.getExtensions().get( "X-TEST-a" ) ); |
| assertEquals( 2, attributeType.getExtensions().get( "X-TEST-a" ).size() ); |
| assertEquals( "test1-1", attributeType.getExtensions().get( "X-TEST-a" ).get( 0 ) ); |
| assertEquals( "test1-2", attributeType.getExtensions().get( "X-TEST-a" ).get( 1 ) ); |
| assertNotNull( attributeType.getExtensions().get( "X-TEST-b" ) ); |
| assertEquals( 2, attributeType.getExtensions().get( "X-TEST-b" ).size() ); |
| assertEquals( "test2-1", attributeType.getExtensions().get( "X-TEST-b" ).get( 0 ) ); |
| assertEquals( "test2-2", attributeType.getExtensions().get( "X-TEST-b" ).get( 1 ) ); |
| } |
| |
| |
| /** |
| * Test unique elements. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testUniqueElements() |
| { |
| String[] testValues = new String[] |
| { "( 1.1 SYNTAX 1.1 NAME 'test1' NAME 'test2' )", "( 1.1 SYNTAX 1.1 DESC 'test1' DESC 'test2' )", |
| "( 1.1 SYNTAX 1.1 OBSOLETE OBSOLETE )", "( 1.1 SYNTAX 1.1 SUP test1 SUP test2 )", |
| "( 1.1 SYNTAX 1.1 EQUALITY test1 EQUALITY test2 )", "( 1.1 SYNTAX 1.1 ORDERING test1 ORDERING test2 )", |
| "( 1.1 SYNTAX 1.1 SUBSTR test1 SUBSTR test2 )", "( 1.1 SYNTAX 1.1 SYNTAX 2.2 SYNTAX 3.3 )", |
| "( 1.1 SYNTAX 1.1 SINGLE-VALUE SINGLE-VALUE )", "( 1.1 SYNTAX 1.1 COLLECTIVE COLLECTIVE )", |
| "( 1.1 SYNTAX 1.1 USAGE directoryOperation NO-USER-MODIFICATION NO-USER-MODIFICATION )", |
| "( 1.1 SYNTAX 1.1 USAGE directoryOperation USAGE userApplications )", |
| "( 1.1 SYNTAX 1.1 X-TEST 'test1' X-TEST 'test2' )" }; |
| SchemaParserTestUtils.testUnique( parser, testValues ); |
| } |
| |
| |
| /** |
| * Test required elements. |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testRequiredElements() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| value = "( 1.2.3.4.5.6.7.8.9.0 SYNTAX 1.1 SUP 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNotNull( attributeType.getSyntaxOid() ); |
| assertNotNull( attributeType.getSuperiorOid() ); |
| |
| value = "( 1.2.3.4.5.6.7.8.9.0 SYNTAX 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNotNull( attributeType.getSyntaxOid() ); |
| assertNull( attributeType.getSuperiorOid() ); |
| |
| value = "( 1.2.3.4.5.6.7.8.9.0 SUP 1.1 )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertNull( attributeType.getSyntaxOid() ); |
| assertNotNull( attributeType.getSuperiorOid() ); |
| |
| if ( !parser.isQuirksMode() ) |
| { |
| value = "( 1.2.3.4.5.6.7.8.9.0 )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, SYNTAX or SUP is required" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| } |
| |
| |
| /** |
| * Test collective constraint: |
| * COLLECTIVE requires USAGE userApplications |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testCollecitveConstraint() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| value = "( 1.1 SYNTAX 1.1 COLLECTIVE )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isCollective() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| |
| value = "( 1.1 SYNTAX 1.1 COLLECTIVE USAGE userApplications )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertTrue( attributeType.isCollective() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| |
| if ( !parser.isQuirksMode() ) |
| { |
| value = "( 1.1 SYNTAX 1.1 COLLECTIVE USAGE directoryOperation )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, COLLECTIVE requires USAGE userApplications" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| value = "( 1.1 SYNTAX 1.1 COLLECTIVE USAGE dSAOperation )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, COLLECTIVE requires USAGE userApplications" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| value = "( 1.1 SYNTAX 1.1 COLLECTIVE USAGE distributedOperation )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, COLLECTIVE requires USAGE userApplications" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| } |
| |
| |
| /** |
| * Test no-user-modification constraint: |
| * NO-USER-MODIFICATION requires an operational USAGE |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testNoUserModificatonConstraint() throws ParseException |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE directoryOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isUserModifiable() ); |
| assertEquals( UsageEnum.DIRECTORY_OPERATION, attributeType.getUsage() ); |
| |
| value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE dSAOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isUserModifiable() ); |
| assertEquals( UsageEnum.DSA_OPERATION, attributeType.getUsage() ); |
| |
| value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE distributedOperation )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertFalse( attributeType.isUserModifiable() ); |
| assertEquals( UsageEnum.DISTRIBUTED_OPERATION, attributeType.getUsage() ); |
| |
| if ( !parser.isQuirksMode() ) |
| { |
| value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION USAGE userApplications )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, NO-USER-MODIFICATION requires an operational USAGE" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| |
| value = "( 1.1 SYNTAX 1.1 NO-USER-MODIFICATION )"; |
| try |
| { |
| parser.parseAttributeTypeDescription( value ); |
| fail( "Exception expected, NO-USER-MODIFICATION requires an operational USAGE" ); |
| } |
| catch ( ParseException pe ) |
| { |
| // expected |
| } |
| } |
| } |
| |
| |
| /** |
| * Ensure that element order is ignored |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testIgnoreElementOrder() throws ParseException |
| { |
| String value = "( 2.5.4.3 SUP name SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 USAGE userApplications DESC 'RFC2256: common name(s) for which the entity is known by' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch NAME ( 'cn' 'commonName' ) )"; |
| MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value ); |
| |
| assertEquals( "2.5.4.3", attributeType.getOid() ); |
| assertEquals( 2, attributeType.getNames().size() ); |
| assertEquals( "cn", attributeType.getNames().get( 0 ) ); |
| assertEquals( "commonName", attributeType.getNames().get( 1 ) ); |
| assertEquals( "RFC2256: common name(s) for which the entity is known by", attributeType.getDescription() ); |
| assertEquals( "name", attributeType.getSuperiorOid() ); |
| assertEquals( "caseIgnoreMatch", attributeType.getEqualityOid() ); |
| assertEquals( "caseIgnoreSubstringsMatch", attributeType.getSubstringOid() ); |
| assertEquals( "1.3.6.1.4.1.1466.115.121.1.15", attributeType.getSyntaxOid() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| assertEquals( 0, attributeType.getExtensions().size() ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////// |
| // Some real-world attribute type definitions // |
| //////////////////////////////////////////////////////////////// |
| |
| @Test |
| public void testRfcUid() throws ParseException |
| { |
| String value = "( 0.9.2342.19200300.100.1.1 NAME ( 'uid' 'userid' ) DESC 'RFC1274: user identifier' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} USAGE userApplications )"; |
| MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value ); |
| |
| assertEquals( "0.9.2342.19200300.100.1.1", attributeType.getOid() ); |
| assertEquals( 2, attributeType.getNames().size() ); |
| assertEquals( "uid", attributeType.getNames().get( 0 ) ); |
| assertEquals( "userid", attributeType.getNames().get( 1 ) ); |
| assertEquals( "RFC1274: user identifier", attributeType.getDescription() ); |
| assertNull( attributeType.getSuperiorOid() ); |
| |
| assertEquals( "caseIgnoreMatch", attributeType.getEqualityOid() ); |
| assertEquals( "caseIgnoreSubstringsMatch", attributeType.getSubstringOid() ); |
| assertNull( attributeType.getOrderingOid() ); |
| assertEquals( "1.3.6.1.4.1.1466.115.121.1.15", attributeType.getSyntaxOid() ); |
| assertEquals( 256, attributeType.getSyntaxLength() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| |
| assertFalse( attributeType.isObsolete() ); |
| assertFalse( attributeType.isCollective() ); |
| assertFalse( attributeType.isSingleValued() ); |
| assertTrue( attributeType.isUserModifiable() ); |
| |
| assertEquals( 0, attributeType.getExtensions().size() ); |
| } |
| |
| |
| /** |
| * Tests the parse of a simple AttributeType |
| */ |
| @Test |
| public void testAddAttributeType() throws ParseException |
| { |
| String substrate = "( 1.3.6.1.4.1.18060.0.4.0.2.10000 NAME ( 'bogus' 'bogusName' ) " |
| + "DESC 'bogus description' SUP name SINGLE-VALUE )"; |
| MutableAttributeTypeImpl desc = parser.parseAttributeTypeDescription( substrate ); |
| assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", desc.getOid() ); |
| assertEquals( "bogus", desc.getNames().get( 0 ) ); |
| assertEquals( "bogusName", desc.getNames().get( 1 ) ); |
| assertEquals( "bogus description", desc.getDescription() ); |
| assertEquals( "name", desc.getSuperiorOid() ); |
| assertEquals( true, desc.isSingleValued() ); |
| } |
| |
| |
| /** |
| * Tests the parse of a simple AttributeType with the schema extension. |
| */ |
| @Test |
| public void testAttributeTypeWithSchemaExtension() throws ParseException |
| { |
| String substrate = "( 1.3.6.1.4.1.18060.0.4.0.2.10000 NAME ( 'bogus' 'bogusName' ) " |
| + "DESC 'bogus description' SUP name SINGLE-VALUE X-SCHEMA 'blah' )"; |
| MutableAttributeTypeImpl desc = parser.parseAttributeTypeDescription( substrate ); |
| assertEquals( "1.3.6.1.4.1.18060.0.4.0.2.10000", desc.getOid() ); |
| assertEquals( "bogus", desc.getNames().get( 0 ) ); |
| assertEquals( "bogusName", desc.getNames().get( 1 ) ); |
| assertEquals( "bogus description", desc.getDescription() ); |
| assertEquals( "name", desc.getSuperiorOid() ); |
| assertEquals( true, desc.isSingleValued() ); |
| assertEquals( "blah", desc.getExtensions().get( "X-SCHEMA" ).get( 0 ) ); |
| } |
| |
| |
| /** |
| * Tests the multithreaded use of a single parser. |
| */ |
| @Test |
| public void testMultiThreaded() throws ParseException |
| { |
| String[] testValues = new String[] |
| { |
| "( 1.1 SYNTAX 1.1 )", |
| "( 2.5.4.41 NAME 'name' DESC 'RFC2256: common supertype of name attributes' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} USAGE userApplications )", |
| "( 2.5.4.3 NAME ( 'cn' 'commonName' ) DESC 'RFC2256: common name(s) for which the entity is known by' SUP name EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 USAGE userApplications )", |
| "( 1.2.3.4.5.6.7.8.9.0 NAME ( 'abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789' 'test' ) DESC 'Descripton \u00E4\u00F6\u00FC\u00DF \u90E8\u9577' OBSOLETE SUP abcdefghijklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789 EQUALITY 2.3.4.5.6.7.8.9.0.1 ORDERING 3.4.5.6.7.8.9.0.1.2 SUBSTR 4.5.6.7.8.9.0.1.2.3 SYNTAX 5.6.7.8.9.0.1.2.3.4{1234567890} SINGLE-VALUE NO-USER-MODIFICATION USAGE dSAOperation X-TEST-a ('test1-1' 'test1-2') X-TEST-b ('test2-1' 'test2-2') )" }; |
| SchemaParserTestUtils.testMultiThreaded( parser, testValues ); |
| } |
| |
| |
| /** |
| * Tests quirks mode. |
| */ |
| @Test |
| public void testQuirksMode() throws ParseException |
| { |
| SchemaParserTestUtils.testQuirksMode( parser, "SYNTAX 1.1" ); |
| |
| try |
| { |
| String value = null; |
| MutableAttributeTypeImpl attributeType = null; |
| |
| parser.setQuirksMode( true ); |
| |
| // ensure all other test pass in quirks mode |
| testNumericOid(); |
| testNames(); |
| testDescription(); |
| testObsolete(); |
| testSuperType(); |
| testEquality(); |
| testOrdering(); |
| testSubstring(); |
| testSyntax(); |
| testSingleValue(); |
| testCollective(); |
| testNoUserModification(); |
| testUsage(); |
| testExtensions(); |
| testFull(); |
| testUniqueElements(); |
| testRequiredElements(); |
| testCollecitveConstraint(); |
| testNoUserModificatonConstraint(); |
| testIgnoreElementOrder(); |
| testRfcUid(); |
| testAddAttributeType(); |
| testMultiThreaded(); |
| |
| // NAME with special chars |
| value = "( 1.2.3 SYNTAX te_st NAME 't-e_s.t;' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( 1, attributeType.getNames().size() ); |
| assertEquals( "t-e_s.t;", attributeType.getNames().get( 0 ) ); |
| |
| // SYNTAX with underscore |
| value = "( 1.1 SYNTAX te_st )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "te_st", attributeType.getSyntaxOid() ); |
| |
| // SUPERTYPE with underscore |
| value = "( 1.1 SYNTAX 1.1 SUP te_st )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "te_st", attributeType.getSuperiorOid() ); |
| |
| // EQUALITY with underscore |
| value = "( 1.1 SYNTAX 1.1 EQUALITY te_st )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "te_st", attributeType.getEqualityOid() ); |
| |
| // SUBSTR with underscore |
| value = "( 1.1 SYNTAX 1.1 SUBSTR te_st )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "te_st", attributeType.getSubstringOid() ); |
| |
| // ORDERING with underscore |
| value = "( 1.1 SYNTAX 1.1 ORDERING te_st )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "te_st", attributeType.getOrderingOid() ); |
| |
| // Netscape attribute |
| value = "( nsAdminGroupName-oid NAME 'nsAdminGroupName' DESC 'Netscape defined attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Netscape' )"; |
| attributeType = parser.parseAttributeTypeDescription( value ); |
| assertEquals( "nsAdminGroupName-oid", attributeType.getOid() ); |
| assertEquals( 1, attributeType.getNames().size() ); |
| assertEquals( "nsAdminGroupName", attributeType.getNames().get( 0 ) ); |
| } |
| finally |
| { |
| parser.setQuirksMode( false ); |
| } |
| } |
| |
| |
| /** |
| * Tests without EQUALITY |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testNoqualityMR() throws ParseException |
| { |
| String value = "( 2.5.4.58 NAME 'attributeCertificateAttribute' " + "DESC 'attribute certificate use ;binary' " |
| + "SYNTAX 1.3.6.1.4.1.1466.115.121.1.8 ) "; |
| MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value ); |
| |
| assertEquals( "2.5.4.58", attributeType.getOid() ); |
| assertEquals( 1, attributeType.getNames().size() ); |
| assertEquals( "attributeCertificateAttribute", attributeType.getNames().get( 0 ) ); |
| assertEquals( "attribute certificate use ;binary", attributeType.getDescription() ); |
| assertNull( attributeType.getSuperiorOid() ); |
| assertNull( attributeType.getEqualityOid() ); |
| assertEquals( "1.3.6.1.4.1.1466.115.121.1.8", attributeType.getSyntaxOid() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| assertEquals( 0, attributeType.getExtensions().size() ); |
| } |
| |
| |
| /** |
| * Tests with spaces in DESC |
| * |
| * @throws ParseException |
| */ |
| @Test |
| public void testATWithSpacesInDesc() throws ParseException |
| { |
| String value = "( 1.3.18.0.2.4.216 NAME 'SAFDfpDataClass' DESC ' ' " + |
| "EQUALITY 2.5.13.2 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )"; |
| MutableAttributeTypeImpl attributeType = parser.parseAttributeTypeDescription( value ); |
| |
| assertEquals( "1.3.18.0.2.4.216", attributeType.getOid() ); |
| assertEquals( 1, attributeType.getNames().size() ); |
| assertEquals( "SAFDfpDataClass", attributeType.getNames().get( 0 ) ); |
| assertEquals( " ", attributeType.getDescription() ); |
| assertNull( attributeType.getSuperiorOid() ); |
| assertEquals( "2.5.13.2", attributeType.getEqualityOid() ); |
| assertEquals( "1.3.6.1.4.1.1466.115.121.1.15", attributeType.getSyntaxOid() ); |
| assertEquals( UsageEnum.USER_APPLICATIONS, attributeType.getUsage() ); |
| assertTrue( attributeType.isSingleValued() ); |
| assertEquals( 0, attributeType.getExtensions().size() ); |
| } |
| } |