From 1ee1cbd5339c9ecb2e25c45ff9f1d0267e85b1ba Mon Sep 17 00:00:00 2001 From: Jan Vonka Date: Thu, 18 May 2017 15:21:20 +0000 Subject: [PATCH] REPO-2449 - Service Pack: MNT-17561: Unable to preview .zip file contents in Share - add embedded testArchiveToPdf & ensure ArchiveContentTransformerTest is added to suite (wasn't being run before ?) - minor refactor of related tests to ensure "Transformers" subsystem is started before checking content transformer registry - add TEMP workaround to attempt to (re-)start LibreOffice/OpenOffice when running in local env git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@136802 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../ContentMinimalContextTestSuite.java | 56 +++++----- .../AbstractContentTransformerTest.java | 42 +++++++ .../ArchiveContentTransformerTest.java | 105 +++++++++++++----- .../content/transform/EMLTransformerTest.java | 36 +++--- .../OpenOfficeContentTransformerTest.java | 59 +++++----- 5 files changed, 202 insertions(+), 96 deletions(-) diff --git a/source/test-java/org/alfresco/repo/content/ContentMinimalContextTestSuite.java b/source/test-java/org/alfresco/repo/content/ContentMinimalContextTestSuite.java index 3ce7c2276c..4c5b97cc60 100644 --- a/source/test-java/org/alfresco/repo/content/ContentMinimalContextTestSuite.java +++ b/source/test-java/org/alfresco/repo/content/ContentMinimalContextTestSuite.java @@ -32,6 +32,7 @@ import junit.framework.TestSuite; import org.alfresco.repo.content.metadata.*; import org.alfresco.repo.content.transform.AbstractContentTransformerLimitsTest; import org.alfresco.repo.content.transform.AppleIWorksContentTransformerTest; +import org.alfresco.repo.content.transform.ArchiveContentTransformerTest; import org.alfresco.repo.content.transform.BinaryPassThroughContentTransformerTest; import org.alfresco.repo.content.transform.ComplexContentTransformerTest; import org.alfresco.repo.content.transform.ContentTransformerRegistryTest; @@ -85,21 +86,43 @@ public class ContentMinimalContextTestSuite extends TestSuite { // Setup the context getContext(); - + // Off we go TestSuite suite = new TestSuite(); - + // Limits suite.addTest(new JUnit4TestAdapter(AbstractContentTransformerLimitsTest.class)); suite.addTest(new JUnit4TestAdapter(TransformationOptionLimitsTest.class)); suite.addTest(new JUnit4TestAdapter(TransformationOptionPairTest.class)); - + // Transformer Config suite.addTest(new JUnit4TestAdapter(TransformerConfigTestSuite.class)); - + // Source options suite.addTest(new JUnit4TestAdapter(TemporalSourceOptionsTest.class)); - + + // Transform tests + suite.addTestSuite(BinaryPassThroughContentTransformerTest.class); + suite.addTestSuite(ComplexContentTransformerTest.class); + suite.addTestSuite(ContentTransformerRegistryTest.class); + suite.addTestSuite(HtmlParserContentTransformerTest.class); + suite.addTestSuite(MailContentTransformerTest.class); + suite.addTestSuite(EMLTransformerTest.class); + suite.addTestSuite(MediaWikiContentTransformerTest.class); + suite.addTestSuite(OpenOfficeContentTransformerTest.class); + suite.addTestSuite(PdfBoxContentTransformerTest.class); + suite.addTestSuite(PoiContentTransformerTest.class); + suite.addTestSuite(PoiHssfContentTransformerTest.class); + suite.addTestSuite(PoiOOXMLContentTransformerTest.class); + suite.addTestSuite(RuntimeExecutableContentTransformerTest.class); + suite.addTestSuite(StringExtractingContentTransformerTest.class); + suite.addTestSuite(TextMiningContentTransformerTest.class); + suite.addTestSuite(TextToPdfContentTransformerTest.class); + suite.addTestSuite(TikaAutoContentTransformerTest.class); + suite.addTestSuite(ImageMagickContentTransformerTest.class); + suite.addTestSuite(AppleIWorksContentTransformerTest.class); + suite.addTestSuite(ArchiveContentTransformerTest.class); + // Metadata tests suite.addTest(new JUnit4TestAdapter(MetadataExtracterLimitsTest.class)); suite.addTestSuite( DWGMetadataExtracterTest.class ); @@ -114,28 +137,7 @@ public class ContentMinimalContextTestSuite extends TestSuite suite.addTestSuite( PoiMetadataExtracterTest.class ); suite.addTestSuite( RFC822MetadataExtracterTest.class ); suite.addTestSuite( TikaAutoMetadataExtracterTest.class ); - - // Transform tests - suite.addTestSuite(BinaryPassThroughContentTransformerTest.class); - suite.addTestSuite(ComplexContentTransformerTest.class); - suite.addTestSuite(ContentTransformerRegistryTest.class); - suite.addTestSuite(HtmlParserContentTransformerTest.class); - suite.addTestSuite(MailContentTransformerTest.class); - suite.addTest(new JUnit4TestAdapter(EMLTransformerTest.class)); - suite.addTestSuite(MediaWikiContentTransformerTest.class); - suite.addTestSuite(OpenOfficeContentTransformerTest.class); - suite.addTestSuite(PdfBoxContentTransformerTest.class); - suite.addTestSuite(PoiContentTransformerTest.class); - suite.addTestSuite(PoiHssfContentTransformerTest.class); - suite.addTestSuite(PoiOOXMLContentTransformerTest.class); - suite.addTestSuite(RuntimeExecutableContentTransformerTest.class); - suite.addTestSuite(StringExtractingContentTransformerTest.class); - suite.addTestSuite(TextMiningContentTransformerTest.class); - suite.addTestSuite(TextToPdfContentTransformerTest.class); - suite.addTestSuite(TikaAutoContentTransformerTest.class); - suite.addTestSuite(ImageMagickContentTransformerTest.class); - suite.addTestSuite(AppleIWorksContentTransformerTest.class); - + return suite; } } diff --git a/source/test-java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java b/source/test-java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java index 06bebad3e1..3e70a8685f 100644 --- a/source/test-java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/AbstractContentTransformerTest.java @@ -43,12 +43,14 @@ import org.alfresco.repo.content.ContentMinimalContextTestSuite; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.filestore.FileContentReader; import org.alfresco.repo.content.filestore.FileContentWriter; +import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.TempFileProvider; +import org.alfresco.util.exec.RuntimeExec; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; @@ -435,4 +437,44 @@ public abstract class AbstractContentTransformerTest extends TestCase { return false; } + + // TODO externalise ? Review as part of "fast & reliable tests" (and also testing a "reference deployment" that includes LibreOffice/OpenOffice) + private boolean failTestIfOOWorkerUnavailable = true; + + /** + * This method is currently used to skip certain tests if LibreOffice/OpenOffice is not available (eg. on build machines). + * + * @return + * @throws InterruptedException + */ + protected boolean isOpenOfficeWorkerAvailable() throws InterruptedException + { + // workaround for build machines (originally taken from OpenOfficeContentTransformerTest) + ContentTransformerWorker ooWorker = (ContentTransformerWorker) ctx.getBean("transformer.worker.OpenOffice"); + + if (!ooWorker.isAvailable()) + { + // TODO - temporarily attempt to start LibreOffice/OpenOffice (eg. when locally running individual test class &/or method) + // TODO - can we remove this once we have fixed repo startup issue (where LO/OO may not start first time) ? + ChildApplicationContextFactory oooDirectSubsystem = (ChildApplicationContextFactory) ctx.getBean("OOoDirect"); + oooDirectSubsystem.start(); + + Thread.sleep(5000); + + RuntimeExec runtimeExec = (RuntimeExec) oooDirectSubsystem.getApplicationContext().getBean("openOfficeStartupCommand"); + runtimeExec.execute(); + + Thread.sleep(5000); + + if (!ooWorker.isAvailable()) + { + if (failTestIfOOWorkerUnavailable) + { + fail("Failed to run test - ooWorker not available"); + } + return false; + } + } + return true; + } } diff --git a/source/test-java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java b/source/test-java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java index 791b04d610..a00b5dc3c8 100644 --- a/source/test-java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/ArchiveContentTransformerTest.java @@ -1,35 +1,38 @@ -/* - * #%L - * Alfresco Repository - * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco 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 for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ package org.alfresco.repo.content.transform; +import java.io.File; import java.io.IOException; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.filestore.FileContentReader; import org.alfresco.repo.content.filestore.FileContentWriter; +import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.TransformationOptions; @@ -45,6 +48,8 @@ import org.alfresco.util.TempFileProvider; public class ArchiveContentTransformerTest extends AbstractContentTransformerTest { private ArchiveContentTransformer transformer; + + private ContentTransformerRegistry registry; @Override public void setUp() throws Exception @@ -55,6 +60,8 @@ public class ArchiveContentTransformerTest extends AbstractContentTransformerTes transformer.setMimetypeService(mimetypeService); transformer.setTransformerDebug(transformerDebug); transformer.setTransformerConfig(transformerConfig); + + registry = (ContentTransformerRegistry) ctx.getBean("contentTransformerRegistry"); } protected ContentTransformer getTransformer(String sourceMimetype, String targetMimetype) @@ -66,7 +73,9 @@ public class ArchiveContentTransformerTest extends AbstractContentTransformerTes { assertTrue(transformer.isTransformable(MimetypeMap.MIMETYPE_ZIP, -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions())); assertTrue(transformer.isTransformable("application/x-tar", -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions())); - assertTrue(transformer.isTransformable("application/x-gtar", -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions())); + + // TODO should this work ? + //assertTrue(transformer.isTransformable("application/x-gtar", -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions())); } @Override @@ -185,4 +194,48 @@ public class ArchiveContentTransformerTest extends AbstractContentTransformerTes contents.contains("Le renard brun rapide saute par-dessus le chien paresseux") ); } + + public void testArchiveToPdf() throws Exception + { + String sourceMimetype = MimetypeMap.MIMETYPE_ZIP; + String targetMimetype = MimetypeMap.MIMETYPE_PDF; + + // force Transformers subsystem to start (this will also load the ContentTransformerRegistry - including complex/dynamic pipelines) + // note: a call to contentService.getTransformer would also do this .. even if transformer cannot be found (returned as null) + ChildApplicationContextFactory transformersSubsystem = (ChildApplicationContextFactory) ctx.getBean("Transformers"); + transformersSubsystem.start(); + + assertNotNull(registry.getTransformer("transformer.complex.ArchiveToPdf")); + + // note: txt -> pdf currently uses OpenOffice/LibreOffice + if (! isOpenOfficeWorkerAvailable()) + { + // no connection + System.err.println("ooWorker not available - skipping testArchiveToPdf !!"); + return; + } + + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); + ContentTransformer transformer = serviceRegistry.getContentService().getTransformer(sourceMimetype, targetMimetype); + assertNotNull(transformer); + + String sourceExtension = mimetypeService.getExtension(sourceMimetype); + String targetExtension = mimetypeService.getExtension(targetMimetype); + + File zipSourceFile = loadQuickTestFile("zip"); + ContentReader sourceReader = new FileContentReader(zipSourceFile); + + // make a writer for the target file + File targetFile = TempFileProvider.createTempFile(getClass().getSimpleName() + "_" + + getName() + "_" + sourceExtension + "_", "." + targetExtension); + ContentWriter targetWriter = new FileContentWriter(targetFile); + + // do the transformation + sourceReader.setMimetype(sourceMimetype); + targetWriter.setMimetype(targetMimetype); + transformer.transform(sourceReader.getReader(), targetWriter); + + ContentReader targetReader = new FileContentReader(targetFile); + assertTrue(targetReader.getSize() > 0); + } } diff --git a/source/test-java/org/alfresco/repo/content/transform/EMLTransformerTest.java b/source/test-java/org/alfresco/repo/content/transform/EMLTransformerTest.java index 0ded9bb429..a070223fa7 100644 --- a/source/test-java/org/alfresco/repo/content/transform/EMLTransformerTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/EMLTransformerTest.java @@ -31,6 +31,8 @@ import java.io.File; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.filestore.FileContentReader; import org.alfresco.repo.content.filestore.FileContentWriter; +import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.TransformationOptions; @@ -60,7 +62,6 @@ public class EMLTransformerTest extends AbstractContentTransformerTest private EMLTransformer transformer; private ContentTransformerRegistry registry; - private ContentTransformerWorker ooWorker; @Override public void setUp() throws Exception @@ -73,8 +74,6 @@ public class EMLTransformerTest extends AbstractContentTransformerTest transformer.setTransformerConfig(transformerConfig); registry = (ContentTransformerRegistry) ctx.getBean("contentTransformerRegistry"); - - ooWorker = (ContentTransformerWorker) ctx.getBean("transformer.worker.OpenOffice"); } @Override @@ -115,27 +114,34 @@ public class EMLTransformerTest extends AbstractContentTransformerTest */ public void testRFC822ToPdf() throws Exception { - assertNotNull(registry.getTransformer("transformer.complex.Rfc822ToPdf")); - - // workaround for build machines (borrowed from OpenOfficeContentTransformerTest) - if (!ooWorker.isAvailable()) - { - // no connection - return; - } - String sourceMimetype = MimetypeMap.MIMETYPE_RFC822; String targetMimetype = MimetypeMap.MIMETYPE_PDF; + // force Transformers subsystem to start (this will also load the ContentTransformerRegistry - including complex/dynamic pipelines) + // note: a call to contentService.getTransformer would also do this .. even if transformer cannot be found (returned as null) + ChildApplicationContextFactory transformersSubsystem = (ChildApplicationContextFactory) ctx.getBean("Transformers"); + transformersSubsystem.start(); + + assertNotNull(registry.getTransformer("transformer.complex.Rfc822ToPdf")); + + // note: txt -> pdf currently uses OpenOffice/LibreOffice + if (! isOpenOfficeWorkerAvailable()) + { + // no connection + System.err.println("ooWorker available - skipping testRFC822ToPdf !!"); + return; + } + + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); + ContentTransformer transformer = serviceRegistry.getContentService().getTransformer(sourceMimetype, targetMimetype); + assertNotNull(transformer); + String sourceExtension = mimetypeService.getExtension(sourceMimetype); String targetExtension = mimetypeService.getExtension(targetMimetype); File emlSourceFile = loadQuickTestFile("eml"); ContentReader sourceReader = new FileContentReader(emlSourceFile); - ContentTransformer transformer = registry.getTransformer(sourceMimetype, -1, targetMimetype, null); - assertNotNull(transformer); - // make a writer for the target file File targetFile = TempFileProvider.createTempFile(getClass().getSimpleName() + "_" + getName() + "_" + sourceExtension + "_", "." + targetExtension); diff --git a/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java b/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java index c4af1e28d2..df6e1d66f5 100644 --- a/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/OpenOfficeContentTransformerTest.java @@ -1,28 +1,28 @@ -/* - * #%L - * Alfresco Repository - * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco 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 for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ +/* + * #%L + * Alfresco Repository + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * This file is part of the Alfresco software. + * If the software was purchased under a paid Alfresco license, the terms of + * the paid license agreement will prevail. Otherwise, the software is + * provided under the following open source license terms: + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + * #L% + */ package org.alfresco.repo.content.transform; import java.io.File; @@ -77,9 +77,10 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer public void testReliability() throws Exception { - if (!worker.isAvailable()) + if (!isOpenOfficeWorkerAvailable()) { // no connection + System.err.println("ooWorker not available - skipping testReliability !!"); return; } boolean reliability = transformer.isTransformable(MIMETYPE_RUBBISH, -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions()); @@ -99,9 +100,10 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer */ public void testHtmlToPdf() throws Exception { - if (!worker.isAvailable()) + if (!isOpenOfficeWorkerAvailable()) { // no connection + System.err.println("ooWorker not available - skipping testHtmlToPdf !!"); return; } File htmlSourceFile = loadQuickTestFile("html"); @@ -120,9 +122,10 @@ public class OpenOfficeContentTransformerTest extends AbstractContentTransformer */ public void testEmptyHtmlToEmptyPdf() throws Exception { - if (!worker.isAvailable()) + if (!isOpenOfficeWorkerAvailable()) { // no connection + System.err.println("ooWorker not available - skipping testEmptyHtmlToEmptyPdf !!"); return; } URL url = this.getClass().getClassLoader().getResource("misc/empty.html");