/*
* 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.geode.internal.cache.persistence.query;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.apache.geode.internal.cache.CachedDeserializable;
import org.apache.geode.internal.cache.persistence.query.IndexMap.IndexEntry;
import org.apache.geode.internal.cache.persistence.query.mock.IndexMapImpl;
import org.apache.geode.internal.cache.persistence.query.mock.NaturalComparator;
import org.apache.geode.internal.cache.persistence.query.mock.Pair;
import org.apache.geode.internal.cache.persistence.query.mock.PairComparator;
import org.apache.geode.test.junit.categories.UnitTest;
@Category(UnitTest.class)
public class TemporaryResultSetFactoryJUnitTest {
@Test
public void testSortedResultSet() {
ResultSet set = new TemporaryResultSetFactory().getSortedResultSet(null, false);
set.add(1);
set.add(2);
set.add(4);
set.add(3);
set.add(2);
assertItrEquals(set.iterator(), 1, 2, 3, 4);
}
@Test
public void testSortedResultBag() {
ResultBag set = new TemporaryResultSetFactory().getSortedResultBag(null, false);
set.add(1);
set.add(2);
set.add(4);
set.add(3);
set.add(2);
assertItrEquals(set.iterator(), 1, 2, 2, 3, 4);
}
@Test
public void testResultList() {
ResultList set = new TemporaryResultSetFactory().getResultList();
set.add(1);
set.add(2);
set.add(4);
set.add(3);
set.add(2);
assertItrEquals(set.iterator(), 1, 2, 4, 3, 2);
assertItrEquals(set.iterator(2), 4, 3, 2);
}
@Test
public void testIndexMap() {
IndexMap map = new IndexMapImpl();
TreeMap expected =
new TreeMap(new PairComparator(new NaturalComparator(), new NaturalComparator()));
put("i1", "r1", "v1", map, expected);
put("i2", "r2", "v4", map, expected);
put("i4", "r4", "v4", map, expected);
put("i2", "r5", "v5", map, expected);
assertItrEquals(map.keyIterator(), "r1", "r2", "r5", "r4");
assertItrEquals(map.keyIterator("i2", true, "i3", true), "r2", "r5");
assertItrEquals(map.keyIterator("i2", true, "i2", true), "r2", "r5");
assertItrEquals(map.getKey("i2"), "r2", "r5");
// See if we can get an entry range
assertEntryEquals(map.iterator("i2", true, "i4", true), expected.tailMap(new Pair("i1", "r2")));
}
private void put(String ikey, String rkey, String value, IndexMap map, Map expected) {
map.put(ikey, rkey, value);
expected.put(new Pair(ikey, rkey), value);
}
private void assertItrEquals(CloseableIterator<CachedDeserializable> iterator, Object... values) {
ArrayList actual = new ArrayList();
while (iterator.hasNext()) {
actual.add(iterator.next().getDeserializedForReading());
}
assertEquals(Arrays.asList(values), actual);
}
private void assertEntryEquals(CloseableIterator<IndexEntry> closeableIterator, Map expected) {
LinkedHashMap actual = new LinkedHashMap();
while (closeableIterator.hasNext()) {
IndexEntry entry = closeableIterator.next();
Object ikey = entry.getKey().getDeserializedForReading();
Object rkey = entry.getRegionKey().getDeserializedForReading();
Object value = entry.getValue().getDeserializedForReading();
actual.put(new Pair(ikey, rkey), value);
}
assertEquals(expected, actual);
}
}