/*
* 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.flink.api.common.io;
import org.apache.flink.core.fs.Path;
import org.apache.flink.core.testutils.CommonTestUtils;
import org.apache.flink.util.OperatingSystem;
import org.junit.Assume;
import org.junit.Test;
import java.io.IOException;
import java.util.Collections;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class GlobFilePathFilterTest {
@Test
public void testDefaultConstructorCreateMatchAllFilter() {
GlobFilePathFilter matcher = new GlobFilePathFilter();
assertFalse(matcher.filterPath(new Path("dir/file.txt")));
}
@Test
public void testMatchAllFilesByDefault() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.<String>emptyList(),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("dir/file.txt")));
}
@Test
public void testExcludeFilesNotInIncludePatterns() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("dir/*"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("dir/file.txt")));
assertTrue(matcher.filterPath(new Path("dir1/file.txt")));
}
@Test
public void testExcludeFilesIfMatchesExclude() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("dir/*"),
Collections.singletonList("dir/file.txt"));
assertTrue(matcher.filterPath(new Path("dir/file.txt")));
}
@Test
public void testIncludeFileWithAnyCharacterMatcher() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("dir/?.txt"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("dir/a.txt")));
assertTrue(matcher.filterPath(new Path("dir/aa.txt")));
}
@Test
public void testIncludeFileWithCharacterSetMatcher() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("dir/[acd].txt"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("dir/a.txt")));
assertFalse(matcher.filterPath(new Path("dir/c.txt")));
assertFalse(matcher.filterPath(new Path("dir/d.txt")));
assertTrue(matcher.filterPath(new Path("dir/z.txt")));
}
@Test
public void testIncludeFileWithCharacterRangeMatcher() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("dir/[a-d].txt"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("dir/a.txt")));
assertFalse(matcher.filterPath(new Path("dir/b.txt")));
assertFalse(matcher.filterPath(new Path("dir/c.txt")));
assertFalse(matcher.filterPath(new Path("dir/d.txt")));
assertTrue(matcher.filterPath(new Path("dir/z.txt")));
}
@Test
public void testExcludeHDFSFile() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("**"),
Collections.singletonList("/dir/file2.txt"));
assertFalse(matcher.filterPath(new Path("hdfs:///dir/file1.txt")));
assertTrue(matcher.filterPath(new Path("hdfs:///dir/file2.txt")));
assertFalse(matcher.filterPath(new Path("hdfs:///dir/file3.txt")));
}
@Test
public void testExcludeFilenameWithStart() {
Assume.assumeTrue("Windows does not allow asterisks in file names.", !OperatingSystem.isWindows());
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("**"),
Collections.singletonList("\\*"));
assertTrue(matcher.filterPath(new Path("*")));
assertFalse(matcher.filterPath(new Path("**")));
assertFalse(matcher.filterPath(new Path("other.txt")));
}
@Test
public void testSingleStarPattern() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("*"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("a")));
assertTrue(matcher.filterPath(new Path("a/b")));
assertTrue(matcher.filterPath(new Path("a/b/c")));
}
@Test
public void testDoubleStarPattern() {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("**"),
Collections.<String>emptyList());
assertFalse(matcher.filterPath(new Path("a")));
assertFalse(matcher.filterPath(new Path("a/b")));
assertFalse(matcher.filterPath(new Path("a/b/c")));
}
@Test(expected = NullPointerException.class)
public void testIncluePatternIsNull() {
new GlobFilePathFilter(
null,
Collections.<String>emptyList());
}
@Test(expected = NullPointerException.class)
public void testExcludePatternIsNull() {
new GlobFilePathFilter(
Collections.singletonList("**"),
null);
}
@Test
public void testGlobFilterSerializable() throws IOException {
GlobFilePathFilter matcher = new GlobFilePathFilter(
Collections.singletonList("**"),
Collections.<String>emptyList());
GlobFilePathFilter matcherCopy = CommonTestUtils.createCopySerializable(matcher);
assertFalse(matcher.filterPath(new Path("a")));
assertFalse(matcher.filterPath(new Path("a/b")));
assertFalse(matcher.filterPath(new Path("a/b/c")));
}
}