From 0eca5eda3b899ddeb7e4715ea4e89c5553b79b64 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 30 Aug 2012 08:45:29 +0200 Subject: [PATCH] OO-336: add a unit test for the PDF extractor to the extraction itself and the caching mechanism --- .../service/document/file/PdfDocument.java | 11 +- .../document/file/PDFDocumentTest.java | 75 ++++++++++ .../document/file/Test_pdf_indexing.pdf | Bin 0 -> 9016 bytes .../java/org/olat/test/AllTestsJunit4.java | 1 + .../java/org/olat/test/VFSJavaIOFile.java | 140 ++++++++++++++++++ 5 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/olat/search/service/document/file/PDFDocumentTest.java create mode 100644 src/test/java/org/olat/search/service/document/file/Test_pdf_indexing.pdf create mode 100644 src/test/java/org/olat/test/VFSJavaIOFile.java diff --git a/src/main/java/org/olat/search/service/document/file/PdfDocument.java b/src/main/java/org/olat/search/service/document/file/PdfDocument.java index 04d4051571b..75bb1c748c8 100644 --- a/src/main/java/org/olat/search/service/document/file/PdfDocument.java +++ b/src/main/java/org/olat/search/service/document/file/PdfDocument.java @@ -64,6 +64,11 @@ public class PdfDocument extends FileDocument { pdfTextBufferPath = SearchServiceFactory.getService().getSearchModuleConfig().getPdfTextBufferPath(); } + public PdfDocument(boolean pdfTextBuffering, String pdfTextBufferPath) { + this.pdfTextBuffering = pdfTextBuffering; + this.pdfTextBufferPath = pdfTextBufferPath; + } + public static Document createDocument(SearchResourceContext leafResourceContext, VFSLeaf leaf) throws IOException,DocumentException,DocumentAccessException { PdfDocument textDocument = new PdfDocument(); textDocument.setFilePath(getPdfTextTmpFilePath(leafResourceContext)); @@ -128,10 +133,12 @@ public class PdfDocument extends FileDocument { String dirPath = fullPdfTextTmpFilePath.substring(0,lastSlash); File dirFile = new File(dirPath); dirFile.mkdirs(); + + FileOutputStream out = new FileOutputStream(pdfTextFile); if(StringHelper.containsNonWhitespace(pdfText.getTitle())) { - FileUtils.save(new FileOutputStream(pdfTextFile), pdfText.getTitle() + "\u00A0|\u00A0" + pdfText.getContent(), "utf-8"); + FileUtils.save(out, pdfText.getTitle() + "\u00A0|\u00A0" + pdfText.getContent(), "utf-8"); } else { - FileUtils.save(new FileOutputStream(pdfTextFile), pdfText.getContent(), "utf-8"); + FileUtils.save(out, pdfText.getContent(), "utf-8"); } } diff --git a/src/test/java/org/olat/search/service/document/file/PDFDocumentTest.java b/src/test/java/org/olat/search/service/document/file/PDFDocumentTest.java new file mode 100644 index 00000000000..555429f97b1 --- /dev/null +++ b/src/test/java/org/olat/search/service/document/file/PDFDocumentTest.java @@ -0,0 +1,75 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.search.service.document.file; + +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.UUID; + +import junit.framework.Assert; + +import org.junit.Test; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.search.service.document.file.FileDocument.FileContent; +import org.olat.test.VFSJavaIOFile; + +/** + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class PDFDocumentTest { + + @Test + public void testPDFDocument() throws DocumentException, DocumentAccessException, URISyntaxException { + URL pdfUrl = PDFDocumentTest.class.getResource("Test_pdf_indexing.pdf"); + Assert.assertNotNull(pdfUrl); + + VFSLeaf doc = new VFSJavaIOFile("Test_1.pdf", new File(pdfUrl.toURI())); + String temp = System.getProperty("java.io.tmpdir"); + PdfDocument document = new PdfDocument(false, temp); + FileContent content = document.readContent(doc); + Assert.assertNotNull(content); + Assert.assertEquals("Test pdf indexing", content.getTitle()); + Assert.assertEquals("Un petit texte en français", content.getContent().trim()); + } + + @Test + public void testPDFDocumentCaching() throws DocumentException, DocumentAccessException, URISyntaxException { + URL pdfUrl = PDFDocumentTest.class.getResource("Test_pdf_indexing.pdf"); + Assert.assertNotNull(pdfUrl); + + VFSLeaf doc = new VFSJavaIOFile(UUID.randomUUID().toString() + ".pdf", new File(pdfUrl.toURI())); + String temp = System.getProperty("java.io.tmpdir"); + PdfDocument document = new PdfDocument(false, temp); + + //index the pdf + FileContent contentIndexed = document.readContent(doc); + Assert.assertNotNull(contentIndexed); + Assert.assertEquals("Test pdf indexing", contentIndexed.getTitle()); + Assert.assertEquals("Un petit texte en français", contentIndexed.getContent().trim()); + + //take from the cache + FileContent contentCached = document.readContent(doc); + Assert.assertNotNull(contentCached); + Assert.assertEquals("Test pdf indexing", contentCached.getTitle()); + Assert.assertEquals("Un petit texte en français", contentCached.getContent().trim()); + } +} \ No newline at end of file diff --git a/src/test/java/org/olat/search/service/document/file/Test_pdf_indexing.pdf b/src/test/java/org/olat/search/service/document/file/Test_pdf_indexing.pdf new file mode 100644 index 0000000000000000000000000000000000000000..16d8cdcb0e9df6dffa044b6778dac33582abf4ee GIT binary patch literal 9016 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 YEW%)MKi(gc2qpv)CFS6d*H9q+KMIz6Q~&?~ literal 0 HcmV?d00001 diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 15495ea5964..42fefc422c4 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -98,6 +98,7 @@ import org.junit.runners.Suite; org.olat.modules.wiki.versioning.diff.CookbookDiffTest.class,//ok org.olat.properties.PropertyTest.class,//ok org.olat.search.service.document.file.FileDocumentFactoryTest.class, + org.olat.search.service.document.file.PDFDocumentTest.class, org.olat.catalog.CatalogManagerTest.class,//ok org.olat.bookmark.BookmarkManagerTest.class,//ok org.olat.notifications.NotificationsManagerTest.class,//fail diff --git a/src/test/java/org/olat/test/VFSJavaIOFile.java b/src/test/java/org/olat/test/VFSJavaIOFile.java new file mode 100644 index 00000000000..5fd92fb877d --- /dev/null +++ b/src/test/java/org/olat/test/VFSJavaIOFile.java @@ -0,0 +1,140 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.test; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.olat.core.util.vfs.VFSConstants; +import org.olat.core.util.vfs.VFSContainer; +import org.olat.core.util.vfs.VFSItem; +import org.olat.core.util.vfs.VFSLeaf; +import org.olat.core.util.vfs.VFSStatus; +import org.olat.core.util.vfs.callbacks.VFSSecurityCallback; + +/** + * An implementation of the VFSLEaf for a pure java.io.File with + * an absolute path. + * + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + */ +public class VFSJavaIOFile implements VFSLeaf { + + private final String name; + private final File file; + + public VFSJavaIOFile(String name, File file) { + this.name = name; + this.file = file; + } + + @Override + public VFSItem resolve(String path) { + return null; + } + + @Override + public VFSContainer getParentContainer() { + return null; + } + + @Override + public void setParentContainer(VFSContainer parentContainer) { + // + } + + @Override + public VFSStatus rename(String newname) { + return VFSConstants.NO; + } + + @Override + public VFSStatus delete() { + return VFSConstants.NO; + } + + @Override + public VFSStatus canRename() { + return VFSConstants.NO; + } + + @Override + public VFSStatus canDelete() { + return VFSConstants.NO; + } + + @Override + public String getName() { + return name == null ? file.getName() : name; + } + + @Override + public long getLastModified() { + return file.lastModified(); + } + + @Override + public VFSStatus canCopy() { + return VFSConstants.NO; + } + + @Override + public VFSStatus canWrite() { + return VFSConstants.NO; + } + + @Override + public VFSSecurityCallback getLocalSecurityCallback() { + return null; + } + + @Override + public void setLocalSecurityCallback(VFSSecurityCallback secCallback) { + // + } + + @Override + public boolean isSame(VFSItem vfsItem) { + return false; + } + + @Override + public InputStream getInputStream() { + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + return null; + } + } + + @Override + public long getSize() { + return file.length(); + } + + @Override + public OutputStream getOutputStream(boolean append) { + return null; + } +} \ No newline at end of file -- GitLab