/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.crsh.vfs; import org.crsh.AbstractTestCase; import org.crsh.util.Utils; import org.crsh.vfs.spi.ram.RAMDriver; import org.crsh.vfs.spi.ram.RAMMountFactory; import org.crsh.vfs.spi.url.Node; import org.crsh.vfs.spi.url.URLDriver; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.exporter.ZipExporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import java.io.InputStream; import java.net.URL; import java.util.Iterator; public class FSTestCase extends AbstractTestCase { /** . */ private java.io.File warFile; @Override protected void setUp() throws Exception { java.io.File warFile = java.io.File.createTempFile("test", ".war"); warFile.deleteOnExit(); JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "foo.jar"); jar.addClass(FSTestCase.class); WebArchive war = ShrinkWrap.create(WebArchive.class); war.addAsLibraries(jar); ZipExporter exporter = war.as(ZipExporter.class); exporter.exportTo(warFile, true); this.warFile = warFile; } public void testFoo() throws Exception { FS fs = new FS().mount(FSTestCase.class); File root = fs.get(Path.get("/")); File org = root.child("org"); assertEquals("org", org.getName()); assertEquals(true, org.hasChildren()); Iterator<File> orgChildren = org.children().iterator(); File crsh = orgChildren.next(); assertFalse(orgChildren.hasNext()); assertEquals("crsh", crsh.getName()); assertEquals(true, crsh.hasChildren()); } public void testJar() throws Exception { // Generate test jar java.io.File file = java.io.File.createTempFile("test", ".jar"); file.deleteOnExit(); JavaArchive archive = ShrinkWrap.create(JavaArchive.class); archive.addClass(FSTestCase.class); ZipExporter exporter = archive.as(ZipExporter.class); exporter.exportTo(file, true); // URLDriver driver = new URLDriver(); driver.merge(file.toURI().toURL()); Node root = driver.root(); assertEquals("", driver.name(root)); assertTrue(driver.isDir(root)); // Iterator<Node> rootChildren = driver.children(root).iterator(); Node org = rootChildren.next(); assertFalse(rootChildren.hasNext()); assertEquals("org", driver.name(org)); assertTrue(driver.isDir(org)); // Iterator<Node> orgChildren = driver.children(org).iterator(); Node crsh = orgChildren.next(); assertFalse(orgChildren.hasNext()); assertEquals("crsh", driver.name(crsh)); assertTrue(driver.isDir(crsh)); // Iterator<Node> vfsChildren = driver.children(crsh).iterator(); Node vfs = vfsChildren.next(); assertFalse(vfsChildren.hasNext()); assertEquals("vfs", driver.name(vfs)); assertTrue(driver.isDir(vfs)); // Iterator<Node> clazzChildren = driver.children(vfs).iterator(); Node clazz = clazzChildren.next(); assertFalse(clazzChildren.hasNext()); assertEquals(FSTestCase.class.getSimpleName() + ".class", driver.name(clazz)); assertFalse(driver.isDir(clazz)); Iterator<InputStream> in = driver.open(clazz); assertTrue(in.hasNext()); in.next().close(); assertFalse(in.hasNext()); } public void testNestedJar() throws Exception { // URLDriver driver = new URLDriver(); driver.merge(new URL("jar:" + warFile.toURI().toURL() + "!/WEB-INF/")); Node root = driver.root(); Node lib = driver.child(root, "lib"); Node foo_jar = driver.child(lib, "foo.jar"); assertNotNull(foo_jar); Iterator<InputStream> in = driver.open(foo_jar); assertNotNull(in); assertTrue(in.hasNext()); byte[] bytes = Utils.readAsBytes(in.next()); assertFalse(in.hasNext()); // URL url = new URL("jar:jar:" + warFile.toURI().toURL() + "!/WEB-INF/lib/foo.jar!/org/crsh/"); driver = new URLDriver(); driver.merge(url); root = driver.root(); Node vfs = driver.child(root, "vfs"); Node FSTestCase_class = driver.child(vfs, "FSTestCase.class"); assertNotNull(FSTestCase_class); in = driver.open(FSTestCase_class); assertNotNull(in); assertTrue(in.hasNext()); bytes = Utils.readAsBytes(in.next()); assertFalse(in.hasNext()); } public void testBar() throws Exception { URLDriver driver = new URLDriver(); driver.merge(new URL("jar:" + warFile.toURI().toURL() + "!/WEB-INF/lib/foo.jar!/META-INF/crsh/")); } public void testDuplicateResource() throws Exception { java.io.File file = java.io.File.createTempFile("test", ".jar"); file.deleteOnExit(); JavaArchive jar = ShrinkWrap.create(JavaArchive.class); jar.addClass(FSTestCase.class); jar.as(ZipExporter.class).exportTo(file, true); URLDriver driver = new URLDriver(); driver.merge(file.toURI().toURL()); driver.merge(file.toURI().toURL()); Node node = driver.child(driver.child(driver.child(driver.child(driver.root(), "org"), "crsh"), "vfs"), "FSTestCase.class"); Iterator<InputStream> i = driver.open(node); assertTrue(i.hasNext()); i.next(); assertTrue(i.hasNext()); i.next(); assertFalse(i.hasNext()); } public void testRAM() throws Exception { RAMDriver driver = new RAMDriver(); driver.add("/foo", "bar"); Path root = driver.root(); assertEquals(Path.get("/"), root); Path foo = driver.child(root, "foo"); assertNotNull(foo); Iterator<InputStream> in = driver.open(foo); assertTrue(in.hasNext()); String file = Utils.readAsUTF8(in.next()); assertFalse(in.hasNext()); assertEquals("bar", file); } public void testMount() throws Exception { RAMMountFactory resolver = new RAMMountFactory(); FS fs = new FS.Builder().register("ram", resolver).mount("ram:/;ram:/b").build(); assertEquals(2, fs.drivers.size()); assertInstance(RAMDriver.class, fs.drivers.get(0)); assertInstance(RAMDriver.class, fs.drivers.get(1)); } }