com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngineTest.java Source code

Java tutorial

Introduction

Here is the source code for com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngineTest.java

Source

/*
 * Copyright (c) 2008-2016 Haulmont.
 *
 * Licensed 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 com.haulmont.cuba.core.sys.dbupdate;

import com.haulmont.cuba.core.global.AppBeans;
import com.haulmont.cuba.core.global.Configuration;
import com.haulmont.cuba.core.global.GlobalConfig;
import com.haulmont.cuba.testsupport.TestContainer;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import static org.junit.Assert.assertEquals;

public class DbUpdaterEngineTest {

    @ClassRule
    public static TestContainer cont = TestContainer.Common.INSTANCE;

    private File dbmsDir;
    private File dbmsWebInfDir;

    private List<File> mssqlInitFiles = new ArrayList<>();
    private List<File> mssql2012InitFiles = new ArrayList<>();
    private List<File> mssqlUpdateFiles = new ArrayList<>();
    private List<File> mssql2012UpdateFiles = new ArrayList<>();

    @SuppressWarnings("ResultOfMethodCallIgnored")
    @Before
    public void setUp() throws Exception {
        GlobalConfig config = AppBeans.get(Configuration.class).getConfig(GlobalConfig.class);
        dbmsDir = new File(config.getTempDir(), "db. dir");
        if (dbmsDir.exists()) {
            FileUtils.deleteDirectory(dbmsDir);
        }
        dbmsDir.mkdirs();

        dbmsWebInfDir = new File(config.getTempDir(), "WEB-INF/db");
        if (dbmsWebInfDir.exists()) {
            FileUtils.deleteDirectory(dbmsWebInfDir);
        }
        dbmsWebInfDir.mkdirs();

        File dir;
        File file;

        // Init scripts
        dir = new File(dbmsWebInfDir, "10-cuba/init/postgres");
        dir.mkdirs();
        file = new File(dir, "create-db.sql");
        file.createNewFile();

        dir = new File(dbmsDir, "10-cuba/init/mssql");
        dir.mkdirs();
        file = new File(dir, "create-db.sql");
        file.createNewFile();
        mssqlInitFiles.add(file);

        dir = new File(dbmsDir, "10-cuba/init/mssql-2012");
        dir.mkdirs();
        file = new File(dir, "create-db.sql");
        file.createNewFile();
        mssql2012InitFiles.add(file);

        dir = new File(dbmsDir, "50-app/init/mssql");
        dir.mkdirs();
        file = new File(dir, "10.create-db.sql");
        file.createNewFile();
        mssqlInitFiles.add(file);
        mssql2012InitFiles.add(file);
        file = new File(dir, "20.create-db.sql");
        file.createNewFile();
        mssqlInitFiles.add(file);
        mssql2012InitFiles.add(file);
        file = new File(dir, "30.create-db.sql");
        file.createNewFile();
        mssqlInitFiles.add(file);

        dir = new File(dbmsDir, "50-app/init/mssql-2012");
        dir.mkdirs();
        file = new File(dir, "30.create-db.sql");
        file.createNewFile();
        mssql2012InitFiles.add(file);

        file = new File(dir, "40.create-db.sql");
        file.createNewFile();
        mssql2012InitFiles.add(file);

        // Update scripts

        dir = new File(dbmsDir, "10-cuba/update/mssql/13");
        dir.mkdirs();
        file = new File(dir, "cuba-update-1.sql");
        file.createNewFile();
        mssqlUpdateFiles.add(file);
        mssql2012UpdateFiles.add(file);

        dir = new File(dbmsDir, "10-cuba/update/mssql/14");
        dir.mkdirs();
        file = new File(dir, "cuba-update-2.sql");
        file.createNewFile();
        mssqlUpdateFiles.add(file);
        mssql2012UpdateFiles.add(file);

        dir = new File(dbmsDir, "50-app/update/mssql/14");
        dir.mkdirs();
        file = new File(dir, "app-update-0.sql");
        file.createNewFile();
        mssqlUpdateFiles.add(file);
        mssql2012UpdateFiles.add(file);
        file = new File(dir, "app-update-1.sql");
        file.createNewFile();
        mssqlUpdateFiles.add(file);

        dir = new File(dbmsDir, "50-app/update/mssql-2012/14");
        dir.mkdirs();
        file = new File(dir, "app-update-1.sql");
        file.createNewFile();
        mssql2012UpdateFiles.add(file);
        file = new File(dir, "app-update-2.sql");
        file.createNewFile();
        mssql2012UpdateFiles.add(file);
    }

    @Test
    public void testGetInitScripts() throws Exception {
        DbUpdaterEngine engine = new DbUpdaterEngine();
        engine.dbScriptsDirectory = dbmsDir.getAbsolutePath();
        engine.dbmsType = "mssql";

        List<ScriptResource> scripts = engine.getInitScripts();
        List<File> files = scripts.stream().map(sr -> new File(sr.getPath())).collect(Collectors.toList());
        assertEquals(mssqlInitFiles, files);

        engine.dbmsVersion = "2012";

        scripts = engine.getInitScripts();
        files = scripts.stream().map(sr -> new File(sr.getPath())).collect(Collectors.toList());
        assertEquals(mssql2012InitFiles, files);
    }

    @Test
    public void testGetUpdateScripts() throws Exception {
        DbUpdaterEngine engine = new DbUpdaterEngine();
        engine.dbScriptsDirectory = dbmsDir.getAbsolutePath();
        engine.dbmsType = "mssql";

        List<ScriptResource> scripts = engine.getUpdateScripts();
        List<File> files = scripts.stream().map(sr -> new File(sr.getPath())).collect(Collectors.toList());

        assertEquals(mssqlUpdateFiles, files);

        engine.dbmsVersion = "2012";

        scripts = engine.getUpdateScripts();
        files = scripts.stream().map(sr -> new File(sr.getPath())).collect(Collectors.toList());
        assertEquals(mssql2012UpdateFiles, files);
    }

    @Test
    public void testGetModules() throws Exception {
        DbUpdaterEngine engine = new DbUpdaterEngine();
        engine.dbScriptsDirectory = dbmsDir.getAbsolutePath();
        engine.dbmsType = "mssql";
        List<String> moduleDirs = engine.getModuleDirs();
        assertEquals("10-cuba", moduleDirs.get(0));
        assertEquals("50-app", moduleDirs.get(1));
    }

    @Test
    public void testGetScriptName() throws Exception {
        File script = new File(dbmsDir, "50-app/update/mssql-2012/14/app-update-0.sql");
        DbUpdaterEngine engine = new DbUpdaterEngine();
        engine.dbScriptsDirectory = dbmsDir.getAbsolutePath();
        String scriptName = engine.getScriptName(script.getAbsolutePath());
        assertEquals("50-app/update/mssql-2012/14/app-update-0.sql", scriptName);

        script = new File(dbmsWebInfDir, "10-cuba/init/postgres/create-db.sql");
        engine = new DbUpdaterEngine();
        engine.dbScriptsDirectory = "web-inf:db";
        scriptName = engine.getScriptName(script.getAbsolutePath());
        assertEquals("10-cuba/init/postgres/create-db.sql", scriptName);
    }
}