/**
* Copyright 2011-2012 Akiban Technologies, Inc.
*
* Licensed 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 com.persistit.unit;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import org.junit.Test;
import com.persistit.TreeSelector;
public class TreeSelectorTest {
@Test
public void allSelector() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("*", false, '\\');
assertTrue(ts.isVolumeNameSelected("mydata"));
assertTrue(ts.isVolumeNameSelected("mystuff"));
assertTrue(ts.isTreeNameSelected("mydata", "anindex"));
assertTrue(ts.isTreeNameSelected("mydata", "anxedni"));
}
@Test
public void simpleSelector() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("*data:*index", false, '\\');
assertTrue(ts.isVolumeNameSelected("mydata"));
assertFalse(ts.isVolumeNameSelected("mystuff"));
assertTrue(ts.isTreeNameSelected("mydata", "anindex"));
assertFalse(ts.isTreeNameSelected("mydata", "anxedni"));
}
@Test
public void volumeOnlySelector() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("akiban_data*", false, '\\');
assertTrue(ts.isVolumeNameSelected("akiban_data.v01"));
assertFalse(ts.isVolumeNameSelected("mystuff"));
assertTrue(ts.isTreeNameSelected("akiban_data.v01", "anindex"));
assertTrue(ts.isTreeNameSelected("akiban_data.v01", "_directory"));
}
@Test
public void toxicCharactersSelector() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("*:customer$$group(something...*)[a-z]$$$$27", false, '\\');
assertTrue(ts.isTreeNameSelected("akiban_data.v01", "customer$$group(something...)[a-z]$$$$27"));
assertTrue(ts.isTreeNameSelected("akiban_data.v01", "customer$$group(something...xyz)[a-z]$$$$27"));
assertFalse(ts.isTreeNameSelected("akiban_data.v01", "customer$$group(something...)m$$$$27"));
}
@Test
public void simpleSelectorWithKeyFilter() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("*data:*index{1:2}", false, '\\');
assertTrue(ts.isVolumeNameSelected("mydata"));
assertFalse(ts.isVolumeNameSelected("mystuff"));
assertTrue(ts.isTreeNameSelected("mydata", "anindex"));
assertFalse(ts.isTreeNameSelected("mydata", "anxedni"));
assertNotNull(ts.keyFilter("mydata", "anindex"));
assertNull(ts.keyFilter("mydata", "someothertree"));
}
@Test
public void simpleTreeList() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("v1:t1,v1:t2,v1:t3,v1:t4", false, '\\');
assertTrue(ts.isVolumeNameSelected("v1"));
assertFalse(ts.isVolumeNameSelected("v2"));
assertTrue(ts.isTreeNameSelected("v1", "t1"));
assertTrue(ts.isTreeNameSelected("v1", "t2"));
assertTrue(ts.isTreeNameSelected("v1", "t3"));
assertTrue(ts.isTreeNameSelected("v1", "t4"));
assertFalse(ts.isTreeNameSelected("v1", "t5"));
assertFalse(ts.isTreeNameSelected("v2", "t1"));
assertEquals("v1:t1,v1:t2,v1:t3,v1:t4", ts.toString());
}
@Test
public void complexCase() throws Exception {
final TreeSelector ts = TreeSelector.parseSelector("v1:t1{1:10,\"a\"},v?:t?{10:20},x*:other*", false, '\\');
assertTrue(ts.isVolumeNameSelected("v1"));
assertTrue(ts.isVolumeNameSelected("v9"));
assertTrue(ts.isVolumeNameSelected("xanything"));
assertFalse(ts.isVolumeNameSelected("yanything"));
assertTrue(ts.isTreeNameSelected("v1", "t2"));
assertNotNull(ts.keyFilter("v1", "t2"));
try {
ts.keyFilter("v1", "t1");
fail();
} catch (final Exception e) {
// okay
}
}
@Test
public void emptyCase() throws Exception {
TreeSelector ts = TreeSelector.parseSelector("", false, '\\');
assertTrue(ts.isSelectAll());
ts = TreeSelector.parseSelector("*", false, '\\');
assertTrue(ts.isSelectAll());
}
}