| | |
| | | import static org.opends.server.util.ServerConstants.*; |
| | | |
| | | import java.io.File; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.StringTokenizer; |
| | | import java.util.TreeSet; |
| | | |
| | |
| | | */ |
| | | @Override |
| | | @BeforeClass |
| | | public void setUp() |
| | | throws Exception |
| | | public void setUp() throws Exception |
| | | { |
| | | TestCaseUtils.startServer(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests to ensure that all attribute syntaxes defined in the schema have |
| | | * valid OIDs. |
| | | */ |
| | | /** Tests to ensure that all attribute syntaxes defined in the schema have valid OIDs. */ |
| | | @Test |
| | | public void testEnsureValidSyntaxOIDs() |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder(); |
| | | message.append("All attribute syntaxes defined in OpenDS must have valid OIDs assigned.").append(EOL); |
| | | message.append("Attribute syntaxes without valid OIDs:").append(EOL); |
| | | for (String s : invalidOIDs) |
| | | { |
| | | message.append("- ").append(s).append(EOL); |
| | | } |
| | | |
| | | throw new AssertionError(message.toString()); |
| | | } |
| | | throwIfInvalidOidsExist("attribute syntaxes", invalidOIDs); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests to ensure that all matching rules defined in the schema have valid |
| | | * OIDs. |
| | | */ |
| | | /** Tests to ensure that all matching rules defined in the schema have valid OIDs. */ |
| | | @Test |
| | | public void testEnsureValidMatchingRuleOIDs() |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder(); |
| | | message.append("All matching rules defined in OpenDS must have valid ").append("OIDs assigned."); |
| | | message.append(EOL); |
| | | message.append("Matching rules without valid OIDs:"); |
| | | message.append(EOL); |
| | | for (String s : invalidOIDs) |
| | | { |
| | | message.append("- ").append(s); |
| | | message.append(EOL); |
| | | } |
| | | |
| | | throw new AssertionError(message.toString()); |
| | | } |
| | | throwIfInvalidOidsExist("matching rules", invalidOIDs); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests to ensure that all attribute types defined in the schema have valid |
| | | * OIDs. |
| | | * Tests to ensure that all attribute types defined in the schema have valid OIDs. |
| | | * |
| | | * @throws Exception If an unexpected problem occurs. |
| | | */ |
| | |
| | | { |
| | | TreeSet<String> invalidOIDs = new TreeSet<>(); |
| | | |
| | | String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT); |
| | | File schemaDir = new File(new File(buildRoot, "resource"), "schema"); |
| | | for (File f : schemaDir.listFiles()) |
| | | for (File f : getSchemaFiles()) |
| | | { |
| | | if (! f.getName().toLowerCase().endsWith(".ldif")) |
| | | { |
| | | // This could be some other kind of file, like ".svn". |
| | | continue; |
| | | } |
| | | |
| | | LDIFImportConfig importConfig = new LDIFImportConfig(f.getAbsolutePath()); |
| | | LDIFReader reader = new LDIFReader(importConfig); |
| | | Entry e = reader.readEntry(); |
| | | reader.close(); |
| | | |
| | | if (e == null) |
| | | { |
| | | // An empty schema file. This is OK. |
| | | continue; |
| | | } |
| | | |
| | | List<Attribute> attrList = e.getAttribute(getAttributeTypesAttributeType()); |
| | | if (attrList.isEmpty()) |
| | | { |
| | | // No attribute types in the schema file. This is OK. |
| | | continue; |
| | | } |
| | | |
| | | for (Attribute a : attrList) |
| | | for (Attribute a : getAttributesFromSchemaFile(f, getAttributeTypesAttributeType())) |
| | | { |
| | | for (ByteString v : a) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder(); |
| | | message.append("All attribute types defined in OpenDS must have valid ").append("OIDs assigned."); |
| | | message.append(EOL); |
| | | message.append("Attribute types without valid OIDs:"); |
| | | message.append(EOL); |
| | | for (String s : invalidOIDs) |
| | | { |
| | | message.append("- ").append(s); |
| | | message.append(EOL); |
| | | } |
| | | |
| | | throw new AssertionError(message.toString()); |
| | | } |
| | | throwIfInvalidOidsExist("attribute types", invalidOIDs); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests to ensure that all object classes defined in the schema have valid |
| | | * OIDs. |
| | | * Tests to ensure that all object classes defined in the schema have valid OIDs. |
| | | * |
| | | * @throws Exception If an unexpected problem occurs. |
| | | * @throws Exception |
| | | * If an unexpected problem occurs. |
| | | */ |
| | | @Test |
| | | public void testEnsureValidObjectClassOIDs() |
| | |
| | | { |
| | | TreeSet<String> invalidOIDs = new TreeSet<>(); |
| | | |
| | | String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT); |
| | | File schemaDir = new File(new File(buildRoot, "resource"), "schema"); |
| | | for (File f : schemaDir.listFiles()) |
| | | for (File f : getSchemaFiles()) |
| | | { |
| | | if (! f.getName().toLowerCase().endsWith(".ldif")) |
| | | { |
| | | // This could be some other kind of file, like ".svn". |
| | | continue; |
| | | } |
| | | |
| | | LDIFImportConfig importConfig = new LDIFImportConfig(f.getAbsolutePath()); |
| | | Entry e; |
| | | try (LDIFReader reader = new LDIFReader(importConfig)) |
| | | { |
| | | e = reader.readEntry(); |
| | | if (e == null) |
| | | { |
| | | // An empty schema file. This is OK. |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | List<Attribute> attrList = e.getAttribute("objectclasses"); |
| | | if (attrList.isEmpty()) |
| | | { |
| | | // No attribute types in the schema file. This is OK. |
| | | continue; |
| | | } |
| | | |
| | | for (Attribute a : attrList) |
| | | for (Attribute a : getAttributesFromSchemaFile(f, getObjectClassesAttributeType())) |
| | | { |
| | | for (ByteString v : a) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder() |
| | | .append("All object classes defined in OpenDJ must have valid OIDs assigned.").append(EOL) |
| | | .append("Object classes without valid OIDs:").append(EOL); |
| | | for (String s : invalidOIDs) |
| | | { |
| | | message.append("- ").append(s).append(EOL); |
| | | } |
| | | throw new AssertionError(message.toString()); |
| | | } |
| | | throwIfInvalidOidsExist("object classes", invalidOIDs); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Tests to ensure that all name forms defined in the schema have valid OIDs. |
| | | * |
| | |
| | | { |
| | | TreeSet<String> invalidOIDs = new TreeSet<>(); |
| | | |
| | | String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT); |
| | | File schemaDir = new File(new File(buildRoot, "resource"), "schema"); |
| | | for (File f : schemaDir.listFiles()) |
| | | for (File f : getSchemaFiles()) |
| | | { |
| | | if (! f.getName().toLowerCase().endsWith(".ldif")) |
| | | { |
| | | // This could be some other kind of file, like ".svn". |
| | | continue; |
| | | } |
| | | |
| | | LDIFImportConfig importConfig = new LDIFImportConfig(f.getAbsolutePath()); |
| | | LDIFReader reader = new LDIFReader(importConfig); |
| | | Entry e = reader.readEntry(); |
| | | reader.close(); |
| | | |
| | | if (e == null) |
| | | { |
| | | // An empty schema file. This is OK. |
| | | continue; |
| | | } |
| | | |
| | | List<Attribute> attrList = e.getAttribute(getNameFormsAttributeType()); |
| | | if (attrList.isEmpty()) |
| | | { |
| | | // No attribute types in the schema file. This is OK. |
| | | continue; |
| | | } |
| | | |
| | | for (Attribute a : attrList) |
| | | for (Attribute a : getAttributesFromSchemaFile(f, getNameFormsAttributeType())) |
| | | { |
| | | for (ByteString v : a) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder(); |
| | | message.append("All name forms defined in OpenDS must have valid OIDs ").append("assigned."); |
| | | message.append(EOL); |
| | | message.append("Name forms without valid OIDs:"); |
| | | message.append(EOL); |
| | | for (String s : invalidOIDs) |
| | | { |
| | | message.append("- ").append(s); |
| | | message.append(EOL); |
| | | } |
| | | throwIfInvalidOidsExist("name forms", invalidOIDs); |
| | | } |
| | | |
| | | throw new AssertionError(message.toString()); |
| | | private File[] getSchemaFiles() |
| | | { |
| | | String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT); |
| | | File schemaDir = new File(new File(buildRoot, "resource"), "schema"); |
| | | return schemaDir.listFiles(); |
| | | } |
| | | |
| | | private List<Attribute> getAttributesFromSchemaFile(File f, AttributeType attributeType) throws Exception |
| | | { |
| | | Entry e = readSchemaEntry(f); |
| | | return e != null |
| | | ? e.getAttribute(attributeType) |
| | | // An empty schema file. This is OK. |
| | | : Collections.<Attribute> emptyList(); |
| | | } |
| | | |
| | | private Entry readSchemaEntry(File f) throws Exception |
| | | { |
| | | if (!f.getName().toLowerCase().endsWith(".ldif")) |
| | | { |
| | | // This could be some other kind of file, like ".svn". |
| | | return null; |
| | | } |
| | | |
| | | LDIFImportConfig importConfig = new LDIFImportConfig(f.getAbsolutePath()); |
| | | try (LDIFReader reader = new LDIFReader(importConfig)) |
| | | { |
| | | return reader.readEntry(); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void throwIfInvalidOidsExist(String elementType, Set<String> invalidOIDs) throws AssertionError |
| | | { |
| | | if (! invalidOIDs.isEmpty()) |
| | | { |
| | | StringBuilder message = new StringBuilder() |
| | | .append("All ").append(elementType).append(" defined in OpenDJ must have valid OIDs assigned." + EOL) |
| | | .append(elementType).append(" without valid OIDs:" + EOL); |
| | | for (String oid : invalidOIDs) |
| | | { |
| | | message.append("- ").append(oid).append(EOL); |
| | | } |
| | | throw new AssertionError(message.toString()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether the string represents a valid numeric OID. |
| | |
| | | */ |
| | | private boolean isNumericOID(String oid) |
| | | { |
| | | // It must not be null, and it must not be empty. |
| | | if (oid == null || oid.length() == 0) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | // It must start and end with numeric digits. |
| | | if (!Character.isDigit(oid.charAt(0)) || |
| | | !Character.isDigit(oid.charAt(oid.length()-1))) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | // It must contain at least one period. |
| | | if (!oid.contains(".")) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | // It must not contain any double periods. |
| | | if (oid.contains("..")) |
| | | if (oid == null |
| | | || oid.isEmpty() |
| | | || !startsAndEndsWithDigit(oid) |
| | | // It must contain at least one period. |
| | | || !oid.contains(".") |
| | | // It must not contain any double periods. |
| | | || oid.contains("..")) |
| | | { |
| | | return false; |
| | | } |
| | |
| | | // If we've gotten here, then it should be a valid numeric OID. |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | private boolean startsAndEndsWithDigit(String oid) |
| | | { |
| | | return Character.isDigit(oid.charAt(0)) && Character.isDigit(oid.charAt(oid.length() - 1)); |
| | | } |
| | | } |