summaryrefslogtreecommitdiff
path: root/qadevOOo/runner/convwatch/ConvWatchStarter.java
diff options
context:
space:
mode:
Diffstat (limited to 'qadevOOo/runner/convwatch/ConvWatchStarter.java')
-rw-r--r--qadevOOo/runner/convwatch/ConvWatchStarter.java445
1 files changed, 445 insertions, 0 deletions
diff --git a/qadevOOo/runner/convwatch/ConvWatchStarter.java b/qadevOOo/runner/convwatch/ConvWatchStarter.java
new file mode 100644
index 000000000000..c81ba3dfca85
--- /dev/null
+++ b/qadevOOo/runner/convwatch/ConvWatchStarter.java
@@ -0,0 +1,445 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package convwatch;
+
+// imports
+import java.util.ArrayList;
+import java.io.File;
+import java.io.FileFilter;
+
+import convwatch.EnhancedComplexTestCase;
+import com.sun.star.lang.XMultiServiceFactory;
+
+import convwatch.ConvWatchException;
+import convwatch.DirectoryHelper;
+import convwatch.GraphicalTestArguments;
+import convwatch.HTMLOutputter;
+import helper.OfficeProvider;
+import helper.OfficeWatcher;
+import helper.OSHelper;
+import convwatch.PerformanceContainer;
+
+/**
+ * The following Complex Test will test
+ * an already created document and it's postscript output (by an older office version)
+ * with a new office version.
+ * This test use Ghostscript for the jpeg export and graphically compare tools from ImageMagick.
+ * Read the manual for more information.
+ *
+ * this is only the starter program
+ * more is found in qadevOOo/runner/convwatch/*
+ */
+
+public class ConvWatchStarter extends EnhancedComplexTestCase
+{
+ // The first of the mandatory functions:
+ /**
+ * Return the name of the test.
+ * In this case it is the actual name of the service.
+ * @return The tested service.
+ */
+ // public String getTestObjectName() {
+ // return "ConvWatch runner";
+ // }
+
+ // The second of the mandatory functions: return all test methods as an
+ // array. There is only one test function in this example.
+ /**
+ * Return all test methods.
+ * @return The test methods.
+ */
+ public String[] getTestMethodNames() {
+ return new String[]{"compareGraphicalDiffs"};
+ }
+
+ String m_sInputPath = "";
+ String m_sReferencePath = "";
+ String m_sOutputPath = "";
+ String m_sDiffPath = null;
+
+ private void initMember()
+ {
+ // MUST PARAMETER
+ // INPUTFILE ----------
+ String sINPATH = (String)param.get( PropertyName.DOC_COMPARATOR_INPUT_PATH );
+ boolean bQuit = false;
+ if (sINPATH == null || sINPATH.length() == 0)
+ {
+ log.println("Please set input path (path to documents) " + PropertyName.DOC_COMPARATOR_INPUT_PATH + "=path.");
+ bQuit = true;
+ }
+ else
+ {
+ log.println("found " + PropertyName.DOC_COMPARATOR_INPUT_PATH + " " + sINPATH);
+ m_sInputPath = sINPATH;
+ }
+
+ // REFERENCE_PATH ----------
+ String sREF = (String)param.get( PropertyName.DOC_COMPARATOR_REFERENCE_PATH );
+ if (sREF == null || sREF.length() == 0)
+ {
+ // log.println("Please set reference file (path to good documents) REFERENCEFILE=path.");
+ log.println("Assumtion, reference directory and input directory are the same.");
+ m_sReferencePath = m_sInputPath;
+ }
+ else
+ {
+ log.println("found " + PropertyName.DOC_COMPARATOR_REFERENCE_PATH + " " + sREF);
+ m_sReferencePath = sREF;
+ }
+
+ // OUTPUT_PATH ----------
+ String sOUT = (String)param.get( PropertyName.DOC_COMPARATOR_OUTPUT_PATH );
+ if (sOUT == null || sOUT.length() == 0)
+ {
+ log.println("Please set output path (path to a temp directory) " + PropertyName.DOC_COMPARATOR_OUTPUT_PATH + "=path.");
+ bQuit = true;
+ }
+ else
+ {
+ log.println("found " + PropertyName.DOC_COMPARATOR_OUTPUT_PATH + " " + sOUT);
+ m_sOutputPath = sOUT;
+ }
+
+ if (bQuit == true)
+ {
+ // log.println("must quit.");
+ assure("Must quit", false);
+ }
+
+
+ // DIFF_PATH ----------
+ String sDIFF = (String)param.get( PropertyName.DOC_COMPARATOR_DIFF_PATH );
+ if (sDIFF == null || sDIFF.length() == 0)
+ {
+ }
+ else
+ {
+ log.println("found " + PropertyName.DOC_COMPARATOR_DIFF_PATH + " " + sDIFF);
+ m_sDiffPath = sDIFF;
+ }
+
+ if (m_sInputPath.startsWith("file:") ||
+ m_sReferencePath.startsWith("file:") ||
+ m_sOutputPath.startsWith("file:"))
+ {
+ assure("We can't handle file: URL right, use system path instead.", false);
+ }
+
+ }
+
+
+ /**
+ *
+ * @return a List of software which must accessable as an external executable
+ */
+ protected Object[] mustInstalledSoftware()
+ {
+ ArrayList aList = new ArrayList();
+ // Tools from ImageMagick
+ if (! OSHelper.isWindows())
+ {
+ aList.add( "composite -version" );
+ aList.add( "identify -version" );
+
+ // Ghostscript
+ aList.add( "gs -version" );
+ }
+ else
+ {
+ aList.add( "composite.exe -version" );
+ aList.add( "identify.exe -version" );
+
+ // Ghostscript
+ aList.add( "gswin32c.exe -version" );
+ }
+
+ return aList.toArray();
+ }
+
+
+ /**
+ * The test method itself.
+ * Don't try to call it from outside, it is started only from qadevOOo runner
+ */
+
+ /* protected */
+ public void compareGraphicalDiffs()
+ {
+ GlobalLogWriter.set(log);
+ String sDBConnection = (String)param.get( PropertyName.DB_CONNECTION_STRING );
+ // check if all need software is installed and accessable
+ checkEnvironment(mustInstalledSoftware());
+
+ GraphicalTestArguments aGTA = getGraphicalTestArguments();
+ if (aGTA == null)
+ {
+ assure("Must quit", false);
+ }
+ if (aGTA.cancelRequest())
+ {
+ return;
+ }
+
+ initMember();
+
+ aGTA.allowStore();
+
+ String sBuildID = aGTA.getBuildID();
+ log.println("Current Office has buildid: " + sBuildID);
+
+ // LLA: sample code, how to access all parameters
+ // for (Enumeration e = param.keys() ; e.hasMoreElements() ;)
+ // {
+ // System.out.println(e.nextElement());
+ // }
+
+ String fs = System.getProperty("file.separator");
+
+ String sHTMLName = "index.html";
+ File aInputPathTest = new File(m_sInputPath);
+ if (!aInputPathTest.isDirectory())
+ {
+ int n = m_sInputPath.lastIndexOf(fs);
+ sHTMLName = m_sInputPath.substring(n + 1);
+ sHTMLName += ".html";
+ }
+ HTMLOutputter HTMLoutput = HTMLOutputter.create(m_sOutputPath, sHTMLName, "", "");
+ HTMLoutput.header( m_sOutputPath );
+ HTMLoutput.indexSection( m_sOutputPath );
+ LISTOutputter LISToutput = LISTOutputter.create(m_sOutputPath, "allfiles.txt");
+
+ DB.init(aGTA.getDBInfoString() + "," + sDBConnection);
+
+ File aInputPath = new File(m_sInputPath);
+ if (aInputPath.isDirectory())
+ {
+ // check a whole directory
+ // a whole directory
+ FileFilter aFileFilter = FileHelper.getFileFilter();
+
+ Object[] aList = DirectoryHelper.traverse(m_sInputPath, aFileFilter, aGTA.includeSubDirectories());
+ if (aList.length == 0)
+ {
+ log.println("Nothing to do, there are no document files found.");
+ }
+ else
+ {
+ for (int i=0;i<aList.length;i++)
+ {
+ String sEntry = (String)aList[i];
+ log.println("- next file is: ------------------------------");
+ log.println(sEntry);
+
+ String sNewSubDir = FileHelper.removeFirstDirectorysAndBasenameFrom(sEntry, m_sInputPath);
+
+ String sNewReferencePath = m_sReferencePath;
+ String sNewOutputPath = m_sOutputPath;
+ String sNewDiffPath = m_sDiffPath;
+ if (sNewSubDir.length() > 0)
+ {
+ if (sNewReferencePath != null)
+ sNewReferencePath = sNewReferencePath + fs + sNewSubDir;
+ // String sNameNoSuffix = FileHelper.getNameNoSuffix(FileHelper.getBasename(sEntry));
+ // sNewReferenceFile = sNewReferencePath + fs + sNameNoSuffix + ".prn";
+
+ sNewOutputPath = sNewOutputPath + fs + sNewSubDir;
+ if (sNewDiffPath != null)
+ sNewDiffPath = sNewDiffPath + fs + sNewSubDir;
+ }
+
+ // NameHelper aNameContainer = new NameHelper(m_sOutputPath, sNewSubDir, FileHelper.getBasename(sEntry));
+ // aNameContainer.print();
+
+ if (aGTA.checkIfUsableDocumentType(sEntry))
+ {
+ runGDCWithStatus(HTMLoutput, LISToutput, sEntry, sNewOutputPath, sNewReferencePath, sNewDiffPath, sNewSubDir);
+ }
+ if (aGTA.cancelRequest())
+ {
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ // check exact name
+ if (aGTA.checkIfUsableDocumentType(m_sInputPath))
+ {
+ runGDCWithStatus(HTMLoutput, LISToutput, m_sInputPath, m_sOutputPath, m_sReferencePath, m_sDiffPath, "");
+ }
+ }
+
+ LISToutput.close();
+ HTMLoutput.close();
+ log.println("The file '" + HTMLoutput.getFilename() + "' shows a html based status.");
+ DB.writeHTMLFile(HTMLoutput.getFilename());
+ }
+
+
+ // -----------------------------------------------------------------------------
+ void runGDCWithStatus(HTMLOutputter _aHTMLoutput, LISTOutputter _aLISToutput, String _sInputFile, String _sOutputPath, String _sReferencePath, String _sDiffPath, String _sNewSubDir )
+ {
+ // start a fresh Office
+ GraphicalTestArguments aGTA = getGraphicalTestArguments();
+
+ OfficeProvider aProvider = null;
+ // SimpleFileSemaphore aSemaphore = new SimpleFileSemaphore();
+ if (aGTA.shouldOfficeStart())
+ {
+ // if (OSHelper.isWindows())
+ // {
+ // aSemaphore.P(aSemaphore.getSemaphoreFile());
+ // }
+
+ aGTA.getPerformance().startTime(PerformanceContainer.OfficeStart);
+ aProvider = new OfficeProvider();
+ XMultiServiceFactory xMSF = (XMultiServiceFactory) aProvider.getManager(param);
+ param.put("ServiceFactory", xMSF);
+ aGTA.getPerformance().stopTime(PerformanceContainer.OfficeStart);
+
+ long nStartTime = aGTA.getPerformance().getTime(PerformanceContainer.OfficeStart);
+ aGTA = getGraphicalTestArguments(); // get new TestArguments
+ aGTA.getPerformance().setTime(PerformanceContainer.OfficeStart, nStartTime);
+ }
+
+ // Watcher Object is need in log object to give a simple way to say if a running office is alive.
+ // As long as a log comes, it pings the Watcher and says the office is alive, if not an
+ // internal counter increase and at a given point (300 seconds) the office is killed.
+ GlobalLogWriter.get().println("Set office watcher");
+ OfficeWatcher aWatcher = (OfficeWatcher)param.get("Watcher");
+ GlobalLogWriter.get().setWatcher(aWatcher);
+ // initializeWatcher(param);
+
+ String sStatusRunThrough = "";
+ String sStatusMessage = "";
+ try
+ {
+ DB.destination_start();
+ // better was:
+ // load document
+ // create postscript from document
+ // check file
+ GraphicalDifferenceCheck.checkOneFile(_sInputFile, _sOutputPath, _sReferencePath, _sDiffPath, aGTA);
+ sStatusRunThrough = "PASSED, OK";
+ DB.destination_finished();
+ }
+ catch(ConvWatchCancelException e)
+ {
+ assure(e.getMessage(), false, true);
+ sStatusRunThrough = "CANCELLED, FAILED";
+ sStatusMessage = e.getMessage();
+ DB.destination_failed(sStatusRunThrough, sStatusMessage);
+ }
+ catch(ConvWatchException e)
+ {
+ assure(e.getMessage(), false, true);
+ sStatusMessage = e.getMessage();
+ sStatusRunThrough = "PASSED, FAILED";
+ DB.destination_failed(sStatusRunThrough, sStatusMessage);
+ }
+ catch(com.sun.star.lang.DisposedException e)
+ {
+ assure(e.getMessage(), false, true);
+ sStatusMessage = e.getMessage();
+ sStatusRunThrough = "FAILED, FAILED";
+ DB.destination_failed(sStatusRunThrough, sStatusMessage);
+ }
+
+ GlobalLogWriter.get().println("Watcher count is: " + aWatcher.getPing());
+
+ // Office shutdown
+ if (aProvider != null)
+ {
+ aProvider.closeExistingOffice(param, true);
+ // if (OSHelper.isWindows())
+ // {
+ // aSemaphore.V(aSemaphore.getSemaphoreFile());
+ // aSemaphore.sleep(2);
+ // // wait some time maybe an other process will take the semaphore
+ // // I know, this is absolutly dirty, but the whole convwatch is dirty and need a big cleanup.
+ // }
+ }
+
+ // -------------------- Status --------------------
+ String fs = System.getProperty("file.separator");
+ String sBasename = FileHelper.getBasename(_sInputFile);
+ String sFilenameNoSuffix = FileHelper.getNameNoSuffix(sBasename);
+
+ // -------------------- List of all files -----------------
+ String sListFile;
+ if (_sNewSubDir.length() > 0)
+ {
+ sListFile = _sNewSubDir + fs + sFilenameNoSuffix + ".ini";
+ }
+ else
+ {
+ sListFile = sFilenameNoSuffix + ".ini";
+ }
+ _aLISToutput.writeValue(sListFile);
+
+ // -------------------- HTML --------------------
+ String sLink;
+ String sLinkDD;
+ String sLinkName;
+ String sLinkDDName;
+ String sHTMLPrefix = aGTA.getHTMLOutputPrefix();
+
+ GlobalLogWriter.get().println("----------------------------------------------------------------------");
+ GlobalLogWriter.get().println(" OutputPath: " + _sOutputPath);
+ GlobalLogWriter.get().println(" NewPath: " + _sNewSubDir);
+ GlobalLogWriter.get().println("----------------------------------------------------------------------");
+
+// if (_sNewSubDir.length() > 0)
+// {
+// sLink = sHTMLPrefix /* + "/cw.php?inifile=" */ + _sOutputPath + fs + _sNewSubDir + fs + sFilenameNoSuffix + ".ini";
+// sLinkDD = sHTMLPrefix /* + "/cw.php?inifile=" */ + _sOutputPath + fs + _sNewSubDir + fs + "DiffDiff_" + sFilenameNoSuffix + ".ini";
+// }
+// else
+// {
+ sLink = sHTMLPrefix /* + "/cw.php?inifile=" */ + _sOutputPath + fs + sFilenameNoSuffix + ".ini";
+ // sLinkDD = sHTMLPrefix /* + "/cw.php?inifile=" */ + _sOutputPath + fs + _sNewSubDir + fs + "DiffDiff_" + sFilenameNoSuffix + ".ini";
+ sLinkDD = sHTMLPrefix /* + "/cw.php?inifile=" */ + _sOutputPath + fs + "DiffDiff_" + sFilenameNoSuffix + ".ini";
+// }
+ sLinkName = sFilenameNoSuffix;
+ sLinkDDName = sFilenameNoSuffix + " (DiffDiff)";
+
+ if (_sDiffPath != null && _sDiffPath.length() > 0)
+ {
+ _aHTMLoutput.indexLine( sLinkDD, sLinkDDName, sLink, sLinkName, sStatusRunThrough, sStatusMessage );
+ }
+ else
+ {
+ _aHTMLoutput.indexLine( sLink, sLinkName, "", "", sStatusRunThrough, sStatusMessage );
+ }
+
+ }
+
+
+}