/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* 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.catalina.webresources;
import java.io.File;
import java.lang.reflect.Field;
import org.junit.Assert;
import org.junit.Test;
import org.apache.catalina.WebResource;
import org.apache.catalina.WebResourceRoot;
public class TestAbstractArchiveResourceSet {
/*
* https://bz.apache.org/bugzilla/show_bug.cgi?id=65586
*/
@Test
public void testBloomFilterWithDirectoryVerifyCleanup() throws Exception {
WebResourceRoot root = new TesterWebResourceRoot();
root.setArchiveIndexStrategy(WebResourceRoot.ArchiveIndexStrategy.BLOOM.name());
File file = new File("webapps/examples/WEB-INF/lib/taglibs-standard-impl-1.2.5-migrated-0.0.1.jar");
JarResourceSet jarResourceSet = new JarResourceSet(root, "/WEB-INF/classes", file.getAbsolutePath(), "/");
jarResourceSet.getArchiveEntries(false);
Assert.assertNotNull(getJarContents(jarResourceSet));
WebResource r1 = jarResourceSet.getResource("/WEB-INF/classes/org/");
Assert.assertTrue(r1.isDirectory());
Assert.assertNotNull(getJarContents(jarResourceSet));
WebResource r2 = jarResourceSet.getResource("/WEB-INF/classes/org");
Assert.assertTrue(r2.isDirectory());
Assert.assertNotNull(getJarContents(jarResourceSet));
jarResourceSet.gc();
Assert.assertNotNull(getJarContents(jarResourceSet));
}
@Test
public void testPurgedBloomFilterWithDirectoryVerifyCleanup() throws Exception {
WebResourceRoot root = new TesterWebResourceRoot();
root.setArchiveIndexStrategy(WebResourceRoot.ArchiveIndexStrategy.PURGED.name());
File file = new File("webapps/examples/WEB-INF/lib/taglibs-standard-impl-1.2.5-migrated-0.0.1.jar");
JarResourceSet jarResourceSet = new JarResourceSet(root, "/WEB-INF/classes", file.getAbsolutePath(), "/");
jarResourceSet.getArchiveEntries(false);
Assert.assertNotNull(getJarContents(jarResourceSet));
WebResource r1 = jarResourceSet.getResource("/WEB-INF/classes/org/");
Assert.assertTrue(r1.isDirectory());
Assert.assertNotNull(getJarContents(jarResourceSet));
WebResource r2 = jarResourceSet.getResource("/WEB-INF/classes/org");
Assert.assertTrue(r2.isDirectory());
Assert.assertNotNull(getJarContents(jarResourceSet));
jarResourceSet.gc();
Assert.assertNull(getJarContents(jarResourceSet));
}
@Test
public void testBloomFilterWithJarResource() throws Exception {
WebResourceRoot root = new TesterWebResourceRoot();
root.setArchiveIndexStrategy(WebResourceRoot.ArchiveIndexStrategy.BLOOM.name());
File file = new File("test/webresources/static-resources.jar");
JarResourceSet jarResourceSet = new JarResourceSet(root, "/", file.getAbsolutePath(), "/META-INF/resources");
jarResourceSet.getArchiveEntries(false);
Assert.assertNotNull(getJarContents(jarResourceSet));
WebResource r1 = jarResourceSet.getResource("/index.html");
Assert.assertTrue(r1.isFile());
}
private JarContents getJarContents(Object target)
throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
Field field = AbstractArchiveResourceSet.class.getDeclaredField("jarContents");
field.setAccessible(true);
JarContents contents = (JarContents) field.get(target);
return contents;
}
}