/* * Copyright 2012 NGDATA nv * * 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 org.lilyproject.indexer.event; import com.google.common.collect.ImmutableSet; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.regionserver.wal.WALEdit; import org.apache.hadoop.hbase.util.Bytes; import org.junit.Before; import org.junit.Test; import org.lilyproject.util.hbase.LilyHBaseSchema.RecordCf; import org.lilyproject.util.hbase.LilyHBaseSchema.RecordColumn; import org.lilyproject.util.repo.RecordEvent; import org.lilyproject.util.repo.RecordEvent.IndexRecordFilterData; import static org.junit.Assert.assertEquals; public class IndexerEditFilterTest { private static final String INDEX_NAME = "IndexName"; private IndexerEditFilter editFilter; @Before public void setUp() { editFilter = new IndexerEditFilter(INDEX_NAME); } @Test public void testApply_NoPayload() { WALEdit walEdit = new WALEdit(); walEdit.add(new KeyValue(Bytes.toBytes("row"), RecordCf.DATA.bytes, Bytes.toBytes("not payload"), Bytes.toBytes("value"))); editFilter.apply(walEdit); assertEquals(0, walEdit.size()); } @Test public void testApply_Payload_NotApplicableIndex() { RecordEvent recordEvent = new RecordEvent(); IndexRecordFilterData filterData = new IndexRecordFilterData(); filterData.setSubscriptionInclusions(ImmutableSet.of("SomeOtherIndexName")); recordEvent.setIndexRecordFilterData(filterData); WALEdit walEdit = new WALEdit(); walEdit.add(new KeyValue(Bytes.toBytes("row"), RecordCf.DATA.bytes, RecordColumn.PAYLOAD.bytes, recordEvent.toJsonBytes())); editFilter.apply(walEdit); assertEquals(0, walEdit.size()); } @Test public void testApply_Payload_ApplicableIndex() { RecordEvent recordEvent = new RecordEvent(); IndexRecordFilterData filterData = new IndexRecordFilterData(); filterData.setSubscriptionInclusions(ImmutableSet.of(INDEX_NAME)); recordEvent.setIndexRecordFilterData(filterData); WALEdit walEdit = new WALEdit(); walEdit.add(new KeyValue(Bytes.toBytes("row"), RecordCf.DATA.bytes, RecordColumn.PAYLOAD.bytes, recordEvent.toJsonBytes())); editFilter.apply(walEdit); assertEquals(1, walEdit.size()); } @Test public void testApply_Payload_ApplicableIndexButNoIndexFlagIsSet() { RecordEvent recordEvent = new RecordEvent(); IndexRecordFilterData filterData = new IndexRecordFilterData(); filterData.setSubscriptionInclusions(ImmutableSet.of(INDEX_NAME)); recordEvent.setIndexRecordFilterData(filterData); recordEvent.getAttributes().put(IndexerEditFilter.NO_INDEX_FLAG, "false"); WALEdit walEdit = new WALEdit(); walEdit.add(new KeyValue(Bytes.toBytes("row"), RecordCf.DATA.bytes, RecordColumn.PAYLOAD.bytes, recordEvent.toJsonBytes())); editFilter.apply(walEdit); assertEquals(0, walEdit.size()); } @Test public void testApply_NonJsonPayload() { WALEdit walEdit = new WALEdit(); walEdit.add(new KeyValue(Bytes.toBytes("row"), RecordCf.DATA.bytes, RecordColumn.PAYLOAD.bytes, Bytes.toBytes("non-json payload"))); editFilter.apply(walEdit); // If we can't parse the RecordEvent, we don't want to have the IndexUpdater dealing with it either assertEquals(0, walEdit.size()); } }