/*
* Copyright 2011 JBoss Inc
*
* 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.artificer.test.server.atom.services;
import org.apache.commons.io.IOUtils;
import org.jboss.downloads.artificer._2013.auditing.AuditEntry;
import org.jboss.downloads.artificer._2013.auditing.AuditItemType;
import org.jboss.downloads.artificer._2013.auditing.AuditItemType.Property;
import org.jboss.resteasy.client.ClientResponse;
import org.jboss.resteasy.plugins.providers.atom.Entry;
import org.jboss.resteasy.plugins.providers.atom.Feed;
import org.junit.Assert;
import org.junit.Test;
import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BaseArtifactType;
import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.Document;
import org.artificer.common.MediaType;
import org.artificer.atom.ArtificerAtomUtils;
import org.artificer.client.ClientRequest;
import org.artificer.common.ArtificerConstants;
import org.artificer.common.audit.AuditEntryTypes;
import org.artificer.common.audit.AuditItemTypes;
import org.artificer.common.audit.AuditUtils;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.InputStream;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
/**
* Unit test for the auditing rest api.
*
* @author eric.wittmann@redhat.com
*/
public class AuditResourceTest extends AbstractResourceTest {
@Test
public void testListAndGet() throws Exception {
ClientRequest request = clientRequest("/s-ramp/audit/user/" + getUsername());
ClientResponse<Feed> feedResponse = request.get(Feed.class);
Feed auditEntryFeed = feedResponse.getEntity();
Object totalResultsAttr = auditEntryFeed.getExtensionAttributes().get(ArtificerConstants.SRAMP_TOTAL_RESULTS_QNAME);
int currentTotal = Integer.parseInt(String.valueOf(totalResultsAttr));
Document pdf = addPdf();
// Add another document
addPdf();
// List all the audit entries
request = clientRequest("/s-ramp/audit/artifact/" + pdf.getUuid());
auditEntryFeed = request.get(Feed.class).getEntity();
Assert.assertNotNull(auditEntryFeed);
List<Entry> entries = auditEntryFeed.getEntries();
Assert.assertEquals(1, entries.size());
String auditEntryUuid = null;
for (Entry entry : entries) {
auditEntryUuid = entry.getId().toString().replace("urn:uuid:", "");
}
// GET the audit entry (the last one in the list - the artifact:add)
request = clientRequest("/s-ramp/audit/artifact/" + pdf.getUuid() + "/" + auditEntryUuid);
Entry entry = request.get(Entry.class).getEntity();
AuditEntry auditEntry = ArtificerAtomUtils.unwrap(entry, AuditEntry.class);
Assert.assertNotNull(auditEntry);
Assert.assertEquals(getUsername(), auditEntry.getWho());
Assert.assertEquals(AuditEntryTypes.ARTIFACT_ADD, auditEntry.getType());
List<AuditItemType> auditItems = auditEntry.getAuditItem();
Assert.assertEquals(1, auditItems.size());
Assert.assertNotNull(auditItems);
AuditItemType auditItem = AuditUtils.getAuditItem(auditEntry, AuditItemTypes.PROPERTY_ADDED);
Assert.assertNotNull(auditItem);
Assert.assertEquals(AuditItemTypes.PROPERTY_ADDED, auditItem.getType());
List<Property> properties = auditItem.getProperty();
for (Property property : properties) {
Assert.assertNotNull(property);
String name = property.getName();
String value = property.getValue();
if (name.equals("name")) {
Assert.assertEquals("sample.pdf", value);
} else {
Assert.fail("No assertion for audited property: " + name);
}
}
// List all the audit entries by user
request = clientRequest("/s-ramp/audit/user/" + getUsername());
auditEntryFeed = request.get(Feed.class).getEntity();
Assert.assertNotNull(auditEntryFeed);
totalResultsAttr = auditEntryFeed.getExtensionAttributes().get(ArtificerConstants.SRAMP_TOTAL_RESULTS_QNAME);
int total = Integer.parseInt(String.valueOf(totalResultsAttr));
Assert.assertEquals(2, total - currentTotal);
}
@Test
public void testCreate() throws Exception {
Document pdf = addPdf();
DatatypeFactory dtFactory = DatatypeFactory.newInstance();
// Create another audit entry
ClientRequest request = clientRequest("/s-ramp/audit/artifact/" + pdf.getUuid());
XMLGregorianCalendar now = dtFactory.newXMLGregorianCalendar((GregorianCalendar)Calendar.getInstance());
AuditEntry auditEntry = new AuditEntry();
auditEntry.setType("junit:test1");
auditEntry.setWhen(now);
auditEntry.setWho(getUsername());
AuditItemType item = AuditUtils.getOrCreateAuditItem(auditEntry, "junit:item");
AuditUtils.setAuditItemProperty(item, "foo", "bar");
AuditUtils.setAuditItemProperty(item, "hello", "world");
request.body(MediaType.APPLICATION_AUDIT_ENTRY_XML_TYPE, auditEntry);
ClientResponse<Entry> response = request.post(Entry.class);
Entry entry = response.getEntity();
AuditEntry re = ArtificerAtomUtils.unwrap(entry, AuditEntry.class);
Assert.assertNotNull(re);
Assert.assertNotNull(re.getUuid());
Assert.assertEquals(getUsername(), re.getWho());
Assert.assertEquals(1, re.getAuditItem().size());
Assert.assertEquals("junit:item", re.getAuditItem().iterator().next().getType());
Assert.assertEquals(2, re.getAuditItem().iterator().next().getProperty().size());
// List all the audit entries
request = clientRequest("/s-ramp/audit/artifact/" + pdf.getUuid());
Feed auditEntryFeed = request.get(Feed.class).getEntity();
Assert.assertNotNull(auditEntryFeed);
List<Entry> entries = auditEntryFeed.getEntries();
Assert.assertEquals(2, entries.size());
// Get just the custom entry we created
request = clientRequest("/s-ramp/audit/artifact/" + pdf.getUuid() + "/" + re.getUuid());
response = request.get(Entry.class);
entry = response.getEntity();
re = ArtificerAtomUtils.unwrap(entry, AuditEntry.class);
Assert.assertNotNull(re);
Assert.assertNotNull(re.getUuid());
Assert.assertEquals(getUsername(), re.getWho());
Assert.assertEquals(1, re.getAuditItem().size());
Assert.assertEquals("junit:item", re.getAuditItem().iterator().next().getType());
Assert.assertEquals(2, re.getAuditItem().iterator().next().getProperty().size());
}
/**
* Adds a PDF document to the repository.
* @throws Exception
*/
private Document addPdf() throws Exception {
// Add the PDF to the repository
String artifactFileName = "sample.pdf";
InputStream contentStream = this.getClass().getResourceAsStream("/sample-files/core/" + artifactFileName);
//String uuid = null;
try {
ClientRequest request = clientRequest("/s-ramp/core/Document");
request.header("Slug", artifactFileName);
request.body("application/pdf", contentStream);
ClientResponse<Entry> response = request.post(Entry.class);
Entry entry = response.getEntity();
Assert.assertEquals(artifactFileName, entry.getTitle());
BaseArtifactType arty = ArtificerAtomUtils.unwrapSrampArtifact(entry);
Assert.assertTrue(arty instanceof Document);
return (Document) arty;
} finally {
IOUtils.closeQuietly(contentStream);
}
}
}