Some more unit tests for the schema package
1 files added
3 files modified
| | |
| | | import org.opends.server.api.ApproximateMatchingRule; |
| | | import org.opends.server.protocols.asn1.ASN1OctetString; |
| | | import org.opends.server.types.ByteString; |
| | | import org.testng.annotations.AfterClass; |
| | | import org.testng.annotations.BeforeClass; |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.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 |
| | | // Some values are commented because these values are not |
| | | // accepted. I think they should. |
| | | //{SYNTAX_UTC_TIME_OID,"20060906135000.000Z", true}, |
| | | //{SYNTAX_UTC_TIME_OID,"20060906135030.3Z", true}, |
| | | //{SYNTAX_UTC_TIME_OID,"20060906135030.30Z", true}, |
| | | //{SYNTAX_UTC_TIME_OID,"20060906135030.Z", true}, |
| | | //{SYNTAX_UTC_TIME_OID,"20060906135030.0118Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030+01", true}, |
| | | {SYNTAX_UTC_TIME_OID,"200609061350Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20061116135030Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20061126135030Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20061231235959Z", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030+0101", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030+2359", true}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030+3359", false}, |
| | | {SYNTAX_UTC_TIME_OID,"20060906135030+2389", false}, |
| | | {SYNTAX_UTC_TIME_OID,"20062231235959Z", false}, |
| | | {SYNTAX_UTC_TIME_OID,"20061232235959Z", false}, |
| | | {SYNTAX_UTC_TIME_OID,"2006123123595aZ", false}, |
| | | {SYNTAX_UTC_TIME_OID,"200a1231235959Z", false}, |
| | | {SYNTAX_UTC_TIME_OID,"2006j231235959Z", false}, |
| | | {SYNTAX_UTC_TIME_OID,"200612-1235959Z", false}, |
| | | {SYNTAX_UTC_TIME_OID,"20061231#35959Z", false}, |
| | | |
| | | // 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}, |
| | | |
| | | // generalized time. Not much different from UTC time. |
| | | */ |
| | | |
| | | // generalized time. |
| | | {SYNTAX_GENERALIZED_TIME_OID,"20060906135030+01", true}, |
| | | {SYNTAX_GENERALIZED_TIME_OID,"200609061350Z", true}, |
| | | {SYNTAX_GENERALIZED_TIME_OID,"20060906135030Z", true}, |
| | |
| | | {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 " |
| | |
| | | + " MUST cn " |
| | | + "( this is an extra parameter )" |
| | | , true}, |
| | | |
| | | // Here start the data for the tests of the matching rule syntaxes |
| | | |
| | | // 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}, |
| | | + " ( 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 |
| | | |
| | | // 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}, |
| | | + " ( 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, "\'0\'B", true}, |
| | | {SYNTAX_BIT_STRING_OID, "\'1\'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}, |
| | | |
| | | |
| | | }; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Test the normalization and the approximate comparison. |
| | | */ |
| | |
| | | Boolean liveResult = rule.valueIsAcceptable( |
| | | new ASN1OctetString(value), new StringBuilder()); |
| | | assertEquals(result, liveResult); |
| | | |
| | | |
| | | // call the getters to increase code coverage... |
| | | rule.getApproximateMatchingRule(); |
| | | rule.getDescription(); |
| | |
| | | rule.getSyntaxName(); |
| | | rule.toString(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Set up the environment for performing the tests in this suite. |
| | | * |
| | |
| | | import org.opends.server.core.DirectoryException; |
| | | import org.opends.server.protocols.asn1.ASN1OctetString; |
| | | import org.opends.server.types.ByteString; |
| | | import org.testng.annotations.AfterClass; |
| | | import org.testng.annotations.BeforeClass; |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| 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 |
| | | * 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.assertTrue; |
| | | |
| | | import org.opends.server.TestCaseUtils; |
| | | import org.opends.server.api.OrderingMatchingRule; |
| | | import org.opends.server.core.DirectoryException; |
| | | import org.opends.server.protocols.asn1.ASN1OctetString; |
| | | import org.opends.server.types.ByteString; |
| | | import org.testng.annotations.AfterClass; |
| | | import org.testng.annotations.BeforeClass; |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | /** |
| | | * Test The Ordering matching rules and the Ordering matching rule api. |
| | | */ |
| | | public class OrderingMatchingRuleTest extends SchemaTestCase |
| | | { |
| | | @DataProvider(name="Orderingmatchingrules") |
| | | public Object[][] createOrderingMatchingRuleTest() |
| | | { |
| | | return new Object[][] { |
| | | {"GeneralizedTimeOrderingMatchingRule", "20060912180130Z", |
| | | "20060912180130Z", 0}, |
| | | {"GeneralizedTimeOrderingMatchingRule", "20060912180130Z", |
| | | "20060912180129Z", 1}, |
| | | {"GeneralizedTimeOrderingMatchingRule", "20060912180129Z", |
| | | "20060912180130Z", -1}, |
| | | |
| | | // following test is currently disabled because it does not work |
| | | // {"NumericStringOrderingMatchingRule", "1", "09", -1}, |
| | | // see issue 638 |
| | | {"NumericStringOrderingMatchingRule", "1", "999999999999999999999", -1}, |
| | | {"NumericStringOrderingMatchingRule", "1", "9", -1}, |
| | | {"NumericStringOrderingMatchingRule", "1", " 1 ", 0}, |
| | | {"NumericStringOrderingMatchingRule", "0", "1", -1}, |
| | | {"NumericStringOrderingMatchingRule", "1", "0", 1}, |
| | | |
| | | {"IntegerOrderingMatchingRule", "1", "0", 1}, |
| | | {"IntegerOrderingMatchingRule", "1", "1", 0}, |
| | | {"IntegerOrderingMatchingRule", "45", "54", -1}, |
| | | {"IntegerOrderingMatchingRule", "-63", "63", -1}, |
| | | {"IntegerOrderingMatchingRule", "-63", "0", -1}, |
| | | {"IntegerOrderingMatchingRule", "63", "0", 1}, |
| | | {"IntegerOrderingMatchingRule", "0", "-63", 1}, |
| | | {"IntegerOrderingMatchingRule", "987654321987654321987654321", |
| | | "987654321987654321987654322", -1}, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | | * Test the comparison of valid values. |
| | | */ |
| | | @Test(dataProvider= "Orderingmatchingrules") |
| | | public void OrderingMatchingRules(String ruleClassName, String value1, |
| | | String value2, int result) throws Exception |
| | | { |
| | | // load the mathing rule code |
| | | Class rule = Class.forName("org.opends.server.schema."+ruleClassName); |
| | | |
| | | // Make sure that the specified class can be instantiated as a task. |
| | | OrderingMatchingRule ruleInstance = |
| | | (OrderingMatchingRule) rule.newInstance(); |
| | | |
| | | // we should call initializeMatchingRule but they all seem empty at the |
| | | // moment. |
| | | // ruleInstance.initializeMatchingRule(configEntry); |
| | | |
| | | ByteString normalizedValue1 = |
| | | ruleInstance.normalizeValue(new ASN1OctetString(value1)); |
| | | ByteString normalizedValue2 = |
| | | ruleInstance.normalizeValue(new ASN1OctetString(value2)); |
| | | int res = ruleInstance.compareValues(normalizedValue1, normalizedValue2); |
| | | if (result == 0) |
| | | assertTrue(res == 0); |
| | | else if (result > 0) |
| | | assertTrue(res > 0); |
| | | else |
| | | assertTrue(res < 0); |
| | | } |
| | | |
| | | @DataProvider(name="OrderingMatchingRuleInvalidValues") |
| | | public Object[][] createOrderingMatchingRuleInvalidValues() |
| | | { |
| | | return new Object[][] { |
| | | {"GeneralizedTimeOrderingMatchingRule", "20060912180130"}, |
| | | {"GeneralizedTimeOrderingMatchingRule","2006123123595aZ"}, |
| | | {"GeneralizedTimeOrderingMatchingRule","200a1231235959Z"}, |
| | | {"GeneralizedTimeOrderingMatchingRule","2006j231235959Z"}, |
| | | {"GeneralizedTimeOrderingMatchingRule","20061231#35959Z"}, |
| | | {"GeneralizedTimeOrderingMatchingRule","2006"}, |
| | | |
| | | {"NumericStringOrderingMatchingRule", "jfhslur"}, |
| | | {"NumericStringOrderingMatchingRule", "123AB"}, |
| | | |
| | | {"IntegerOrderingMatchingRule", " 63 "}, |
| | | {"IntegerOrderingMatchingRule", "- 63"}, |
| | | {"IntegerOrderingMatchingRule", "+63"}, |
| | | {"IntegerOrderingMatchingRule", "AB"}, |
| | | {"IntegerOrderingMatchingRule", "0xAB"}, |
| | | }; |
| | | } |
| | | |
| | | /** |
| | | * Test that invalid values are rejected. |
| | | */ |
| | | @Test(dataProvider= "OrderingMatchingRuleInvalidValues") |
| | | public void OrderingMatchingRulesInvalidValues(String ruleClassName, |
| | | String value) throws Exception |
| | | { |
| | | |
| | | // load the matching rule code |
| | | Class rule = Class.forName("org.opends.server.schema."+ruleClassName); |
| | | |
| | | // Make sure that the specified class can be instantiated as a task. |
| | | OrderingMatchingRule ruleInstance = |
| | | (OrderingMatchingRule) rule.newInstance(); |
| | | |
| | | // we should call initializeMatchingRule but they all seem empty at the |
| | | // moment. |
| | | // ruleInstance.initializeMatchingRule(configEntry); |
| | | |
| | | // normalize the 2 provided values |
| | | boolean success = false; |
| | | try |
| | | { |
| | | ruleInstance.normalizeValue(new ASN1OctetString(value)); |
| | | } catch (DirectoryException e) { |
| | | success = true; |
| | | } |
| | | // if we get there with false value for success then the tested |
| | | // matching rule did not raised the Exception. |
| | | |
| | | assertTrue(success); |
| | | } |
| | | |
| | | /** |
| | | * Set up the environment for performing the tests in this suite. |
| | | * |
| | | * @throws Exception |
| | | * If the environment could not be set up. |
| | | */ |
| | | @BeforeClass |
| | | public void setUp() throws Exception { |
| | | // This test suite depends on having the schema available. |
| | | TestCaseUtils.startServer(); |
| | | } |
| | | |
| | | /** |
| | | * Tears down the environment for performing the tests in this suite. |
| | | * |
| | | * @throws Exception |
| | | * If the environment could not be finalized. |
| | | */ |
| | | @AfterClass |
| | | public void tearDown() throws Exception { |
| | | TestCaseUtils.startServer(); |
| | | } |
| | | } |