/*
* (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Thierry Delprat
*/
package org.nuxeo.ecm.platform.audit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.platform.audit.api.AuditLogger;
import org.nuxeo.ecm.platform.audit.api.AuditPageProvider;
import org.nuxeo.ecm.platform.audit.api.AuditReader;
import org.nuxeo.ecm.platform.audit.api.LogEntry;
import org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider;
import org.nuxeo.ecm.platform.audit.impl.LogEntryImpl;
import org.nuxeo.ecm.platform.query.api.PageProvider;
import org.nuxeo.ecm.platform.query.api.PageProviderDefinition;
import org.nuxeo.ecm.platform.query.api.PageProviderService;
import org.nuxeo.ecm.platform.query.core.GenericPageProviderDescriptor;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
import org.nuxeo.runtime.test.runner.LocalDeploy;
/**
* Tests the {@link AuditPageProvider}
*
* @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a>
*/
@RunWith(FeaturesRunner.class)
@Features(AuditFeature.class)
@LocalDeploy({ "org.nuxeo.ecm.platform.audit:test-audit-contrib.xml",
"org.nuxeo.ecm.platform.audit:test-pageprovider-contrib.xml" })
public class TestPageProvider {
protected static final List<String> entriesIdx = Arrays.asList(new String[] { "3", "7", "7", "8", "1", "8", "7",
"9" });
protected static final Calendar testDate = Calendar.getInstance();
@Inject
AuditFeature audit;
@Inject
CoreSession session;
@Before
public void createTestEntries() {
AuditReader reader = Framework.getLocalService(AuditReader.class);
assertNotNull(reader);
audit.clear();
AuditLogger logger = Framework.getLocalService(AuditLogger.class);
assertNotNull(logger);
List<LogEntry> entries = new ArrayList<LogEntry>();
for (String suffix : entriesIdx) {
LogEntry entry = new LogEntryImpl();
entry.setCategory("category" + suffix);
entry.setEventId("event" + suffix);
Calendar eventDate = (Calendar) testDate.clone();
eventDate.add(Calendar.DAY_OF_YEAR, Integer.parseInt(suffix));
entry.setEventDate(eventDate.getTime());
entry.setDocType("docType" + suffix);
entry.setDocUUID("uuid");
entries.add(entry);
}
logger.addLogEntries(entries);
List<?> res = reader.nativeQuery("select count(log.eventId) from LogEntry log", 1, 20);
int count = ((Long) res.get(0)).intValue();
assertEquals(entries.size(), count);
}
@SuppressWarnings("unchecked")
@Test
public void testSimpleProvider() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("GetAllEntries");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(AuditPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("GetAllEntries", null, Long.valueOf(5), Long.valueOf(0),
new HashMap<String, Serializable>());
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(5, entries.size());
assertEquals("category" + entriesIdx.get(0), entries.get(0).getCategory());
assertEquals("category" + entriesIdx.get(3), entries.get(3).getCategory());
assertEquals("category" + entriesIdx.get(4), entries.get(4).getCategory());
long nbPages = pp.getNumberOfPages();
assertEquals(2, nbPages);
pp.nextPage();
entries = (List<LogEntry>) pp.getCurrentPage();
assertEquals(3, entries.size());
assertEquals("category" + entriesIdx.get(0 + 5), entries.get(0).getCategory());
assertEquals("category" + entriesIdx.get(2 + 5), entries.get(2).getCategory());
}
@SuppressWarnings("unchecked")
@Test
public void testProviderWithParams() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("GetAllEntriesInCategory");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(AuditPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("GetAllEntriesInCategory", null, Long.valueOf(2), Long.valueOf(0),
new HashMap<String, Serializable>(), "category7");
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(2, entries.size());
assertEquals("event" + entriesIdx.get(1), entries.get(0).getEventId());
assertEquals("category7", entries.get(0).getCategory());
assertEquals("event" + entriesIdx.get(2), entries.get(1).getEventId());
assertEquals("category7", entries.get(1).getCategory());
long nbPages = pp.getNumberOfPages();
assertEquals(2, nbPages);
pp.nextPage();
entries = (List<LogEntry>) pp.getCurrentPage();
assertEquals(1, entries.size());
assertEquals("event" + entriesIdx.get(6), entries.get(0).getEventId());
assertEquals("category7", entries.get(0).getCategory());
}
@SuppressWarnings("unchecked")
@Test
public void testProviderWithWhereClause() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("GetAllEntriesForDocumentInCategory");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(AuditPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("GetAllEntriesForDocumentInCategory", (DocumentModel) null, null,
Long.valueOf(2), Long.valueOf(0), new HashMap<String, Serializable>(), "uuid");
DocumentModel searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy");
searchDoc.setPropertyValue("dc:title", "category7");
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(2, entries.size());
assertEquals("event" + entriesIdx.get(1), entries.get(0).getEventId());
assertEquals("category7", entries.get(0).getCategory());
assertEquals("event" + entriesIdx.get(2), entries.get(1).getEventId());
assertEquals("category7", entries.get(1).getCategory());
long nbPages = pp.getNumberOfPages();
assertEquals(2, nbPages);
pp.nextPage();
entries = (List<LogEntry>) pp.getCurrentPage();
assertEquals(1, entries.size());
assertEquals("event" + entriesIdx.get(6), entries.get(0).getEventId());
assertEquals("category7", entries.get(0).getCategory());
}
@SuppressWarnings("unchecked")
@Test
public void testProviderWithWhereClause2() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("GetAllEntriesForDocumentInCategories");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(AuditPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("GetAllEntriesForDocumentInCategories", null, Long.valueOf(2),
Long.valueOf(0), new HashMap<String, Serializable>(), "uuid");
DocumentModel searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy");
List<String> cats = new ArrayList<String>();
cats.add("category7");
cats.add("category3");
searchDoc.setPropertyValue("dc:subjects", (Serializable) cats);
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(2, entries.size());
long nbPages = pp.getNumberOfPages();
assertEquals(2, nbPages);
pp.nextPage();
entries = (List<LogEntry>) pp.getCurrentPage();
assertEquals(2, entries.size());
}
@SuppressWarnings("unchecked")
@Test
public void testProviderWithBetweenDates() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("GetAllEntriesBetween2Dates");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(AuditPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("GetAllEntriesBetween2Dates", null, Long.valueOf(6), Long.valueOf(0),
new HashMap<String, Serializable>(), "uuid");
DocumentModel searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy");
Calendar startDate = (Calendar) testDate.clone();
startDate.add(Calendar.DAY_OF_YEAR, 7);
Calendar endDate = (Calendar) testDate.clone();
endDate.add(Calendar.DAY_OF_YEAR, 9);
searchDoc.setPropertyValue("dc:issued", startDate);
searchDoc.setPropertyValue("dc:valid", endDate);
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(6, entries.size());
long nbPages = pp.getNumberOfPages();
assertEquals(1, nbPages);
// test with unset params
searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy2");
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(6, entries.size());
nbPages = pp.getNumberOfPages();
assertEquals(2, nbPages);
pp.nextPage();
entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(2, entries.size());
// test with unset startDate
searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy3");
endDate = (Calendar) testDate.clone();
endDate.add(Calendar.DAY_OF_YEAR, 4);
searchDoc.setPropertyValue("dc:valid", endDate);
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(2, entries.size());
nbPages = pp.getNumberOfPages();
assertEquals(1, nbPages);
// test with unset endDate
searchDoc = session.createDocumentModel("File");
searchDoc.setPathInfo("/", "dummy3");
startDate = (Calendar) testDate.clone();
startDate.add(Calendar.DAY_OF_YEAR, 4);
searchDoc.setPropertyValue("dc:issued", startDate);
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(6, entries.size());
nbPages = pp.getNumberOfPages();
assertEquals(1, nbPages);
}
@SuppressWarnings("unchecked")
@Test
public void testDocumentHistoryPageProvider() throws Exception {
PageProviderService pps = Framework.getService(PageProviderService.class);
assertNotNull(pps);
PageProviderDefinition ppdef = pps.getPageProviderDefinition("DOCUMENT_HISTORY_PROVIDER");
assertNotNull(ppdef);
GenericPageProviderDescriptor gppdef = (GenericPageProviderDescriptor) ppdef;
assertEquals(DocumentHistoryPageProvider.class.getSimpleName(), gppdef.getPageProviderClass().getSimpleName());
PageProvider<?> pp = pps.getPageProvider("DOCUMENT_HISTORY_PROVIDER", null, Long.valueOf(6), Long.valueOf(0),
new HashMap<String, Serializable>(), "uuid");
DocumentModel searchDoc = session.createDocumentModel("BasicAuditSearch");
searchDoc.setPathInfo("/", "auditsearch");
Calendar startDate = (Calendar) testDate.clone();
startDate.add(Calendar.DAY_OF_YEAR, 7);
Calendar endDate = (Calendar) testDate.clone();
endDate.add(Calendar.DAY_OF_YEAR, 9);
searchDoc.setPropertyValue("bas:startDate", startDate);
searchDoc.setPropertyValue("bas:endDate", endDate);
searchDoc = session.createDocument(searchDoc);
pp.setSearchDocumentModel(searchDoc);
assertNotNull(pp);
List<LogEntry> entries = (List<LogEntry>) pp.getCurrentPage();
assertNotNull(entries);
assertEquals(6, entries.size());
long nbPages = pp.getNumberOfPages();
assertEquals(1, nbPages);
}
}