Search in sources :

Example 1 with ChangeFactory

use of liquibase.change.ChangeFactory in project liquibase by liquibase.

the class VerifyChangeClassesTest method lessThanMinimumFails.

@Test
public void lessThanMinimumFails() throws Exception {
    ChangeFactory changeFactory = ChangeFactory.getInstance();
    for (String changeName : changeFactory.getDefinedChanges()) {
        for (Database database : DatabaseFactory.getInstance().getImplementedDatabases()) {
            if (database.getShortName() == null) {
                continue;
            }
            Change change = changeFactory.create(changeName);
            if (!change.supports(database)) {
                continue;
            }
            if (change.generateStatementsVolatile(database)) {
                continue;
            }
            ChangeMetaData changeMetaData = ChangeFactory.getInstance().getChangeMetaData(change);
            change.setResourceAccessor(new JUnitResourceAccessor());
            ArrayList<String> requiredParams = new ArrayList<String>(changeMetaData.getRequiredParameters(database).keySet());
            for (String paramName : requiredParams) {
                ChangeParameterMetaData param = changeMetaData.getParameters().get(paramName);
                Object paramValue = param.getExampleValue(database);
                param.setValue(change, paramValue);
            }
            for (int i = 0; i < requiredParams.size(); i++) {
                String paramToRemove = requiredParams.get(i);
                ChangeParameterMetaData paramToRemoveMetadata = changeMetaData.getParameters().get(paramToRemove);
                Object currentValue = paramToRemoveMetadata.getCurrentValue(change);
                paramToRemoveMetadata.setValue(change, null);
                assertTrue("No errors even with " + changeMetaData.getName() + " with a null " + paramToRemove + " on " + database.getShortName(), change.validate(database).hasErrors());
                paramToRemoveMetadata.setValue(change, currentValue);
            }
        }
    }
}
Also used : ChangeFactory(liquibase.change.ChangeFactory) Database(liquibase.database.Database) JUnitResourceAccessor(liquibase.test.JUnitResourceAccessor) ChangeParameterMetaData(liquibase.change.ChangeParameterMetaData) Change(liquibase.change.Change) ChangeMetaData(liquibase.change.ChangeMetaData) Test(org.junit.Test) AbstractVerifyTest(liquibase.verify.AbstractVerifyTest)

Example 2 with ChangeFactory

use of liquibase.change.ChangeFactory in project liquibase by liquibase.

the class VerifyChangeClassesTest method extraParamsIsValidSql.

@Ignore
@Test
public void extraParamsIsValidSql() throws Exception {
    ChangeFactory changeFactory = ChangeFactory.getInstance();
    for (String changeName : changeFactory.getDefinedChanges()) {
        if (changeName.equals("addDefaultValue")) {
            //need to better handle strange "one of defaultValue* is required" logic
            continue;
        }
        if (changeName.equals("createProcedure")) {
            //need to better handle strange "one of path or body is required" logic
            continue;
        }
        for (Database database : DatabaseFactory.getInstance().getImplementedDatabases()) {
            if (database.getShortName() == null) {
                continue;
            }
            TestState state = new TestState(name.getMethodName(), changeName, database.getShortName(), TestState.Type.SQL);
            state.addComment("Database: " + database.getShortName());
            Change baseChange = changeFactory.create(changeName);
            if (!baseChange.supports(database)) {
                continue;
            }
            if (baseChange.generateStatementsVolatile(database)) {
                continue;
            }
            ChangeMetaData changeMetaData = ChangeFactory.getInstance().getChangeMetaData(baseChange);
            ArrayList<String> optionalParameters = new ArrayList<String>(changeMetaData.getOptionalParameters(database).keySet());
            Collections.sort(optionalParameters);
            List<List<String>> paramLists = powerSet(optionalParameters);
            Collections.sort(paramLists, new Comparator<List<String>>() {

                @Override
                public int compare(List<String> o1, List<String> o2) {
                    int comp = Integer.valueOf(o1.size()).compareTo(o2.size());
                    if (comp == 0) {
                        comp = StringUtils.join(o1, ",").compareTo(StringUtils.join(o2, ","));
                    }
                    return comp;
                }
            });
            for (List<String> permutation : paramLists) {
                Change change = changeFactory.create(changeName);
                change.setResourceAccessor(new JUnitResourceAccessor());
                //
                for (String paramName : new TreeSet<String>(changeMetaData.getRequiredParameters(database).keySet())) {
                    ChangeParameterMetaData param = changeMetaData.getParameters().get(paramName);
                    Object paramValue = param.getExampleValue(database);
                    String serializedValue;
                    serializedValue = formatParameter(paramValue);
                    state.addComment("Required Change Parameter: " + param.getParameterName() + "=" + serializedValue);
                    param.setValue(change, paramValue);
                }
                for (String paramName : permutation) {
                    ChangeParameterMetaData param = changeMetaData.getParameters().get(paramName);
                    if (!param.supports(database)) {
                        continue;
                    }
                    Object paramValue = param.getExampleValue(database);
                    String serializedValue;
                    serializedValue = formatParameter(paramValue);
                    state.addComment("Optional Change Parameter: " + param.getParameterName() + "=" + serializedValue);
                    param.setValue(change, paramValue);
                }
                ValidationErrors errors = change.validate(database);
                assertFalse("Validation errors for " + changeMetaData.getName() + " on " + database.getShortName() + ": " + errors.toString(), errors.hasErrors());
            //
            //                    SqlStatement[] sqlStatements = change.generateStatements(database);
            //                    for (SqlStatement statement : sqlStatements) {
            //                        Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(statement, database);
            //                        if (sql == null) {
            //                            System.out.println("Null sql for "+statement+" on "+database.getShortName());
            //                        } else {
            //                            for (Sql line : sql) {
            //                                state.addValue(line.toSql()+";");
            //                            }
            //                        }
            //                    }
            //                    state.test();
            }
        }
    }
}
Also used : ValidationErrors(liquibase.exception.ValidationErrors) JUnitResourceAccessor(liquibase.test.JUnitResourceAccessor) Change(liquibase.change.Change) ChangeFactory(liquibase.change.ChangeFactory) Database(liquibase.database.Database) ChangeParameterMetaData(liquibase.change.ChangeParameterMetaData) ChangeMetaData(liquibase.change.ChangeMetaData) Ignore(org.junit.Ignore) Test(org.junit.Test) AbstractVerifyTest(liquibase.verify.AbstractVerifyTest)

Example 3 with ChangeFactory

use of liquibase.change.ChangeFactory in project liquibase by liquibase.

the class VerifyChangeClassesTest method minimumRequiredIsValidSql.

@Ignore
@Test
public void minimumRequiredIsValidSql() throws Exception {
    ChangeFactory changeFactory = ChangeFactory.getInstance();
    for (String changeName : changeFactory.getDefinedChanges()) {
        if (changeName.equals("addDefaultValue")) {
            //need to better handle strange "one of defaultValue* is required" logic
            continue;
        }
        if (changeName.equals("changeWithNestedTags") || changeName.equals("sampleChange")) {
            //not a real change
            continue;
        }
        for (Database database : DatabaseFactory.getInstance().getImplementedDatabases()) {
            if (database.getShortName() == null) {
                continue;
            }
            TestState state = new TestState(name.getMethodName(), changeName, database.getShortName(), TestState.Type.SQL);
            state.addComment("Database: " + database.getShortName());
            Change change = changeFactory.create(changeName);
            if (!change.supports(database)) {
                continue;
            }
            if (change.generateStatementsVolatile(database)) {
                continue;
            }
            ChangeMetaData changeMetaData = ChangeFactory.getInstance().getChangeMetaData(change);
            change.setResourceAccessor(new JUnitResourceAccessor());
            for (String paramName : new TreeSet<String>(changeMetaData.getRequiredParameters(database).keySet())) {
                ChangeParameterMetaData param = changeMetaData.getParameters().get(paramName);
                Object paramValue = param.getExampleValue(database);
                String serializedValue;
                serializedValue = formatParameter(paramValue);
                state.addComment("Change Parameter: " + param.getParameterName() + "=" + serializedValue);
                param.setValue(change, paramValue);
            }
            ValidationErrors errors = change.validate(database);
            assertFalse("Validation errors for " + changeMetaData.getName() + " on " + database.getShortName() + ": " + errors.toString(), errors.hasErrors());
            SqlStatement[] sqlStatements = change.generateStatements(database);
            for (SqlStatement statement : sqlStatements) {
                Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(statement, database);
                if (sql == null) {
                    System.out.println("Null sql for " + statement + " on " + database.getShortName());
                } else {
                    for (Sql line : sql) {
                        String sqlLine = line.toSql();
                        assertFalse("Change " + changeMetaData.getName() + " contains 'null' for " + database.getShortName() + ": " + sqlLine, sqlLine.contains(" null "));
                        state.addValue(sqlLine + ";");
                    }
                }
            }
            state.test();
        }
    }
}
Also used : ValidationErrors(liquibase.exception.ValidationErrors) JUnitResourceAccessor(liquibase.test.JUnitResourceAccessor) Change(liquibase.change.Change) Sql(liquibase.sql.Sql) SqlStatement(liquibase.statement.SqlStatement) ChangeFactory(liquibase.change.ChangeFactory) Database(liquibase.database.Database) ChangeParameterMetaData(liquibase.change.ChangeParameterMetaData) ChangeMetaData(liquibase.change.ChangeMetaData) Ignore(org.junit.Ignore) Test(org.junit.Test) AbstractVerifyTest(liquibase.verify.AbstractVerifyTest)

Aggregations

Change (liquibase.change.Change)3 ChangeFactory (liquibase.change.ChangeFactory)3 ChangeMetaData (liquibase.change.ChangeMetaData)3 ChangeParameterMetaData (liquibase.change.ChangeParameterMetaData)3 Database (liquibase.database.Database)3 JUnitResourceAccessor (liquibase.test.JUnitResourceAccessor)3 AbstractVerifyTest (liquibase.verify.AbstractVerifyTest)3 Test (org.junit.Test)3 ValidationErrors (liquibase.exception.ValidationErrors)2 Ignore (org.junit.Ignore)2 Sql (liquibase.sql.Sql)1 SqlStatement (liquibase.statement.SqlStatement)1