/*
* ModeShape (http://www.modeshape.org)
*
* 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.modeshape.sequencer.zip;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.EOFException;
import java.io.IOException;
import java.util.Map;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.junit.Test;
import org.modeshape.common.util.IoUtil;
import org.modeshape.jcr.api.JcrConstants;
import org.modeshape.jcr.api.observation.Event;
import org.modeshape.jcr.sequencer.AbstractSequencerTest;
/**
* Unit test for {@link ZipSequencer}
*
* @author Horia Chiorean
*/
public class ZipSequencerTest extends AbstractSequencerTest {
@Test
public void shouldSequenceZip1() throws Exception {
String filename = "testzip.zip";
createNodeWithContentFromFile(filename, filename);
Node outputZip = getOutputNode(rootNode, "zip/" + filename);
assertNotNull(outputZip);
assertEquals(ZipLexicon.FILE, outputZip.getPrimaryNodeType().getName());
assertEquals(2, outputZip.getNodes().getSize());
assertFile(outputZip, "test1.txt", "This is a test content of file 1\n");
Node folder = outputZip.getNode("test subfolder");
assertEquals(1, folder.getNodes().getSize());
assertEquals(JcrConstants.NT_FOLDER, folder.getPrimaryNodeType().getName());
assertFile(folder, "test2.txt", "This is a test content of file2\n");
}
private void assertFile( Node parentNode,
String relativePath,
String expectedContent ) throws RepositoryException, IOException {
Node file = parentNode.getNode(relativePath);
assertNotNull(file);
assertEquals(1, file.getNodes().getSize());
assertEquals(JcrConstants.NT_FILE, file.getPrimaryNodeType().getName());
Node fileContent = file.getNode(JcrConstants.JCR_CONTENT);
assertNotNull(fileContent);
assertEquals("text/plain", fileContent.getProperty(JcrConstants.JCR_MIME_TYPE).getString());
Binary fileData = fileContent.getProperty(JcrConstants.JCR_DATA).getBinary();
assertNotNull(fileData);
if (expectedContent != null) {
assertEquals(expectedContent, IoUtil.read(fileData.getStream()));
}
}
@Test
public void shouldSequenceZip2() throws Exception {
String filename = "test-files.zip";
Node parent = createNodeWithContentFromFile(filename, filename);
Node outputNode = parent.getNode("jcr:content");
Node outputZip = getOutputNode(rootNode, "zip/" + filename);
assertNotNull(outputZip);
assertEquals(ZipLexicon.FILE, outputZip.getPrimaryNodeType().getName());
assertSequencingEventInfo(outputNode, session.getUserID(), "ZIP sequencer", outputNode.getPath(), "/zip");
// Find the sequenced node ...
String path = "/zip/test-files.zip";
assertNode(path + "/MODE-966-fix.patch", JcrConstants.NT_FILE);
assertNode(path + "/MODE-966-fix.patch/jcr:content", JcrConstants.NT_RESOURCE);
assertNode(path + "/testFolder", JcrConstants.NT_FOLDER);
assertNode(path + "/testFolder/MODE-962-fix.patch", JcrConstants.NT_FILE);
assertNode(path + "/testFolder/MODE-962-fix.patch/jcr:content", JcrConstants.NT_RESOURCE);
assertNode(path + "/testFolder/testInnerFolder", JcrConstants.NT_FOLDER);
assertNode(path + "/testFolder/testInnerFolder/MODE-960-fix.patch", JcrConstants.NT_FILE);
assertNode(path + "/testFolder/testInnerFolder/MODE-960-fix.patch/jcr:content", JcrConstants.NT_RESOURCE);
assertNode(path + "/testFolder/testInnerFolder/MODE-960-fix2.patch", JcrConstants.NT_FILE);
assertNode(path + "/testFolder/testInnerFolder/MODE-960-fix2.patch/jcr:content", JcrConstants.NT_RESOURCE);
}
@Test
public void shouldFailIfZipCorrupted() throws Throwable {
String filename = "corrupt.zip";
Node parent = createNodeWithContentFromFile(filename, filename);
Node outputNode = parent.getNode("jcr:content");
expectSequencingFailure(outputNode);
Map<?, ?> sequencingEventInfo = assertSequencingEventInfo(outputNode,
session.getUserID(),
"ZIP sequencer",
outputNode.getPath(),
"/zip");
assertEquals(EOFException.class.getName(), sequencingEventInfo.get(Event.Sequencing.SEQUENCING_FAILURE_CAUSE)
.getClass()
.getName());
}
}