blob: f3778658fd6ea701fb089c37de90db5c8d8f246d [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.druid.query.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import com.google.inject.Injector;
import com.google.inject.Key;
import org.apache.druid.guice.GuiceInjectors;
import org.apache.druid.guice.annotations.Json;
import org.apache.druid.query.extraction.ExtractionFn;
import org.apache.druid.query.extraction.RegexDimExtractionFn;
import org.apache.druid.query.ordering.StringComparators;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.IOException;
import java.util.Arrays;
@RunWith(Parameterized.class)
public class BoundDimFilterTest
{
private static final ExtractionFn EXTRACTION_FN = new RegexDimExtractionFn(".*", false, null);
@Parameterized.Parameters
public static Iterable<Object[]> constructorFeeder()
{
return ImmutableList.of(
new Object[]{new BoundDimFilter("dimension", "12", "15", null, null, null, null,
StringComparators.LEXICOGRAPHIC)},
new Object[]{new BoundDimFilter("dimension", "12", "15", null, true, false, null,
StringComparators.LEXICOGRAPHIC)},
new Object[]{new BoundDimFilter("dimension", "12", "15", null, null, true, null,
StringComparators.ALPHANUMERIC)},
new Object[]{new BoundDimFilter("dimension", null, "15", null, true, true, null,
StringComparators.ALPHANUMERIC)},
new Object[]{new BoundDimFilter("dimension", "12", "15", true, null, null, null,
StringComparators.LEXICOGRAPHIC)},
new Object[]{new BoundDimFilter("dimension", "12", null, true, null, true, null,
StringComparators.ALPHANUMERIC)},
new Object[]{new BoundDimFilter("dimension", "12", "15", true, true, true, null,
StringComparators.ALPHANUMERIC)},
new Object[]{new BoundDimFilter("dimension", "12", "15", true, true, false, null,
StringComparators.LEXICOGRAPHIC)},
new Object[]{new BoundDimFilter("dimension", null, "15", null, true, true, EXTRACTION_FN,
StringComparators.ALPHANUMERIC)}
);
}
private final BoundDimFilter boundDimFilter;
public BoundDimFilterTest(BoundDimFilter boundDimFilter)
{
this.boundDimFilter = boundDimFilter;
}
@Test
public void testSerDesBoundFilter() throws IOException
{
Injector defaultInjector = GuiceInjectors.makeStartupInjector();
ObjectMapper mapper = defaultInjector.getInstance(Key.get(ObjectMapper.class, Json.class));
String serBetweenDimFilter = mapper.writeValueAsString(boundDimFilter);
BoundDimFilter actualBoundDimFilter = mapper.readerFor(DimFilter.class).readValue(serBetweenDimFilter);
Assert.assertEquals(boundDimFilter, actualBoundDimFilter);
}
@Test
public void testGetCacheKey()
{
BoundDimFilter boundDimFilter = new BoundDimFilter("dimension", "12", "15", null, null, true, null, StringComparators.ALPHANUMERIC);
BoundDimFilter boundDimFilterCopy = new BoundDimFilter("dimension", "12", "15", false, false, true, null, StringComparators.ALPHANUMERIC);
Assert.assertArrayEquals(boundDimFilter.getCacheKey(), boundDimFilterCopy.getCacheKey());
BoundDimFilter anotherBoundDimFilter = new BoundDimFilter("dimension", "12", "15", true, null, false, null, StringComparators.LEXICOGRAPHIC);
Assert.assertFalse(Arrays.equals(anotherBoundDimFilter.getCacheKey(), boundDimFilter.getCacheKey()));
BoundDimFilter boundDimFilterWithExtract = new BoundDimFilter("dimension", "12", "15", null, null, true, EXTRACTION_FN, StringComparators.ALPHANUMERIC);
BoundDimFilter boundDimFilterWithExtractCopy = new BoundDimFilter("dimension", "12", "15", false, false, true, EXTRACTION_FN, StringComparators.ALPHANUMERIC);
Assert.assertFalse(Arrays.equals(boundDimFilter.getCacheKey(), boundDimFilterWithExtract.getCacheKey()));
Assert.assertArrayEquals(boundDimFilterWithExtract.getCacheKey(), boundDimFilterWithExtractCopy.getCacheKey());
}
@Test
public void testHashCode()
{
BoundDimFilter boundDimFilter = new BoundDimFilter("dimension", "12", "15", null, null, true, null, StringComparators.ALPHANUMERIC);
BoundDimFilter boundDimFilterWithExtract = new BoundDimFilter("dimension", "12", "15", null, null, true, EXTRACTION_FN, StringComparators.ALPHANUMERIC);
Assert.assertNotEquals(boundDimFilter.hashCode(), boundDimFilterWithExtract.hashCode());
}
@Test
public void testGetRequiredColumns()
{
BoundDimFilter boundDimFilter = new BoundDimFilter("dimension", "12", "15", null, null, true, null, StringComparators.ALPHANUMERIC);
Assert.assertEquals(boundDimFilter.getRequiredColumns(), Sets.newHashSet("dimension"));
}
}