blob: a6fb9d48dae3121f238b1ad00d3e518aa58478e0 [file] [log] [blame]
/*
* 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.jackrabbit.vault.fs.filter;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.jackrabbit.vault.fs.api.FilterSet;
import org.apache.jackrabbit.vault.fs.api.PathFilter;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.PathMapping;
import org.apache.jackrabbit.vault.fs.api.SimplePathMapping;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
import org.apache.tika.io.IOUtils;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
/**
* {@code WorkspaceFilterTest}...
*/
public class WorkspaceFilterTest {
@Test
public void testMatching() {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
PathFilterSet set1 = new PathFilterSet("/foo");
filter.add(set1);
PathFilterSet set2 = new PathFilterSet("/tmp");
set2.addInclude(new DefaultPathFilter("/tmp(/.*)?"));
set2.addExclude(new DefaultPathFilter("/tmp/foo(/.*)?"));
filter.add(set2);
assertTrue(filter.contains("/foo"));
assertTrue(filter.contains("/foo/bar"));
assertTrue(filter.contains("/tmp"));
assertTrue(filter.contains("/tmp/bar"));
assertFalse(filter.contains("/tmp/foo"));
assertFalse(filter.contains("/tmp/foo/bar"));
assertFalse(filter.contains("/"));
assertFalse(filter.contains("/bar"));
assertTrue(filter.covers("/foo"));
assertTrue(filter.covers("/tmp"));
assertTrue(filter.covers("/tmp/foo"));
}
@Test
public void testMapping1() {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
PathFilterSet set1 = new PathFilterSet("/tmp/stage/products");
filter.add(set1);
PathMapping map = new SimplePathMapping("/tmp/stage", "/content/geometrixx/en");
WorkspaceFilter mapped = filter.translate(map);
assertFalse(mapped.contains("/content/geometrixx/en"));
assertTrue(mapped.contains("/content/geometrixx/en/products"));
}
@Test
public void testMapping2() {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
PathFilterSet set1 = new PathFilterSet("/tmp/stage");
set1.addInclude(new DefaultPathFilter("/tmp/stage/products(/.*)?"));
set1.addExclude(new DefaultPathFilter("/tmp/stage/products/triangle(/.*)?"));
set1.addExclude(new DefaultPathFilter(".*/foo"));
filter.add(set1);
PathMapping map = new SimplePathMapping("/tmp/stage", "/content/geometrixx/en");
WorkspaceFilter mapped = filter.translate(map);
assertFalse(mapped.contains("/content/geometrixx/en"));
assertTrue(mapped.contains("/content/geometrixx/en/products"));
assertFalse(mapped.contains("/content/geometrixx/en/products/triangle"));
assertFalse(mapped.contains("/content/geometrixx/en/products/foo"));
}
@Test
public void testRelativePatterns() {
PathFilterSet set1 = new PathFilterSet("/foo");
set1.addInclude(new DefaultPathFilter("/foo/.*"));
set1.addInclude(new DefaultPathFilter("/bar/.*"));
set1.seal();
assertFalse(set1.hasOnlyRelativePatterns());
PathFilterSet set2 = new PathFilterSet("/foo");
set2.addInclude(new DefaultPathFilter(".*/foo/.*"));
set2.addInclude(new DefaultPathFilter(".*/bar/.*"));
set2.seal();
assertTrue(set2.hasOnlyRelativePatterns());
PathFilterSet set3 = new PathFilterSet("/foo");
set3.addInclude(new DefaultPathFilter(".*/foo/.*"));
set3.addInclude(new DefaultPathFilter("/.*/bar/.*"));
set3.seal();
assertFalse(set3.hasOnlyRelativePatterns());
}
@Test
public void testLoadingWorkspaceFilter()
throws IOException, ConfigurationException {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
filter.load(getClass().getResourceAsStream("workspacefilters/items.xml"));
List<PathFilterSet> nodeFilterSets = filter.getFilterSets();
assertNotNull(nodeFilterSets);
assertEquals(1, nodeFilterSets.size());
PathFilterSet nodeFilterSet = nodeFilterSets.get(0);
assertEquals("/var/foo/bar", nodeFilterSet.getRoot());
List<FilterSet.Entry<PathFilter>> nodeFilters = nodeFilterSet.getEntries();
assertEquals(1, nodeFilters.size());
FilterSet.Entry<PathFilter> nodeFilter = nodeFilters.get(0);
assertFalse(nodeFilter.isInclude());
List<PathFilterSet> propertyFilterSets = filter.getPropertyFilterSets();
assertNotNull(propertyFilterSets);
assertEquals(1, propertyFilterSets.size());
PathFilterSet propertyFilterSet = propertyFilterSets.get(0);
assertEquals("/var/foo/bar", propertyFilterSet.getRoot());
List<FilterSet.Entry<PathFilter>> propertyFilters = propertyFilterSet.getEntries();
assertEquals(1, propertyFilters.size());
FilterSet.Entry<PathFilter> propertyFilter = propertyFilters.get(0);
assertFalse(propertyFilter.isInclude());
}
@Test
public void testToSource() throws IOException, ConfigurationException {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
filter.load(getClass().getResourceAsStream("workspacefilters/complex.xml"));
filter.resetSource();
String expected = IOUtils.toString(getClass().getResourceAsStream("workspacefilters/complex-expected.xml"));
assertEquals("Filter source", expected, filter.getSourceAsString());
}
@Test
public void testGeneratedSourceFromCode() {
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<workspaceFilter version=\"1.0\">\n" +
" <filter root=\"/tmp\">\n" +
" <include pattern=\"/tmp\"/>\n" +
" </filter>\n" +
"</workspaceFilter>\n";
PathFilterSet props = new PathFilterSet("/tmp");
PathFilterSet nodes = new PathFilterSet("/tmp");
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
nodes.addInclude(new DefaultPathFilter("/tmp"));
filter.add(nodes, props);
assertEquals(expected, filter.getSourceAsString());
}
@Test
public void testGeneratedSourceFromCodeWithProps() {
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<workspaceFilter version=\"1.0\">\n" +
" <filter root=\"/foo\"/>\n" +
" <filter root=\"/tmp\">\n" +
" <exclude pattern=\"/tmp/foo/p.*\" matchProperties=\"true\"/>\n" +
" </filter>\n" +
"</workspaceFilter>\n";
PathFilterSet properties = new PathFilterSet("/tmp");
properties.addExclude(new DefaultPathFilter("/tmp/foo/p.*"));
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
filter.add(new PathFilterSet("/foo"));
filter.add(new PathFilterSet("/tmp"), properties);
assertEquals(expected, filter.getSourceAsString());
}
@Test
public void testEquals() throws IOException, ConfigurationException {
DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
try (InputStream input = getClass().getResourceAsStream("workspacefilters/complex.xml")) {
filter.load(input);
}
DefaultWorkspaceFilter filter2 = new DefaultWorkspaceFilter();
try (InputStream input = getClass().getResourceAsStream("workspacefilters/complex.xml")) {
filter2.load(input);
}
assertEquals(filter, filter2);
DefaultWorkspaceFilter filter3 = new DefaultWorkspaceFilter();
try (InputStream input = getClass().getResourceAsStream("workspacefilters/mixed.xml")) {
filter3.load(input);
}
assertNotEquals(filter, filter3);
// modify filter2 slightly
filter2.setGlobalIgnored(PathFilter.NONE);
assertNotEquals(filter, filter2);
}
}