Package org.apache.cayenne.project

Source Code of org.apache.cayenne.project.ApplicationProjectUpgradeTest

/*****************************************************************
*   Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you 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 org.apache.cayenne.project;

import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.conf.ConfigStatus;
import org.apache.cayenne.conf.Configuration;
import org.apache.cayenne.conf.DriverDataSourceFactory;
import org.apache.cayenne.conf.RuntimeLoadDelegate;
import org.apache.cayenne.conf.RuntimeSaveDelegate;
import org.apache.cayenne.dba.db2.DB2Adapter;
import org.apache.cayenne.dba.mysql.MySQLAdapter;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.unit.CayenneCase;
import org.apache.cayenne.unit.CayenneResources;
import org.apache.cayenne.util.Util;

public class ApplicationProjectUpgradeTest extends CayenneCase {

    public void testUpgradeFrom1_1() throws Exception {

        // copy files first as upgrade is done in-place
        File upgradeScratchDir = new File(getTestDir(), "upgrade/1.1");
        upgradeScratchDir.mkdirs();

        URL upgradeSrcUrl = CayenneResources.getResourceURL("upgrade/1.1");
        File upgradeSrcDir = new File(new URI(upgradeSrcUrl.toExternalForm()));
        File[] files = upgradeSrcDir.listFiles();
        for (File file : files) {
            Util.copy(file, new File(upgradeScratchDir, file.getName()));
        }

        File cayenneXml = new File(upgradeScratchDir, "cayenne.xml");
        ApplicationProject p = new ApplicationProject(
                cayenneXml,
                buildProjectConfiguration(cayenneXml));

        ApplicationUpgradeHandler handler = ApplicationUpgradeHandler.sharedHandler();
        assertEquals(Project.UPGRADE_STATUS_OLD, handler.checkForUpgrades(p
                .getConfiguration(), new ArrayList()));
        handler.performUpgrade(p);

        ApplicationProject p1 = new ApplicationProject(
                cayenneXml,
                buildProjectConfiguration(cayenneXml));
        assertEquals(Project.UPGRADE_STATUS_CURRENT, handler.checkForUpgrades(p1
                .getConfiguration(), new ArrayList()));

        DataDomain dd = p1.getConfiguration().getDomain("default");
        assertNotNull(dd);
        DataNode dn = dd.getNode("defaultNode");
        assertNotNull(dn);
        assertNotNull(dn.getAdapter());
        assertEquals(MySQLAdapter.class.getName(), dn.getAdapter().getClass().getName());
        assertEquals(DriverDataSourceFactory.class.getName(), dn.getDataSourceFactory());

        DataMap testmap = dd.getMap("testmap");
        assertNotNull(testmap);
        SQLTemplate query = (SQLTemplate) testmap.getQuery("NonSelectingQuery");
        assertNotNull(query);
        assertNotNull(query.getCustomTemplate(DB2Adapter.class.getName()));
        assertNull(query.getCustomTemplate("invalid"));
    }

    public void testUpgradeFrom1_2() throws Exception {

        // copy files first as upgrade is done in-place
        File upgradeScratchDir = new File(getTestDir(), "upgrade/1.2");
        upgradeScratchDir.mkdirs();

        URL upgradeSrcUrl = CayenneResources.getResourceURL("upgrade/1.2");
        File upgradeSrcDir = new File(new URI(upgradeSrcUrl.toExternalForm()));
        File[] files = upgradeSrcDir.listFiles();
        for (File file : files) {
            Util.copy(file, new File(upgradeScratchDir, file.getName()));
        }

        File cayenneXml = new File(upgradeScratchDir, "cayenne.xml");
        ApplicationProject p = new ApplicationProject(
                cayenneXml,
                buildProjectConfiguration(cayenneXml));

        ApplicationUpgradeHandler handler = ApplicationUpgradeHandler.sharedHandler();
        assertEquals(Project.UPGRADE_STATUS_OLD, handler.checkForUpgrades(p
                .getConfiguration(), new ArrayList()));
        handler.performUpgrade(p);

        ApplicationProject p1 = new ApplicationProject(
                cayenneXml,
                buildProjectConfiguration(cayenneXml));
        assertEquals(Project.UPGRADE_STATUS_CURRENT, handler.checkForUpgrades(p1
                .getConfiguration(), new ArrayList()));

        DataDomain dd = p1.getConfiguration().getDomain("default");
        assertNotNull(dd);
        DataNode dn = dd.getNode("defaultNode");
        assertNotNull(dn);
        assertNotNull(dn.getAdapter());
        assertEquals(MySQLAdapter.class.getName(), dn.getAdapter().getClass().getName());
        assertEquals(DriverDataSourceFactory.class.getName(), dn.getDataSourceFactory());

        DataMap testmap = dd.getMap("testmap");
        assertNotNull(testmap);
        SQLTemplate query = (SQLTemplate) testmap.getQuery("NonSelectingQuery");
        assertNotNull(query);
        assertNotNull(query.getCustomTemplate(DB2Adapter.class.getName()));
        assertNull(query.getCustomTemplate("invalid"));
    }

    // coped from the Modeler ProjectAction.
    protected Configuration buildProjectConfiguration(File projectFile) {
        ProjectConfiguration config = new ProjectConfiguration(projectFile);
        config.setLoaderDelegate(new RuntimeLoadDelegate(config, new ConfigStatus()) {

            protected void updateDefaults(DataDomain domain) {
                // do nothing...
            }

            @Override
            protected DataNode createDataNode(String nodeName) {
                return new DataNode(nodeName) {

                    @Override
                    public DataSource getDataSource() {
                        return dataSource;
                    }
                };
            }

        });
        config.setSaverDelegate(new RuntimeSaveDelegate(config));
        return config;
    }
}
TOP

Related Classes of org.apache.cayenne.project.ApplicationProjectUpgradeTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.