Package org.lilyproject.util.repo.test

Source Code of org.lilyproject.util.repo.test.RecordEventTest

/*
* 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.util.repo.test;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Before;
import org.junit.Test;
import org.lilyproject.repository.api.IdGenerator;
import org.lilyproject.repository.api.SchemaId;
import org.lilyproject.repository.impl.id.IdGeneratorImpl;
import org.lilyproject.repository.impl.id.SchemaIdImpl;
import org.lilyproject.util.repo.RecordEvent;
import org.lilyproject.util.repo.RecordEvent.FieldChange;
import org.lilyproject.util.repo.RecordEvent.IndexRecordFilterData;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

public class RecordEventTest {

    private IdGenerator idGenerator;

    @Before
    public void setUp() {
        this.idGenerator = new IdGeneratorImpl();
    }

    @Test
    public void testRecordEvent_JsonRoundTrip() throws Exception {

        RecordEvent event = new RecordEvent();
        byte[] json = event.toJsonBytes();
        event = new RecordEvent(json, idGenerator);

        assertNull(event.getIndexRecordFilterData());

        SchemaId oldRtId = idGenerator.getSchemaId(UUID.randomUUID());
        SchemaId newRtId = idGenerator.getSchemaId(UUID.randomUUID());

        RecordEvent.IndexRecordFilterData idxSel = new RecordEvent.IndexRecordFilterData();
        event.setIndexRecordFilterData(idxSel);
        idxSel.setOldRecordType(oldRtId);
        idxSel.setNewRecordType(newRtId);

        json = event.toJsonBytes();
        event = new RecordEvent(json, idGenerator);

        assertNotNull(event.getIndexRecordFilterData());
        assertEquals(oldRtId, event.getIndexRecordFilterData().getOldRecordType());
        assertEquals(newRtId, event.getIndexRecordFilterData().getNewRecordType());
        assertNull(event.getIndexRecordFilterData().getFieldChanges());

        SchemaId field1Id = idGenerator.getSchemaId(UUID.randomUUID());
        SchemaId field2Id = idGenerator.getSchemaId(UUID.randomUUID());
        SchemaId field3Id = idGenerator.getSchemaId(UUID.randomUUID());
        SchemaId field4Id = idGenerator.getSchemaId(UUID.randomUUID());

        event = new RecordEvent();
        idxSel = new RecordEvent.IndexRecordFilterData();
        event.setIndexRecordFilterData(idxSel);
        idxSel.addChangedField(field1Id, null, null);
        idxSel.addChangedField(field2Id, Bytes.toBytes("foo1"), Bytes.toBytes("foo2"));
        idxSel.addChangedField(field3Id, Bytes.toBytes("foo3"), null);
        idxSel.addChangedField(field4Id, null, Bytes.toBytes("foo4"));

        json = event.toJsonBytes();
        event = new RecordEvent(json, idGenerator);

        List<RecordEvent.FieldChange> fieldChanges = event.getIndexRecordFilterData().getFieldChanges();
        assertEquals(4, fieldChanges.size());

        assertEquals(field1Id, fieldChanges.get(0).getId());
        assertNull(fieldChanges.get(0).getOldValue());
        assertNull(fieldChanges.get(0).getNewValue());

        assertEquals(field2Id, fieldChanges.get(1).getId());
        assertArrayEquals(Bytes.toBytes("foo1"), fieldChanges.get(1).getOldValue());
        assertArrayEquals(Bytes.toBytes("foo2"), fieldChanges.get(1).getNewValue());

        assertEquals(field3Id, fieldChanges.get(2).getId());
        assertArrayEquals(Bytes.toBytes("foo3"), fieldChanges.get(2).getOldValue());
        assertNull(null, fieldChanges.get(2).getNewValue());

        assertEquals(field4Id, fieldChanges.get(3).getId());
        assertNull(fieldChanges.get(3).getOldValue());
        assertArrayEquals(Bytes.toBytes("foo4"), fieldChanges.get(3).getNewValue());
    }

    @Test
    public void testRecordEvent_JsonRoundtrip_TableName() throws IOException {
        final String tableName = "_table_name_";
        RecordEvent recordEvent = new RecordEvent();
        recordEvent.setTableName(tableName);

        byte[] jsonBytes = recordEvent.toJsonBytes();

        RecordEvent deserialized = new RecordEvent(jsonBytes, idGenerator);

        assertEquals(tableName, deserialized.getTableName());
    }

    @Test
    public void testIndexRecordFilterData_JsonRoundtrip() {
        IndexRecordFilterData recordFilterData = new IndexRecordFilterData();
        SchemaId newTypeSchemaId = new SchemaIdImpl("newtype".getBytes());
        SchemaId oldTypeSchemaId = new SchemaIdImpl("oldtype".getBytes());
        SchemaId changedFieldId = new SchemaIdImpl("changedfield".getBytes());
        byte[] oldFieldValue = new byte[] { 1 };
        byte[] newFieldValue = new byte[] { 2 };

        recordFilterData.setNewRecordExists(true);
        recordFilterData.setOldRecordExists(true);
        recordFilterData.setNewRecordType(newTypeSchemaId);
        recordFilterData.setOldRecordType(oldTypeSchemaId);
        recordFilterData.addChangedField(changedFieldId, oldFieldValue, newFieldValue);

        IndexRecordFilterData deserialized = doJsonRoundtrip(recordFilterData);

        assertTrue(deserialized.getNewRecordExists());
        assertTrue(deserialized.getOldRecordExists());
        assertEquals(newTypeSchemaId, deserialized.getNewRecordType());
        assertEquals(oldTypeSchemaId, deserialized.getOldRecordType());
        List<FieldChange> fieldChanges = deserialized.getFieldChanges();

        assertEquals(1, fieldChanges.size());
        FieldChange fieldChange = fieldChanges.get(0);
        assertEquals(changedFieldId, fieldChange.getId());
        assertArrayEquals(oldFieldValue, fieldChange.getOldValue());
        assertArrayEquals(newFieldValue, fieldChange.getNewValue());

        assertEquals(recordFilterData, deserialized);
    }

    @Test
    public void testIndexRecordFilterData_JsonRoundtrip_IncludeIndexes() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionInclusions(Sets.newHashSet("indexA", "indexB"));

        assertEquals(filterData, doJsonRoundtrip(filterData));
    }

    @Test
    public void testIndexRecordFilterData_JsonRoundtrip_ExcludeIndexes() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionExclusions(Sets.newHashSet("indexA", "indexB"));

        assertEquals(filterData, doJsonRoundtrip(filterData));
    }

    @Test
    public void testAppliesToSubscription_DefaultCase() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();

        assertTrue(filterData.appliesToSubscription("indexname"));
    }

    @Test
    public void testAppliesToSubscription_AllInclusive() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionInclusions(IndexRecordFilterData.ALL_INDEX_SUBSCRIPTIONS);

        assertTrue(filterData.appliesToSubscription("indexname"));
    }

    @Test
    public void testAppliesToSubscription_AllExclusive() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionExclusions(IndexRecordFilterData.ALL_INDEX_SUBSCRIPTIONS);

        assertFalse(filterData.appliesToSubscription("indexname"));
    }

    @Test
    public void testAppliesToSubscription_Included() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionInclusions(ImmutableSet.of("to_include"));

        assertTrue(filterData.appliesToSubscription("to_include"));
    }

    @Test
    public void testAppliesToSubscription_Excluded() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionExclusions(ImmutableSet.of("to_exclude"));

        assertFalse(filterData.appliesToSubscription("to_exclude"));
    }

    @Test
    public void testAppliesToSubcription_NotExcluded() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionExclusions(ImmutableSet.of("to_exclude"));

        assertTrue(filterData.appliesToSubscription("not_excluded"));
    }

    @Test
    public void testAppliesToSubscription_NotIncluded() {
        IndexRecordFilterData filterData = new IndexRecordFilterData();
        filterData.setSubscriptionInclusions(ImmutableSet.of("to_include"));

        assertFalse(filterData.appliesToSubscription("not_included"));
    }

    private IndexRecordFilterData doJsonRoundtrip(IndexRecordFilterData recordFilterData) {
        RecordEvent recordEvent = new RecordEvent();
        recordEvent.setIndexRecordFilterData(recordFilterData);
        RecordEvent deserializedEvent;
        try {
            deserializedEvent = new RecordEvent(recordEvent.toJsonBytes(), idGenerator);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return deserializedEvent.getIndexRecordFilterData();
    }

}
TOP

Related Classes of org.lilyproject.util.repo.test.RecordEventTest

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.