package com.linkedin.databus.core; /* * * Copyright 2013 LinkedIn Corp. All rights reserved * * 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. * */ import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.jackson.map.ObjectMapper; import org.testng.annotations.Test; import com.linkedin.databus.core.DbusEventFactory; import com.linkedin.databus.core.DbusEventV1Factory; import com.linkedin.databus.core.test.DbusEventFactoryForTesting; import com.linkedin.databus.core.util.InvalidConfigException; import com.linkedin.databus.core.util.RngUtils; import com.linkedin.databus2.core.filter.DbusKeyCompositeFilter; import com.linkedin.databus2.core.filter.DbusKeyFilter; import com.linkedin.databus2.core.filter.KeyFilterConfigHolder; import com.linkedin.databus2.core.filter.KeyFilterConfigJSONFactory; import com.linkedin.databus2.core.filter.KeyModFilterConfig; import com.linkedin.databus2.core.filter.KeyRangeFilterConfig; import static org.testng.AssertJUnit.assertEquals; /** * @author bvaradar * * Unit Test for DbusKeyCompositeFilter */ public class TestDbusKeyCompositeFilter { private static final DbusEventFactory _eventFactory = new DbusEventV1Factory(); @Test public void testDbusKeyCompositeFilter() throws Exception { KeyFilterConfigHolder.Config partConf1 = new KeyFilterConfigHolder.Config(); partConf1.setType("MOD"); KeyModFilterConfig.Config modConf1 = new KeyModFilterConfig.Config(); modConf1.setNumBuckets(100); modConf1.setBuckets("[0,0]"); partConf1.setMod(modConf1); KeyFilterConfigHolder.Config partConf2 = new KeyFilterConfigHolder.Config(); partConf2.setType("RANGE"); KeyRangeFilterConfig.Config rangeConf = new KeyRangeFilterConfig.Config(); rangeConf.setSize(100); rangeConf.setPartitions("[3-4,3-4]"); partConf2.setRange(rangeConf); HashMap<Long, KeyFilterConfigHolder> partConfigMap = new HashMap<Long, KeyFilterConfigHolder>(); partConfigMap.put(1L, new KeyFilterConfigHolder(partConf1.build())); partConfigMap.put(2L, new KeyFilterConfigHolder(partConf2.build())); List<Long> keys1 = new ArrayList<Long>(); List<Long> keys2 = new ArrayList<Long>(); List<Long> keys3 = new ArrayList<Long>(); for (long i = 0 ; i < 1000 ;i++) { keys1.add(i); keys2.add(i); keys3.add(i); } List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); generateEvents(1000, (short)1, keys1, dbusEvents ); generateEvents(1000, (short)2, keys2, dbusEvents ); generateEvents(1000, (short)3, keys3, dbusEvents ); List<DbusEvent> expPassedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> expFailedEvents = new ArrayList<DbusEvent>(); System.out.println("TOTAL Events :" + dbusEvents.size()); for (DbusEvent event : dbusEvents) { long key = event.key(); int srcId = event.srcId(); long bktId = key%100; if ((srcId == 1) && (bktId ==0)) expPassedEvents.add(event); else if ((srcId == 2) && ( (key >= 300) && ( key < 500))) expPassedEvents.add(event); else if ( srcId == 3) expPassedEvents.add(event); else expFailedEvents.add(event); } DbusKeyCompositeFilter filter = new DbusKeyCompositeFilter(partConfigMap); filter.dedupe(); List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if ( filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", expPassedEvents.size(), passedEvents.size()); assertEquals("Failed Size", expFailedEvents.size(), failedEvents.size()); for ( int i = 0; i < passedEvents.size(); i++ ) { assertEquals("Passed Element " + i, expPassedEvents.get(i), passedEvents.get(i)); } for ( int i = 0; i < passedEvents.size(); i++ ) { assertEquals("Failed Element " + i, expFailedEvents.get(i), failedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter.getFilterMap()); System.out.println("CompositeKeyFilter :" + objStr); Map<Long, DbusKeyFilter> map2 = KeyFilterConfigJSONFactory.parseSrcIdFilterConfigMap(objStr); String objStr2 = objMapper.writeValueAsString(filter.getFilterMap()); System.out.println("CompositeKeyFilter2 :" + objStr2); assertEquals("CompositeKeys: JSON Serialization Test", objStr, objStr2); //String objStr3 = "{\"filterMap\":{\"40\":{\"partitionType\":\"RANGE\",\"filters\":[{\"keyRange\":{\"start\":100,\"end\":200}},{\"keyRange\":{\"start\":300,\"end\":500}},{\"keyRange\":{\"start\":100,\"end\":200}},{\"keyRange\":{\"start\":300,\"end\":500}}]}}}"; //DbusKeyCompositeFilter f = KeyFilterJSONFactory.parseKeyCompositeFilter(objStr3); //System.out.println("Deserialized Filter is :" + f); String objStr4 = "{\"40\":{\"partitionType\":\"RANGE\",\"filters\":[{\"keyRange\":{\"start\":100,\"end\":200}},{\"keyRange\":{\"start\":300,\"end\":500}},{\"keyRange\":{\"start\":100,\"end\":200}},{\"keyRange\":{\"start\":300,\"end\":500}}]}}}"; Map<Long, DbusKeyFilter> map3 = KeyFilterConfigJSONFactory.parseSrcIdFilterConfigMap(objStr4); DbusKeyCompositeFilter f2 = new DbusKeyCompositeFilter(); f2.setFilterMap(map3); System.out.println("Deserialized Filter is (before dedupe): " + f2); f2.dedupe(); System.out.println("Deserialized Filter is (after dedupe): " + f2); } @Test public void testDbusKeyNoneFilter() throws Exception { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("NONE"); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); List<Long> keys = new ArrayList<Long>(); for (long i = 0 ; i < 1000 ;i++) { keys.add(i); } generateEvents(1000, (short)1, keys, dbusEvents ); List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if ( filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", dbusEvents.size(), passedEvents.size()); assertEquals("Failed Size",0, failedEvents.size()); for ( int i = 0; i < passedEvents.size(); i++ ) { assertEquals("Passed Element " + i, dbusEvents.get(i), passedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter); System.out.println("KeyFilter :" + objStr); DbusKeyFilter filter2 = KeyFilterConfigJSONFactory.parseDbusKeyFilter(objStr); String objStr2 = objMapper.writeValueAsString(filter2); System.out.println("KeyFilter2 :" + objStr2); assertEquals("KeyNoneFilter: JSON Serialization Test", objStr, objStr2); } @Test public void testDbusKeyModFilterErrors() throws Exception { //Error Config : MaxBucket is more than numBuckets boolean isException = false; try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(5); modConf.setBuckets("[0,3-9]"); //invalid config partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ie) { ie.printStackTrace(); isException = true; } assertEquals("Got Exception for invalid Config (MaxBucket is more than numBuckets) ", true, isException); //Error Case : Min Bucket is more than maxBucket isException = false; try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(50); modConf.setBuckets("[0,9-3]"); //invalid config partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ie) { ie.printStackTrace(); isException = true; } assertEquals("Got Exception for invalid Config (Min Bucket is more than maxBucket) ", true, isException); //Error Case : numBuckets is negative isException = false; try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(-5); modConf.setBuckets("[0]"); //invalid config partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ie) { ie.printStackTrace(); isException = true; } assertEquals("Got Exception for invalid Config numBuckets is negative) ", true, isException); //Error Case : minBucket is negative isException = false; try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(50); modConf.setBuckets("[-5,1-3]"); //invalid config partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ie) { ie.printStackTrace(); isException = true; } assertEquals("Got Exception for invalid Config (minBucket is negative) ", true, isException); } @Test public void testDbusKeyModFilter() throws Exception { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(100); modConf.setBuckets("[0,3-4]"); partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); List<Long> keys = new ArrayList<Long>(); for (long i = 0 ; i < 1000 ;i++) { keys.add(i); } generateEvents(1000, (short)1, keys, dbusEvents ); List<DbusEvent> expPassedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> expFailedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { long bkt = event.key()%100; if ((bkt == 0) || ((bkt >= 3) && (bkt < 5))) expPassedEvents.add(event); else expFailedEvents.add(event); } List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if ( filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", expPassedEvents.size(), passedEvents.size()); assertEquals("Failed Size", expFailedEvents.size(), failedEvents.size()); for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Passed Element " + i, expPassedEvents.get(i), passedEvents.get(i)); } for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Failed Element " + i, expFailedEvents.get(i), failedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter); System.out.println("KeyModFilter :" + objStr); DbusKeyFilter filter2 = KeyFilterConfigJSONFactory.parseDbusKeyFilter(objStr); String objStr2 = objMapper.writeValueAsString(filter2); System.out.println("KeyModFilter2 :" + objStr2); assertEquals("KeyModFilter JSON Serialization Test", objStr, objStr2); } @Test // Case when string keys have numeric values public void testDbusKeyModFilterWithStringKeys1() throws Exception { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(100); modConf.setBuckets("[0,3-4]"); partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); // String Keys with numeric values List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); List<String> keys = new ArrayList<String>(); for (long i = 0; i < 1000; ++i) { keys.add(new Long(i).toString()); } generateStringEvents(1000, (short)1, keys, dbusEvents ); List<DbusEvent> expPassedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> expFailedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { long bkt = new Long(new String(event.keyBytes()))%100; if ( (bkt == 0) || ( (bkt >= 3) && ( bkt < 5))) expPassedEvents.add(event); else expFailedEvents.add(event); } List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if (filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", expPassedEvents.size(), passedEvents.size()); assertEquals("Failed Size", expFailedEvents.size(), failedEvents.size()); for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Passed Element " + i, expPassedEvents.get(i), passedEvents.get(i)); } for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Failed Element " + i, expFailedEvents.get(i), failedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter); System.out.println("KeyModFilter :" + objStr); DbusKeyFilter filter2 = KeyFilterConfigJSONFactory.parseDbusKeyFilter(objStr); String objStr2 = objMapper.writeValueAsString(filter2); System.out.println("KeyModFilter2 :" + objStr2); assertEquals("KeyModFilter JSON Serialization Test", objStr, objStr2); } @Test // Case when string keys have non-numeric values public void testDbusKeyModFilterWithStringKeys2() throws Exception { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("MOD"); KeyModFilterConfig.Config modConf = new KeyModFilterConfig.Config(); modConf.setNumBuckets(100); modConf.setBuckets("[0,3-4]"); partConf.setMod(modConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); // String Keys with numeric values List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); List<String> keys = new ArrayList<String>(); for (long i = 0; i < 1000; ++i) { keys.add(i + "_1000"); //contains non-numeric char } generateStringEvents(1000, (short)1, keys, dbusEvents ); List<DbusEvent> expPassedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> expFailedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { long bkt = new Long(Math.abs(new String(event.keyBytes()).hashCode()))%100; if ( (bkt == 0) || ( (bkt >= 3) && ( bkt < 5))) expPassedEvents.add(event); else expFailedEvents.add(event); } List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if (filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", expPassedEvents.size(), passedEvents.size()); assertEquals("Failed Size", expFailedEvents.size(), failedEvents.size()); for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Passed Element " + i, expPassedEvents.get(i), passedEvents.get(i)); } for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Failed Element " + i, expFailedEvents.get(i), failedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter); System.out.println("KeyModFilter :" + objStr); DbusKeyFilter filter2 = KeyFilterConfigJSONFactory.parseDbusKeyFilter(objStr); String objStr2 = objMapper.writeValueAsString(filter2); System.out.println("KeyModFilter2 :" + objStr2); assertEquals("KeyModFilter JSON Serialization Test", objStr, objStr2); } @Test public void testDbusKeyRangeFilterErrors() throws Exception { boolean isException = false; //Error Case: Range Size is negative try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("RANGE"); KeyRangeFilterConfig.Config rangeConf = new KeyRangeFilterConfig.Config(); rangeConf.setSize(-1); rangeConf.setPartitions("[0,3-4]"); partConf.setRange(rangeConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ice) { isException = true; } assertEquals("Got Exception for invalid Config (Range Size is negative) ", true, isException); isException = false; //Error Case: min is greater than max try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("RANGE"); KeyRangeFilterConfig.Config rangeConf = new KeyRangeFilterConfig.Config(); rangeConf.setSize(100); rangeConf.setPartitions("[0,5-4]"); partConf.setRange(rangeConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ice) { isException = true; } assertEquals("Got Exception for invalid Config (min is greater than max) ", true, isException); isException = false; //Error Case: min is -ve try { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("RANGE"); KeyRangeFilterConfig.Config rangeConf = new KeyRangeFilterConfig.Config(); rangeConf.setSize(100); rangeConf.setPartitions("[-3,2-4]"); partConf.setRange(rangeConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); } catch (InvalidConfigException ice) { isException = true; } assertEquals("Got Exception for invalid Config (min is greater than max) ", true, isException); } @Test public void testDbusKeyRangeFilter() throws Exception { KeyFilterConfigHolder.Config partConf = new KeyFilterConfigHolder.Config(); partConf.setType("RANGE"); KeyRangeFilterConfig.Config rangeConf = new KeyRangeFilterConfig.Config(); rangeConf.setSize(100); rangeConf.setPartitions("[0,3-4]"); partConf.setRange(rangeConf); DbusKeyFilter filter = new DbusKeyFilter(new KeyFilterConfigHolder(partConf.build())); List<DbusEvent> dbusEvents = new ArrayList<DbusEvent>(); List<Long> keys = new ArrayList<Long>(); for (long i = 0; i < 1000; ++i) { keys.add(i); } generateEvents(1000, (short)1, keys, dbusEvents); List<DbusEvent> expPassedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> expFailedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { long key = event.key(); if ((key < 100) || ((key >= 300) && (key < 500))) expPassedEvents.add(event); else expFailedEvents.add(event); } List<DbusEvent> passedEvents = new ArrayList<DbusEvent>(); List<DbusEvent> failedEvents = new ArrayList<DbusEvent>(); for (DbusEvent event : dbusEvents) { if (filter.allow(event)) { passedEvents.add(event); } else { failedEvents.add(event); } } System.out.println("Passed Event Size :" + passedEvents.size()); System.out.println("Failed Event Size :" + failedEvents.size()); assertEquals("Passed Size", expPassedEvents.size(), passedEvents.size()); assertEquals("Failed Size", expFailedEvents.size(), failedEvents.size()); for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Passed Element " + i, expPassedEvents.get(i), passedEvents.get(i)); } for (int i = 0; i < passedEvents.size(); ++i) { assertEquals("Failed Element " + i, expFailedEvents.get(i), failedEvents.get(i)); } ObjectMapper objMapper = new ObjectMapper(); String objStr = objMapper.writeValueAsString(filter); System.out.println("KeyRangeFilter :" + objStr); DbusKeyFilter filter2 = KeyFilterConfigJSONFactory.parseDbusKeyFilter(objStr); String objStr2 = objMapper.writeValueAsString(filter2); System.out.println("KeyRangeFilter2 :" + objStr2); assertEquals("KeyRangeFilter JSON Serialization Test", objStr, objStr2); } private void generateEvents(int numEvents, short srcId, List<Long> keys, List<DbusEvent> eventVector) { int maxEventSize = 1024; int payloadSize = 100; long windowScn = 100; int index = 0; int size = keys.size(); try { for (int i = 0; i < numEvents; ++i) { //assumption: serialized event fits in maxEventSize ByteBuffer buf = ByteBuffer.allocate(maxEventSize).order(_eventFactory.getByteOrder()); DbusEventInfo eventInfo = new DbusEventInfo(DbusOpcode.UPSERT, 0L, // sequence id (short)0, RngUtils.randomPositiveShort(), System.currentTimeMillis(), srcId, RngUtils.schemaMd5, RngUtils.randomString(payloadSize).getBytes(Charset.defaultCharset()), false, //enableTracing false /* auto-commit */); eventInfo.setEventSerializationVersion(DbusEventFactory.DBUS_EVENT_V1); // make this explicit DbusEventFactory.serializeEvent(new DbusEventKey(keys.get((index++)%size)), buf, eventInfo); eventVector.add(DbusEventFactoryForTesting.createReadOnlyDbusEventFromBuffer(buf, 0, windowScn, DbusEventFactory.DBUS_EVENT_V1)); } } catch (KeyTypeNotImplementedException e) { e.printStackTrace(); } catch (UnsupportedKeyException uske) { uske.printStackTrace(); } return; } private void generateStringEvents(int numEvents, short srcId, List<String> keys, List<DbusEvent> eventVector) { int maxEventSize = 1024; int payloadSize = 100; long windowScn = 100; int index = 0; int size = keys.size(); try { for (int i = 0; i < numEvents; ++i) { //assumption: serialized event fits in maxEventSize ByteBuffer buf = ByteBuffer.allocate(maxEventSize).order(_eventFactory.getByteOrder()); DbusEventInfo eventInfo = new DbusEventInfo(DbusOpcode.UPSERT, 0L, // sequence number (short)0, RngUtils.randomPositiveShort(), System.currentTimeMillis(), srcId, RngUtils.schemaMd5, RngUtils.randomString(payloadSize).getBytes(Charset.defaultCharset()), false, // enableTracing false /*autocommit*/); eventInfo.setEventSerializationVersion(DbusEventFactory.DBUS_EVENT_V1); // make this explicit DbusEventFactory.serializeEvent(new DbusEventKey(keys.get((index++)%size)), buf, eventInfo); eventVector.add(DbusEventFactoryForTesting.createReadOnlyDbusEventFromBuffer(buf, 0, windowScn, DbusEventFactory.DBUS_EVENT_V1)); } } catch (KeyTypeNotImplementedException e) { e.printStackTrace(); } return; } }