Package eu.planets_project.pp.plato.test.controller

Source Code of eu.planets_project.pp.plato.test.controller.ProjectExporterImporterUnitTest

/*******************************************************************************
* Copyright (c) 2006-2010 Vienna University of Technology,
* Department of Software Technology and Interactive Systems
*
* All rights reserved. This program and the accompanying
* materials are made available under the terms of the
* Apache License, Version 2.0 which accompanies
* this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/

package eu.planets_project.pp.plato.test.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.helpers.Loader;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

import eu.planets_project.pp.plato.model.Plan;
import eu.planets_project.pp.plato.util.OS;
import eu.planets_project.pp.plato.util.XMLCompare;
import eu.planets_project.pp.plato.xml.ProjectExporter;
import eu.planets_project.pp.plato.xml.ProjectImporter;

public class ProjectExporterImporterUnitTest {

   
    private long testRunId;
    private String currentVersionPath;
   
    private Logger log = Logger.getLogger(ProjectExporterImporterUnitTest.class);
   
    @BeforeSuite
    public void init() {
        URL url = Loader.getResource("testng-log.properties");
       
        if (url != null) {
            PropertyConfigurator.configure(url);
        }

        testRunId = System.currentTimeMillis();
        currentVersionPath = "test-data/plans/currentversion/";// + testRunId;
        makeCurrentVersionPlans();
    }
   
//    @Test
//    public void testExportImportTestProject() throws Exception{
//        File testDir = new File("test-output/");
//
//        Plan testProject = TestProjectFactory.createMinimalistTestProject();
//       
//        ProjectExporter exporter = new ProjectExporter();
//        File minimalistFile = File.createTempFile("minimalist", ".xml", testDir);
//        exporter.exportToFile(testProject, minimalistFile);
//
//        ProjectImporter importer = new ProjectImporter();
//        List<Plan> plans =  importer.importProjects(minimalistFile.getAbsolutePath());
//        assert (plans.size() == 1);
//
//        System.out.println("before, after:");
//        System.out.println(testProject.getProjectBasis().getDocumentTypes());
//        System.out.println(plans.get(0).getProjectBasis().getDocumentTypes());
//       
//        File impexpFile = new File(minimalistFile.getAbsoluteFile() + ".impexp.xml");
//        exporter.exportToFile(plans.get(0), impexpFile);
//       
//        assert Arrays.equals(FileUtils.getBytesFromFile(minimalistFile), FileUtils.getBytesFromFile(impexpFile));
//        // remove files if successful
//        minimalistFile.delete();
//        impexpFile.delete();
//    }
//
//    @Test
//    public void testImportInvalidFile(){
//        ProjectImporter importer = new ProjectImporter();
//        List<Plan> plans = null;
//       
//        System.out.println("InvalidProjectElement:");
//
//        try {
//            plans = importer.importProjects("data/projects/InvalidProjectElement.xml");
//            assert false;
//        } catch (Exception e) {
//            System.out.println("true, this plan is not valid.");
//        }
//       
//       
//        System.out.println("Invalidfile:");
//        try {
//            plans = importer.importProjects("data/projects/InvalidFile.xml");
//            assert false;
//        } catch (Exception e) {
//            System.out.println("true, this plan is not valid.");
//        }
//
//        System.out.println("InvalidProjectState:");
//        try {
//            plans = importer.importProjects("data/projects/InvalidProjectState.xml");
//            assert false;
//        } catch (Exception e) {
//            System.out.println("true, this plan is not valid.");
//        }
//
//        System.out.println("Two Projects per file:");
//        try {
//            plans = importer.importProjects("data/projects/TwoProjects.xml");
//            assert false;
//        } catch (Exception e) {
//            System.out.println("true, this plan is not valid.");
//        }
//     
//    }
   
    private void testPlansInDir(String planPath, String outputPath) {
        File[] demoFiles = new File(planPath).listFiles(
                new FilenameFilter() {
                    public boolean accept(File dir, String file) {
                        return (file.toLowerCase().endsWith(".xml"));
                    }
                }
                );
        boolean success = true;
        for (File demoFile : demoFiles) {
            ProjectImporter importer = new ProjectImporter();
            ProjectExporter exporter = new ProjectExporter();

            //
            // for xml compare, we leave the jhoveXML out. we don't compare it.
            // it changes after import, because we call jhove when importing a plan
            List<String> nodesToExclude = new ArrayList<String>();
            nodesToExclude.add("//*[name()='jhoveXML']");
            nodesToExclude.add("//*[name()='changelog']");
           
            String logText = "";
           
            try {
               
                logText = "Test plan: " + demoFile.getAbsolutePath();
                System.out.println(logText);
                log.info(logText);
               
                List<Plan> importedPlans = importer.importProjects(demoFile.getAbsolutePath());
               
                assert importedPlans.size() == 1;
               
                logText = " - organisation: "+ importedPlans.get(0).getPlanProperties().getOrganization();
               
                System.out.println(logText);
                log.info(logText);
               
                File exportedPlanFile = new File(outputPath + demoFile.getName() + ".impexp.xml");

                exporter.exportToFile( importedPlans.get(0), exportedPlanFile);
               
                String sorted1 = createSortedXml(demoFile);
                String sorted2 = createSortedXml(exportedPlanFile);
               
                logText = demoFile +" -> " + sorted1;
                System.out.println(logText);
                log.info(logText);
               
                logText = exportedPlanFile +" -> " + sorted2;
                System.out.println(logText);
                log.info(logText);
               
                XMLCompare xmlCompare = new XMLCompare();
                xmlCompare.setExcludedNodes(nodesToExclude);
               
                if (xmlCompare.compareXml(sorted1, sorted2, true, true)) {
                    // they are equal, remove the exported plan
                    exportedPlanFile.delete();
                    log.info("SUCCESS");
                   
                } else {
                    logText = " - failed: " + System.getProperty("line.separator") + xmlCompare.getErrorMessage();
                   
                    System.out.println(logText);
                    log.info(logText);
                   
                    success = false;
                }
               
            } catch (Exception e) {
                logText = " - failed: " + System.getProperty("line.separator") + e.getMessage();
               
                System.out.println(logText);
                log.info(logText, e);
               
                success = false;
                e.printStackTrace();
            }
        }
        Assert.assertTrue(success, "At least some plans are not the same after export/import, check dir: " + outputPath);
    }
   
    private String createSortedXml(File original) {
       
        ProjectImporter importer = new ProjectImporter();
       
        String file = System.getProperties().getProperty("java.io.tmpdir") + "/sorted" + System.nanoTime() + ".xml";
       
        try {
            //File xslt = new File("data/xslt/sort.xsl");
            if (!importer.transformXmlData(original.getAbsolutePath(), file, "data/xslt/compareFilter.xsl")) {
                return "";
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
       
        return file;
    }
   
//    @Test
//    public void testImportExportDemoPlans() {
//        String outputPath = "test-output/plans/demo_" + testRunId + "/";
//        new File(outputPath).mkdirs();
//        testPlansInDir("data/projects/demos/", outputPath);
//    }
   
    @Test
    public void testImportExportCurrentVersionPlans() {
        String outputPath = "test-output/plans/failed/";
        new File(outputPath).mkdirs();
        testPlansInDir(currentVersionPath, outputPath);
    }
   
    private void makeCurrentVersionPlans(){
        File originalDir = new File("test-data/plans/original/");
        File currentVersionDir = new File(currentVersionPath);
        // remove all old files
        OS.deleteDirectory(currentVersionDir);
        currentVersionDir.mkdirs();
       
        File[] originalFiles = originalDir.listFiles(
                new FilenameFilter() {
                    public boolean accept(File dir, String file) {
                        return (file.toLowerCase().endsWith(".xml"));
                    }
                }
                );
        String tempPath = currentVersionPath + "migrations/";
        File tempDir = new File(tempPath);
        ProjectImporter importer = new ProjectImporter();
        for (int i = 0; i < originalFiles.length; i++) {
            tempDir.mkdirs();
            File file = originalFiles[i];
            try {
                System.out.println("migrating plan: " + file.getAbsolutePath());
                String currentFile = importer.getCurrentVersionData(
                        new FileInputStream(file), tempPath);
                if (currentFile == null) {
                    System.out.println(" - failed");
                } else {
                    File current = new File(currentFile);
                    current.renameTo(new File(currentVersionPath +  file.getName()));
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
            OS.deleteDirectory(tempDir);
        }
    }

}
TOP

Related Classes of eu.planets_project.pp.plato.test.controller.ProjectExporterImporterUnitTest

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.