/** * Copyright 2013-2014 Recruit Technologies Co., Ltd. and contributors * (see CONTRIBUTORS.md) * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. A copy of the * License is distributed with this work in the LICENSE.md file. You may * also obtain a copy of the License from * * 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.gennai.gungnir.tuple.store; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.List; import org.gennai.gungnir.GungnirManager; import org.gennai.gungnir.topology.GungnirContext; import org.gennai.gungnir.tuple.store.Query.ConditionType; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; public class TestInMemoryTupleStore { private InMemoryTupleStore tupleStore; @Before public void setup() throws Exception { tupleStore = new InMemoryTupleStore(); tupleStore.open(GungnirManager.getManager().getConfig(), new GungnirContext()); for (int i = 0; i < 100; i++) { String key = String.format("%05d", i); for (int j = 10; j <= 28; j += 2) { List<Object> values = Lists.newArrayList(); values.add(key); values.add(j); for (int k = 0; k < 3; k++) { tupleStore.put(String.format("%05d", i), j, values); } } } } @Test public void testCount() throws Exception { assertThat(tupleStore.count(Query.builder().hashKeyValue("00055").build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 18).build()), is(18)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 18).build()), is(15)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 19).build()), is(15)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 100).build()), is(0)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 100).build()), is(0)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 5).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 5).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 28).build()), is(3)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 28).build()), is(0)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 10).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 10).build()), is(27)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 20).build()), is(18)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 20).build()), is(15)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 19).build()), is(15)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 100).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 100).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 5).build()), is(0)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 5).build()), is(0)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 28).build()), is(30)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 28).build()), is(27)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 10).build()), is(3)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 10).build()), is(0)); assertThat(tupleStore.count(Query.builder().hashKeyValue("00055").offset(25).build()), is(5)); assertThat(tupleStore.count(Query.builder().hashKeyValue("00055").limit(10).build()), is(10)); assertThat(tupleStore.count(Query.builder().hashKeyValue("00055").offset(10).limit(5).build()), is(5)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055").offset(25).limit(10).build()), is(5)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00055").offset(30).limit(10).build()), is(0)); } @Test public void testFind() throws Exception { List<List<Object>> results = tupleStore.find(Query.builder().hashKeyValue("00055").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 18).build()); assertThat((Integer) results.get(0).get(1), is(18)); assertThat((Integer) results.get(17).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 18).build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 19).build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 100).build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 100).build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055").timeKeyCondition(ConditionType.GE, 5) .build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055").timeKeyCondition(ConditionType.GT, 5) .build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 28).build()); assertThat((Integer) results.get(0).get(1), is(28)); assertThat((Integer) results.get(2).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 28).build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GE, 10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.GT, 10).build()); assertThat((Integer) results.get(0).get(1), is(12)); assertThat((Integer) results.get(26).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 20).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(17).get(1), is(20)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 20).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 19).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 100).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 100).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055").timeKeyCondition(ConditionType.LE, 5) .build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055").timeKeyCondition(ConditionType.LT, 5) .build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 28).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 28).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(26).get(1), is(26)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LE, 10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(2).get(1), is(10)); results = tupleStore.find(Query.builder().hashKeyValue("00055") .timeKeyCondition(ConditionType.LT, 10).build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00055").offset(25).build()); assertThat((Integer) results.get(0).get(1), is(26)); assertThat((Integer) results.get(4).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055").limit(10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(9).get(1), is(16)); results = tupleStore.find(Query.builder().hashKeyValue("00055").offset(10).limit(5).build()); assertThat((Integer) results.get(0).get(1), is(16)); assertThat((Integer) results.get(4).get(1), is(18)); results = tupleStore.find(Query.builder().hashKeyValue("00055").offset(25).limit(10).build()); assertThat((Integer) results.get(0).get(1), is(26)); assertThat((Integer) results.get(4).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00055").offset(30).limit(10).build()); assertThat(results.size(), is(0)); } // CHECKSTYLE IGNORE MethodLength FOR NEXT 1 LINES @Test public void testFindAndRemove() throws Exception { List<List<Object>> results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00000").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00001") .timeKeyCondition(ConditionType.GE, 18).build()); assertThat((Integer) results.get(0).get(1), is(18)); assertThat((Integer) results.get(17).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00002") .timeKeyCondition(ConditionType.GT, 18).build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00003") .timeKeyCondition(ConditionType.GT, 19).build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00004") .timeKeyCondition(ConditionType.GE, 100).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00005") .timeKeyCondition(ConditionType.GT, 100).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00006") .timeKeyCondition(ConditionType.GE, 5).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00007") .timeKeyCondition(ConditionType.GT, 5).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00008") .timeKeyCondition(ConditionType.GE, 28).build()); assertThat((Integer) results.get(0).get(1), is(28)); assertThat((Integer) results.get(2).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00009") .timeKeyCondition(ConditionType.GT, 28).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00010") .timeKeyCondition(ConditionType.GE, 10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00011") .timeKeyCondition(ConditionType.GT, 10).build()); assertThat((Integer) results.get(0).get(1), is(12)); assertThat((Integer) results.get(26).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00012") .timeKeyCondition(ConditionType.LE, 20).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(17).get(1), is(20)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00013") .timeKeyCondition(ConditionType.LT, 20).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00014") .timeKeyCondition(ConditionType.LT, 19).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00015") .timeKeyCondition(ConditionType.LE, 100).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00016") .timeKeyCondition(ConditionType.LT, 100).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00017") .timeKeyCondition(ConditionType.LE, 5).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00018") .timeKeyCondition(ConditionType.LT, 5).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00019") .timeKeyCondition(ConditionType.LE, 28).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00020") .timeKeyCondition(ConditionType.LT, 28).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(26).get(1), is(26)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00021") .timeKeyCondition(ConditionType.LE, 10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(2).get(1), is(10)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00022") .timeKeyCondition(ConditionType.LT, 10).build()); assertThat(results.size(), is(0)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00023").offset(25).build()); assertThat((Integer) results.get(0).get(1), is(26)); assertThat((Integer) results.get(4).get(1), is(28)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00024").limit(10).build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(9).get(1), is(16)); results = tupleStore.findAndRemove(Query.builder().hashKeyValue("00025").offset(10).limit(5).build()); assertThat((Integer) results.get(0).get(1), is(16)); assertThat((Integer) results.get(4).get(1), is(18)); results = tupleStore .findAndRemove(Query.builder().hashKeyValue("00026").offset(25).limit(10).build()); assertThat((Integer) results.get(0).get(1), is(26)); assertThat((Integer) results.get(4).get(1), is(28)); results = tupleStore .findAndRemove(Query.builder().hashKeyValue("00027").offset(30).limit(10).build()); assertThat(results.size(), is(0)); results = tupleStore.find(Query.builder().hashKeyValue("00000").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00001").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(11).get(1), is(16)); results = tupleStore.find(Query.builder().hashKeyValue("00002").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.find(Query.builder().hashKeyValue("00003").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(14).get(1), is(18)); results = tupleStore.find(Query.builder().hashKeyValue("00004").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00005").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00006").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00007").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00008").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(26).get(1), is(26)); results = tupleStore.find(Query.builder().hashKeyValue("00009").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00010").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00011").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(2).get(1), is(10)); results = tupleStore.find(Query.builder().hashKeyValue("00012").build()); assertThat((Integer) results.get(0).get(1), is(22)); assertThat((Integer) results.get(11).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00013").build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00014").build()); assertThat((Integer) results.get(0).get(1), is(20)); assertThat((Integer) results.get(14).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00015").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00016").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00017").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00018").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00019").build()); assertThat(results, is(nullValue())); results = tupleStore.find(Query.builder().hashKeyValue("00020").build()); assertThat((Integer) results.get(0).get(1), is(28)); assertThat((Integer) results.get(2).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00021").build()); assertThat((Integer) results.get(0).get(1), is(12)); assertThat((Integer) results.get(26).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00022").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00023").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(24).get(1), is(26)); results = tupleStore.find(Query.builder().hashKeyValue("00024").build()); assertThat((Integer) results.get(0).get(1), is(16)); assertThat((Integer) results.get(19).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00025").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(24).get(1), is(28)); results = tupleStore.find(Query.builder().hashKeyValue("00026").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(24).get(1), is(26)); results = tupleStore.find(Query.builder().hashKeyValue("00027").build()); assertThat((Integer) results.get(0).get(1), is(10)); assertThat((Integer) results.get(29).get(1), is(28)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00004") .timeKeyCondition(ConditionType.LT, 14).build()), is(6)); assertThat( tupleStore.count(Query.builder().hashKeyValue("00025") .timeKeyCondition(ConditionType.LE, 16).build()), is(10)); assertThat(tupleStore.count(), is(2609)); } }