blob: 827bc60f84225410253acc4d3bc29ceeea1f6325 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* 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.apache.jackrabbit.classloader;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import org.apache.jackrabbit.util.Text;
public class ExpandingArchiveClassPathEntryTest extends ClassLoaderTestBase {
private static final String NODE_TYPE = "rep:jarFile";
private static final String ROOT = "/test";
private static final String JAR_PATH = ROOT + "/mock.jar";
protected void setUp() throws Exception {
super.setUp();
if (session.itemExists(ROOT)) {
log.info("Removing old test root entry");
session.getItem(ROOT).remove();
session.save();
}
}
protected void tearDown() throws Exception {
if (session.itemExists(ROOT)) {
session.getItem(ROOT).remove();
session.save();
}
super.tearDown();
}
public void testCanExpand() throws RepositoryException {
// check for the node type - may or may not exist
try {
session.getWorkspace().getNodeTypeManager().getNodeType(NODE_TYPE);
log.info("Node type " + NODE_TYPE + " already registered");
} catch (NoSuchNodeTypeException nsoe) {
// expected behaviour
log.info("Node type " + NODE_TYPE + " not registered yet");
}
boolean canExpand = ExpandingArchiveClassPathEntry.canExpandArchives(session);
assertTrue("Expecting archives to be expandable", canExpand);
// check for the node type - must exist
session.getWorkspace().getNodeTypeManager().getNodeType(NODE_TYPE);
log.info("Node type " + NODE_TYPE + " already registered");
}
public void testExpand() throws IOException, RepositoryException {
URL url = getClass().getResource("/mock.jar");
Node parent = getParent(session, JAR_PATH);
Node jar = parent.addNode(Text.getName(JAR_PATH), "nt:file");
makeFileNode(jar, url.openConnection());
session.save();
Property prop = Util.getProperty(session.getItem(JAR_PATH));
ExpandingArchiveClassPathEntry pe =
new ExpandingArchiveClassPathEntry(prop, JAR_PATH);
ClassLoaderResource res = pe.getResource("mock/aDir/anotherFile.txt");
assertNotNull("anotherFile.txt expected to exist", res);
url = res.getURL();
assertNotNull("anotherFile's URL missing", url);
String data = new String(res.getBytes());
log.info("URL : " + url);
log.info("Path: " + res.getPath());
log.info("Prop: " + res.getProperty().getPath());
log.info("Data: '" + data + "'");
log.info("Size: " + res.getContentLength() + " (bytes: " + res.getBytes().length + ")");
log.info("Time: " + new Date(res.getLastModificationTime()));
}
}