diff --git a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java index fbf5fa885d..58aeb73ce6 100644 --- a/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java +++ b/source/java/org/alfresco/repo/domain/schema/SchemaBootstrap.java @@ -1638,8 +1638,10 @@ public class SchemaBootstrap extends AbstractLifecycleBean /** * Collate differences and validation problems with the schema with respect to an appropriate * reference schema. + * + * @return the number of potential problems found. */ - private void validateSchema(String outputFileNameTemplate) + public int validateSchema(String outputFileNameTemplate) { Date startTime = new Date(); @@ -1648,7 +1650,7 @@ public class SchemaBootstrap extends AbstractLifecycleBean { String resourceUrl = schemaReferenceUrl.replaceAll(PLACEHOLDER_DIALECT, dialect.getClass().getName()); LogUtil.debug(logger, DEBUG_SCHEMA_COMP_NO_REF_FILE, resourceUrl); - return; + return 0; } InputStream is = null; @@ -1716,6 +1718,8 @@ public class SchemaBootstrap extends AbstractLifecycleBean Date endTime = new Date(); long durationMillis = endTime.getTime() - startTime.getTime(); LogUtil.debug(logger, DEBUG_SCHEMA_COMP_TIME_TAKEN, durationMillis); + + return results.size(); } /** diff --git a/source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java b/source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java new file mode 100644 index 0000000000..55fbfb7c92 --- /dev/null +++ b/source/java/org/alfresco/util/schemacomp/SchemaReferenceFileTest.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2005-2011 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.util.schemacomp; + + +import static org.junit.Assert.fail; + +import org.alfresco.repo.domain.schema.SchemaBootstrap; +import org.alfresco.util.ApplicationContextHelper; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * Test intended for use in the continuous integration system that checks whether the + * schema reference file (for whichever database the tests are being run against) + * is in sync with the actual schema. If the test fails (and the schema comparator is + * in working order) then the most likely cause is that a new up-to-date schema reference file + * needs to be created. + *

+ * Schema reference files are created using the {@link DbToXML} tool. + *

+ * Note: if no reference file exists then the test will pass, this is to allow piece meal + * introduction of schmea reference files. + * + * @see DbToXML + * @author Matt Ward + */ +public class SchemaReferenceFileTest +{ + private ClassPathXmlApplicationContext ctx; + private SchemaBootstrap schemaBootstrap; + + @Before + public void setUp() throws Exception + { + ctx = (ClassPathXmlApplicationContext) ApplicationContextHelper.getApplicationContext(); + schemaBootstrap = (SchemaBootstrap) ctx.getBean("schemaBootstrap"); + } + + @After + public void tearDown() + { + ctx.close(); + } + + @Test + public void checkReferenceFile() + { + String filePrefix = getClass().getSimpleName() + "-"; + int numProblems = schemaBootstrap.validateSchema(filePrefix); + + if (numProblems > 0) + { + fail("Schema check failed with " + numProblems + + " potential problems. Do you need to generate a" + + " new schema reference file? Results are in temp file prefixed with " + filePrefix); + } + } +}