/*
* Copyright (C) 2016 Red Hat, Inc. and/or its affiliates
*
* Licensed 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.jbpm.document.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.jbpm.document.Document;
import org.jbpm.document.service.impl.DocumentStorageServiceImpl;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class DocumentStorageServiceImplTest {
private static final String STORAGE_PATH_TEST = "target/docs";
@Parameters(name= "{index}: impl={0}")
public static Iterable<Object[]> data() {
System.setProperty("org.jbpm.document.storage", STORAGE_PATH_TEST);
return Arrays.asList(new Object[][] {
{new DocumentStorageServiceImpl()},
{DocumentStorageServiceProvider.get().getStorageService()}
});
}
private DocumentStorageService documentStorageService;
public DocumentStorageServiceImplTest(DocumentStorageService documentStorageService) {
this.documentStorageService = documentStorageService;
}
@AfterClass
public static void cleanupOnce() {
System.clearProperty("org.jbpm.document.storage");
}
@Before
public void setup() {
// clean document storage
File storagePath = new File(STORAGE_PATH_TEST);
deleteFolder(storagePath);
}
protected void deleteFolder(File path) {
File[] directories = path.listFiles();
if (directories != null) {
for (File file : directories) {
if (file.isDirectory()) {
deleteFolder(file);
}
file.delete();
}
}
}
@Test
public void testSaveAndGetDocument() {
byte[] content = "document content".getBytes();
Document document = documentStorageService.buildDocument("mydoc", content.length, new Date(), new HashMap<String, String>());
assertNotNull(document.getIdentifier());
documentStorageService.saveDocument(document, content);
Document fromStorage = documentStorageService.getDocument(document.getIdentifier());
assertNotNull(fromStorage);
assertEquals(document.getIdentifier(), fromStorage.getIdentifier());
assertEquals(document.getName(), fromStorage.getName());
assertEquals(content.length, fromStorage.getContent().length);
}
@Test
public void testSaveAndDeleteDocument() {
byte[] content = "another document content".getBytes();
Document document = documentStorageService.buildDocument("mydoc", content.length, new Date(), new HashMap<String, String>());
assertNotNull(document.getIdentifier());
documentStorageService.saveDocument(document, content);
Document fromStorage = documentStorageService.getDocument(document.getIdentifier());
assertNotNull(fromStorage);
assertEquals(document.getIdentifier(), fromStorage.getIdentifier());
assertEquals(document.getName(), fromStorage.getName());
assertEquals(content.length, fromStorage.getContent().length);
documentStorageService.deleteDocument(fromStorage);
fromStorage = documentStorageService.getDocument(document.getIdentifier());
assertNull(fromStorage);
}
@Test
public void testSaveAndDeleteByIdDocument() {
byte[] content = "yet another document content".getBytes();
Document document = documentStorageService.buildDocument("mydoc", content.length, new Date(), new HashMap<String, String>());
assertNotNull(document.getIdentifier());
documentStorageService.saveDocument(document, content);
Document fromStorage = documentStorageService.getDocument(document.getIdentifier());
assertNotNull(fromStorage);
assertEquals(document.getIdentifier(), fromStorage.getIdentifier());
assertEquals(document.getName(), fromStorage.getName());
assertEquals(content.length, fromStorage.getContent().length);
documentStorageService.deleteDocument(fromStorage.getIdentifier());
fromStorage = documentStorageService.getDocument(document.getIdentifier());
assertNull(fromStorage);
}
@Test
public void testSaveAndListDocuments() {
long lastModified = System.currentTimeMillis() - 10000;
for (int i = 0; i < 10; i++) {
byte[] content = (i +" another document content").getBytes();
Document document = documentStorageService.buildDocument("mydoc"+i, content.length, new Date(lastModified + i * 1000), new HashMap<String, String>());
assertNotNull(document.getIdentifier());
documentStorageService.saveDocument(document, content);
}
List<Document> docs = documentStorageService.listDocuments(0, 5);
assertNotNull(docs);
assertEquals(5, docs.size());
assertEquals("mydoc" + 0, docs.get(0).getName());
assertEquals("mydoc" + 1, docs.get(1).getName());
assertEquals("mydoc" + 2, docs.get(2).getName());
assertEquals("mydoc" + 3, docs.get(3).getName());
assertEquals("mydoc" + 4, docs.get(4).getName());
docs = documentStorageService.listDocuments(1, 5);
assertNotNull(docs);
assertEquals(5, docs.size());
assertEquals("mydoc" + 5, docs.get(0).getName());
assertEquals("mydoc" + 6, docs.get(1).getName());
assertEquals("mydoc" + 7, docs.get(2).getName());
assertEquals("mydoc" + 8, docs.get(3).getName());
assertEquals("mydoc" + 9, docs.get(4).getName());
docs = documentStorageService.listDocuments(1, 2);
assertNotNull(docs);
assertEquals(2, docs.size());
assertEquals("mydoc" + 2, docs.get(0).getName());
assertEquals("mydoc" + 3, docs.get(1).getName());
}
@Test
public void testListDocumentsLessThanPageSize() {
byte[] content = "yet another document content".getBytes();
Document document = documentStorageService.buildDocument("mydoc", content.length, new Date(), new HashMap<String, String>());
assertNotNull(document.getIdentifier());
documentStorageService.saveDocument(document, content);
List<Document> docs = documentStorageService.listDocuments(0, 5);
assertNotNull(docs);
assertEquals(1, docs.size());
assertEquals("mydoc", docs.get(0).getName());
}
}