/*
* Copyright (c) 2010-2012 LinkedIn, 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 test.misc;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import krati.core.StoreConfig;
import krati.store.DataSetHandler;
import krati.store.DefaultDataSetHandler;
import test.AbstractTest;
import test.util.FileUtils;
/**
* TestSetDataHandler2
*
* @author jwu
*
*/
public class TestSetDataHandler2 extends AbstractTest {
DataSetHandler _dataHandler = new DataSetHandler2();
static String str1 = "0123456789A0123456789B0123456789C";
static String str2 = "0123456789D0123456789E0123456789F";
static String str3 = "0123456789G0123456789H0123456789I";
public TestSetDataHandler2() {
super(TestSetDataHandler2.class.getSimpleName());
}
public void test() {
int valCnt;
byte[] value1 = str1.getBytes();
byte[] value2 = str2.getBytes();
byte[] value3 = str3.getBytes();
List<byte[]> valueList;
// Add value1
byte[] data1 = _dataHandler.assemble(value1);
valCnt = _dataHandler.count(data1);
assertEquals("Failed on assemble(byte[] value) valueCount: ", 1, valCnt);
assertTrue("Failed on assemble(byte[] value)", _dataHandler.find(value1, data1));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
1, _dataHandler.countCollisions(value1, data1));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
-1, _dataHandler.countCollisions(value2, data1));
valueList = _dataHandler.extractValues(data1);
assertEquals(1, valueList.size());
assertTrue(Arrays.equals(value1, valueList.get(0)));
// Add value2
byte[] data2 = _dataHandler.assemble(value2, data1);
valCnt = _dataHandler.count(data2);
assertEquals("Failed on assemble(byte[] value, byte[] data) valueCount: ", 2, valCnt);
assertTrue("Failed on assemble(byte[] value, byte[] data)", _dataHandler.find(value1, data2));
assertTrue("Failed on assemble(byte[] value, byte[] data)", _dataHandler.find(value2, data2));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
2, _dataHandler.countCollisions(value1, data2));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
2, _dataHandler.countCollisions(value2, data2));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
-2, _dataHandler.countCollisions(value3, data2));
valueList = _dataHandler.extractValues(data2);
assertEquals(2, valueList.size());
// Add value3
byte[] data3 = _dataHandler.assemble(value3, data2);
valCnt = _dataHandler.count(data3);
assertEquals("Failed on assemble(byte[] value, byte[] data) valueCount: ", 3, valCnt);
assertTrue("Failed on assemble(byte[] value, byte[] data)", _dataHandler.find(value1, data3));
assertTrue("Failed on assemble(byte[] value, byte[] data)", _dataHandler.find(value2, data3));
assertTrue("Failed on assemble(byte[] value, byte[] data)", _dataHandler.find(value3, data3));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
3, _dataHandler.countCollisions(value1, data3));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
3, _dataHandler.countCollisions(value2, data3));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
3, _dataHandler.countCollisions(value3, data3));
valueList = _dataHandler.extractValues(data3);
assertEquals(3, valueList.size());
// Delete value2
int len = _dataHandler.remove(value2, data3);
byte[] data4 = new byte[len];
System.arraycopy(data3, 0, data4, 0, len);
valCnt = _dataHandler.count(data4);
assertEquals("Failed on remove(byte[] value, byte[] data) valueCount: ", 2, valCnt);
assertTrue("Failed on remove(byte[] value, byte[] data)", _dataHandler.find(value1, data4));
assertTrue("Failed on remove(byte[] value, byte[] data)", _dataHandler.find(value3, data4));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
-2, _dataHandler.countCollisions(value2, data4));
valueList = _dataHandler.extractValues(data4);
assertEquals(2, valueList.size());
// Delete value1
len = _dataHandler.remove(value1, data4);
byte[] data5 = new byte[len];
System.arraycopy(data4, 0, data5, 0, len);
valCnt = _dataHandler.count(data5);
assertEquals("Failed on remove(byte[] value, byte[] data) valueCount: ", 1, valCnt);
assertTrue("Failed on remove(byte[] value, byte[] data)", _dataHandler.find(value3, data5));
assertEquals("Failed on countCollisions(byte[] value, byte[] data) collisions: ",
-1, _dataHandler.countCollisions(value1, data5));
valueList = _dataHandler.extractValues(data5);
assertEquals(1, valueList.size());
assertTrue(Arrays.equals(value3, valueList.get(0)));
// Delete value3
len = _dataHandler.remove(value3, data5);
assertEquals("Failed on remove(byte[] value, byte[] data)", 0, len);
}
public void testStoreConfig() throws Exception {
File dir = FileUtils.getTestDir(getClass().getSimpleName());
StoreConfig config = new StoreConfig(dir, 10000);
assertTrue(config.getDataHandler() == null);
config.setDataHandler(new DefaultDataSetHandler());
config.save();
StoreConfig config2 = new StoreConfig(dir, 10000);
assertTrue(config2.getDataHandler() == null);
config.setDataHandler(new DataSetHandler2());
config.save();
StoreConfig config3 = new StoreConfig(dir, 10000);
assertTrue(config3.getDataHandler() != null);
assertTrue(config3.getDataHandler().getClass() == DataSetHandler2.class);
FileUtils.deleteDirectory(dir);
}
}