/* * Copyright 2012 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.atom.archive; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.artificer.atom.test.AtomTestUtils; import org.junit.Assert; import org.junit.Test; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.BaseArtifactEnum; import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.XsdDocument; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * JUnit test for the {@link ArtificerArchive} class. * * @author eric.wittmann@redhat.com */ public class ArtificerArchiveTest { @Test public void testSrampArchiveFile() throws Exception { InputStream resourceAsStream = null; File tempFile = null; FileOutputStream tempFileStream = null; ArtificerArchive archive = null; try { resourceAsStream = ArtificerArchiveTest.class.getResourceAsStream("simple-sramp-archive.zip"); tempFile = File.createTempFile("sramp_test", "ar"); tempFileStream = new FileOutputStream(tempFile); IOUtils.copy(resourceAsStream, tempFileStream); } finally { IOUtils.closeQuietly(resourceAsStream); IOUtils.closeQuietly(tempFileStream); } try { archive = new ArtificerArchive(tempFile); File workDir = AtomTestUtils.getArchiveWorkDir(archive); Assert.assertNotNull(workDir); Assert.assertTrue(workDir.isDirectory()); Collection<File> files = FileUtils.listFiles(workDir, new String[] {"xsd", "atom"}, true); Assert.assertEquals(2, files.size()); Set<String> fnames = new HashSet<String>(); for (File f : files) { fnames.add(f.getName()); } Assert.assertTrue(fnames.contains("sample.xsd")); Assert.assertTrue(fnames.contains("sample.xsd.atom")); } finally { FileUtils.deleteQuietly(tempFile); ArtificerArchive.closeQuietly(archive); } } @Test public void testGetEntries() throws Exception { InputStream resourceAsStream = null; File tempFile = null; FileOutputStream tempFileStream = null; ArtificerArchive archive = null; try { resourceAsStream = ArtificerArchiveTest.class.getResourceAsStream("simple-sramp-archive.zip"); tempFile = File.createTempFile("sramp_test", "ar"); tempFileStream = new FileOutputStream(tempFile); IOUtils.copy(resourceAsStream, tempFileStream); } finally { IOUtils.closeQuietly(resourceAsStream); IOUtils.closeQuietly(tempFileStream); } try { archive = new ArtificerArchive(tempFile); Collection<ArtificerArchiveEntry> entries = archive.getEntries(); Assert.assertEquals(1, entries.size()); ArtificerArchiveEntry entry = entries.iterator().next(); Assert.assertEquals("simple-sramp-archive/sample.xsd", entry.getPath()); Assert.assertNotNull(entry.getMetaData()); Assert.assertEquals("d658b181-975c-42c5-ad5c-dc65cb9aa4a1", entry.getMetaData().getUuid()); Assert.assertEquals("sample.xsd", entry.getMetaData().getName()); Assert.assertEquals("1.0", entry.getMetaData().getVersion()); } finally { FileUtils.deleteQuietly(tempFile); ArtificerArchive.closeQuietly(archive); } } @Test public void testAddEntry() throws Exception { InputStream artifactContentStream = ArtificerArchiveTest.class.getResourceAsStream("sample.xsd"); XsdDocument artifactMetaData = new XsdDocument(); setMetaData(artifactMetaData, "sample.xsd", "1.0.3", "Just a sample XML Schema."); ArtificerArchive archive = null; try { archive = new ArtificerArchive(); archive.addEntry("sample.xsd", artifactMetaData, artifactContentStream); File workDir = AtomTestUtils.getArchiveWorkDir(archive); Assert.assertNotNull(workDir); Assert.assertTrue(workDir.isDirectory()); Collection<File> files = FileUtils.listFiles(workDir, new String[] {"xsd", "atom"}, true); Assert.assertEquals(2, files.size()); Set<String> fnames = new HashSet<String>(); for (File f : files) { fnames.add(f.getName()); } Assert.assertTrue(fnames.contains("sample.xsd")); Assert.assertTrue(fnames.contains("sample.xsd.atom")); } finally { ArtificerArchive.closeQuietly(archive); } } /** * Full test of creating an empty archive, loading it up with artifacts, then reading it * back out again. As a side effect, this is the only test of the pack() method on the * archive. * @throws Exception */ @Test public void testArchiveRoundtrip() throws Exception { ArtificerArchive archive = null; File archiveFile = null; try { InputStream artifact1ContentStream = ArtificerArchiveTest.class.getResourceAsStream("sample.xsd"); InputStream artifact2ContentStream = ArtificerArchiveTest.class.getResourceAsStream("PO.xsd"); InputStream artifact3ContentStream = ArtificerArchiveTest.class.getResourceAsStream("coremodel.xsd"); InputStream artifact4ContentStream = ArtificerArchiveTest.class.getResourceAsStream("xlink.xsd"); String path1 = "sample/sample.xsd"; String path2 = "sample/PO.xsd"; String path3 = "s-ramp/coremodel.xsd"; String path4 = "s-ramp/xlink.xsd"; XsdDocument artifact1MetaData = new XsdDocument(); XsdDocument artifact2MetaData = new XsdDocument(); XsdDocument artifact3MetaData = new XsdDocument(); XsdDocument artifact4MetaData = new XsdDocument(); setMetaData(artifact1MetaData, "sample.xsd", "1.0.3", "Just a sample XML Schema."); setMetaData(artifact2MetaData, "PO.xsd", "2.1.4", "The Purchase Order schema."); setMetaData(artifact3MetaData, "coremodel.xsd", "1.6.1", "S-RAMP core schema."); setMetaData(artifact4MetaData, "xlink.xsd", "1.6.1", "X-LINK schema."); archive = new ArtificerArchive(); archive.addEntry(path1, artifact1MetaData, artifact1ContentStream); archive.addEntry(path2, artifact2MetaData, artifact2ContentStream); archive.addEntry(path3, artifact3MetaData, artifact3ContentStream); archive.addEntry(path4, artifact4MetaData, artifact4ContentStream); archiveFile = archive.pack(); } finally { ArtificerArchive.closeQuietly(archive); } // Now use the archive we just created, rip it apart and do some assertions try { archive = new ArtificerArchive(archiveFile); Collection<ArtificerArchiveEntry> entries = archive.getEntries(); Assert.assertEquals(4, entries.size()); Map<String, ArtificerArchiveEntry> entryMap = new HashMap<String, ArtificerArchiveEntry>(); for (ArtificerArchiveEntry entry : entries) entryMap.put(entry.getPath(), entry); // Assertions for sample.xsd XsdDocument sampleXsdMetaData = (XsdDocument) entryMap.get("sample/sample.xsd").getMetaData(); Assert.assertNotNull(sampleXsdMetaData); Assert.assertEquals("sample.xsd", sampleXsdMetaData.getName()); Assert.assertEquals("1.0.3", sampleXsdMetaData.getVersion()); Assert.assertEquals("Just a sample XML Schema.", sampleXsdMetaData.getDescription()); // Assertions for PO.xsd XsdDocument poXsdMetaData = (XsdDocument) entryMap.get("sample/PO.xsd").getMetaData(); Assert.assertNotNull(poXsdMetaData); Assert.assertEquals("PO.xsd", poXsdMetaData.getName()); Assert.assertEquals("2.1.4", poXsdMetaData.getVersion()); Assert.assertEquals("The Purchase Order schema.", poXsdMetaData.getDescription()); // Assertions for coremodel.xsd XsdDocument coremodelXsdMetaData = (XsdDocument) entryMap.get("s-ramp/coremodel.xsd").getMetaData(); Assert.assertNotNull(coremodelXsdMetaData); Assert.assertEquals("coremodel.xsd", coremodelXsdMetaData.getName()); Assert.assertEquals("1.6.1", coremodelXsdMetaData.getVersion()); Assert.assertEquals("S-RAMP core schema.", coremodelXsdMetaData.getDescription()); // Assertions for xlink.xsd XsdDocument xlinkXsdMetaData = (XsdDocument) entryMap.get("s-ramp/xlink.xsd").getMetaData(); Assert.assertNotNull(xlinkXsdMetaData); Assert.assertEquals("xlink.xsd", xlinkXsdMetaData.getName()); Assert.assertEquals("1.6.1", xlinkXsdMetaData.getVersion()); Assert.assertEquals("X-LINK schema.", xlinkXsdMetaData.getDescription()); } finally { ArtificerArchive.closeQuietly(archive); FileUtils.deleteQuietly(archiveFile); } } /** * Sets some meta data on the artifact model. * @param artifactMetaData * @param name * @param version * @param desc */ private void setMetaData(XsdDocument artifactMetaData, String name, String version, String desc) { artifactMetaData.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT); artifactMetaData.setName(name); artifactMetaData.setVersion(version); artifactMetaData.setDescription(desc); } }