Package com.linkedin.databus.core

Source Code of com.linkedin.databus.core.TestDbusKeyCompositeFilter

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;
  }

}
TOP

Related Classes of com.linkedin.databus.core.TestDbusKeyCompositeFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.