package com.linkedin.databus.core.data_model;
/*
*
* 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.util.Arrays;
import java.util.List;
import org.apache.log4j.Level;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.linkedin.databus2.test.TestUtil;
public class TestSubscriptions
{
static
{
TestUtil.setupLogging(true, null, Level.ERROR);
}
@Test
public void testEquals()
{
PhysicalPartition db1_1 = new PhysicalPartition(1, "db1");
DatabusSubscription sub1 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(new LogicalSource(101, "source1"), (short)2));
Assert.assertTrue(! sub1.equals(null));
Assert.assertTrue(! sub1.equals(db1_1));
DatabusSubscription sub2 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(new LogicalSource(101, "source1"), (short)2));
Assert.assertEquals(sub1, sub2);
DatabusSubscription sub3 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(new LogicalSource(101, "source1"), (short)3));
Assert.assertTrue(! sub1.equals(sub3));
//LogicalSource wildcard
DatabusSubscription sub4 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(LogicalSource.createAllSourcesWildcard(),
(short)2));
Assert.assertEquals(sub4, sub1);
//different logical partitions
DatabusSubscription sub5 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(LogicalSource.createAllSourcesWildcard(),
(short)1));
Assert.assertNotEquals(sub5, sub1);
//same logical partition number but different logical source
DatabusSubscription sub6 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(new LogicalSource(102, "source2"),
(short)2));
Assert.assertNotEquals(sub6, sub1);
//logical source with unknown logical source id
DatabusSubscription sub7 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
new LogicalSourceId(new LogicalSource("source1"),
(short)2));
Assert.assertEquals(sub7, sub1);
//logical partition wildcard
DatabusSubscription sub8 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
LogicalSourceId.createAllPartitionsWildcard(new LogicalSource("source1")));
Assert.assertEquals(sub8, sub1);
//logical partition wildcard but different logical source
DatabusSubscription sub9 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
LogicalSourceId.createAllPartitionsWildcard(new LogicalSource("source2")));
Assert.assertNotEquals(sub9, sub1);
//logical partition wildcard and logical soruce wildcard
DatabusSubscription sub10 =
new DatabusSubscription(new PhysicalSource("uri1"), db1_1,
LogicalSourceId.createAllPartitionsWildcard(LogicalSource.createAllSourcesWildcard()));
Assert.assertEquals(sub10, sub1);
}
@Test
public void testLogicalSourceJsonSerDeser() throws Exception
{
LogicalSource lsource1 = new LogicalSource(123, "test.source");
Assert.assertEquals(lsource1.getId().intValue(), 123);
Assert.assertEquals(lsource1.getName(), "test.source");
String lsource1Json = lsource1.toJsonString();
LogicalSource lsource1_new = LogicalSource.createFromJsonString(lsource1Json);
Assert.assertEquals(lsource1, lsource1_new);
Assert.assertEquals(lsource1_new.getId().intValue(), 123);
Assert.assertEquals(lsource1_new.getName(), "test.source");
String lsource2Json = "{\"name\":\"mysource\"}";
LogicalSource lsource2_new = LogicalSource.createFromJsonString(lsource2Json);
Assert.assertEquals(lsource2_new.getName(), "mysource");
Assert.assertEquals(lsource2_new.getId(), LogicalSource.UNKNOWN_LOGICAL_SOURCE_ID);
String lsource3Json = "{\"id\":98765}";
LogicalSource lsource3_new = LogicalSource.createFromJsonString(lsource3Json);
Assert.assertEquals(lsource3_new.getName(), LogicalSource.ALL_LOGICAL_SOURCES_NAME);
Assert.assertEquals(lsource3_new.getId().intValue(), 98765);
String lsource4Json = "{\"name\":\"*\"}";
LogicalSource lsource4_new = LogicalSource.createFromJsonString(lsource4Json);
Assert.assertEquals(lsource4_new.getName(), "*");
Assert.assertEquals(lsource4_new.getId(), LogicalSource.ALL_LOGICAL_SOURCES_ID);
Assert.assertTrue(lsource4_new.isAllSourcesWildcard());
}
@Test
public void testPhysicalSourceJsonSerDeser() throws Exception
{
PhysicalSource psource1 = new PhysicalSource("test.uri");
Assert.assertEquals(psource1.getUri(), "test.uri");
String psource1Json = psource1.toJsonString();
PhysicalSource psource1_new = PhysicalSource.createFromJsonString(psource1Json);
Assert.assertEquals(psource1, psource1_new);
Assert.assertEquals(psource1_new.getUri(), "test.uri");
String psource2Json = "{\"uri\":\"my.uri\"}";
PhysicalSource psource2_new = PhysicalSource.createFromJsonString(psource2Json);
Assert.assertEquals(psource2_new.getUri(), "my.uri");
PhysicalSource psource3 = PhysicalSource.createAnySourceWildcard();
String psource3Json = psource3.toJsonString();
PhysicalSource psource3_new = PhysicalSource.createFromJsonString(psource3Json);
Assert.assertTrue(psource3_new.isAnySourceWildcard());
Assert.assertEquals(psource3, psource3_new);
PhysicalSource psource4 = PhysicalSource.createMasterSourceWildcard();
String psource4Json = psource4.toJsonString();
PhysicalSource psource4_new = PhysicalSource.createFromJsonString(psource4Json);
Assert.assertTrue(psource4_new.isMasterSourceWildcard());
Assert.assertEquals(psource4, psource4_new);
PhysicalSource psource5 = PhysicalSource.createSlaveSourceWildcard();
String psource5Json = psource5.toJsonString();
PhysicalSource psource5_new = PhysicalSource.createFromJsonString(psource5Json);
Assert.assertTrue(psource5_new.isSlaveSourceWildcard());
Assert.assertEquals(psource5, psource5_new);
}
@Test
public void testLogicalSourceIdJsonSerDeser() throws Exception
{
LogicalSourceId lsourceId1 = new LogicalSourceId(new LogicalSource(1234, "mytest.source"),
(short)10);
Assert.assertEquals(lsourceId1.getSource().getId().intValue(), 1234);
Assert.assertEquals(lsourceId1.getSource().getName(), "mytest.source");
Assert.assertEquals(lsourceId1.getId().shortValue(), (short)10);
String lsourceId1Json = lsourceId1.toJsonString();
LogicalSourceId lsourceId1_new = LogicalSourceId.createFromJsonString(lsourceId1Json);
Assert.assertEquals(lsourceId1, lsourceId1_new);
String lsourceId2Json = "{\"source\":{\"name\":\"mysource2\"}}";
LogicalSourceId lsourceId2_new = LogicalSourceId.createFromJsonString(lsourceId2Json);
Assert.assertEquals(lsourceId2_new.getSource().getName(), "mysource2");
Assert.assertEquals(lsourceId2_new.getSource().getId(), LogicalSource.UNKNOWN_LOGICAL_SOURCE_ID);
Assert.assertEquals(lsourceId2_new.getId(), LogicalSourceId.ALL_LOGICAL_PARTITIONS_ID);
String lsourceId3Json = "{\"source\":{\"name\":\"mysource3\",\"id\":666},\"id\":999}";
LogicalSourceId lsourceId3_new = LogicalSourceId.createFromJsonString(lsourceId3Json);
Assert.assertEquals(lsourceId3_new.getSource().getName(), "mysource3");
Assert.assertEquals(lsourceId3_new.getSource().getId().intValue(), 666);
Assert.assertEquals(lsourceId3_new.getId().intValue(), 999);
}
@Test
public void testPhysicalPartitionJsonSerDeser() throws Exception
{
PhysicalPartition ppart1 = new PhysicalPartition(123456, "name");
Assert.assertEquals(ppart1.getName(), "name");
Assert.assertEquals(ppart1.getId().intValue(), 123456);
String ppart1Json = ppart1.toJsonString();
PhysicalPartition ppart1_new = PhysicalPartition.createFromJsonString(ppart1Json);
Assert.assertEquals(ppart1, ppart1_new);
String ppart2Json = "{\"id\":10000}";
PhysicalPartition ppart2_new = PhysicalPartition.createFromJsonString(ppart2Json);
Assert.assertEquals(ppart2_new.getId().intValue(), 10000);
PhysicalPartition ppart3 = PhysicalPartition.createAnyPartitionWildcard();
String ppart3Json = ppart3.toJsonString();
PhysicalPartition ppart3_new = PhysicalPartition.createFromJsonString(ppart3Json);
Assert.assertEquals(ppart3, ppart3_new);
Assert.assertEquals(ppart3_new.getId(), PhysicalPartition.ANY_PHYSICAL_PARTITION_ID);
}
@Test
public void testSubscriptionJsonSerDeser() throws Exception
{
DatabusSubscription.Builder builder = new DatabusSubscription.Builder();
builder.getPhysicalPartition().setId(2233);
builder.getPhysicalPartition().setName("psource");
builder.getPhysicalSource().setUri("http://some.uri.com");
builder.getLogicalPartition().setId((short)1);
builder.getLogicalPartition().getSource().setId(2);
builder.getLogicalPartition().getSource().setName("source1");
DatabusSubscription sub1 = builder.build();
Assert.assertEquals(sub1.getPhysicalPartition().getId().intValue(), 2233);
Assert.assertEquals(sub1.getPhysicalPartition().getName(), "psource");
Assert.assertEquals(sub1.getPhysicalSource().getUri(), "http://some.uri.com");
Assert.assertEquals(sub1.getLogicalPartition().getId().intValue(), 1);
Assert.assertEquals(sub1.getLogicalSource().getId().intValue(), 2);
Assert.assertEquals(sub1.getLogicalSource().getName(), "source1");
String sub1Json = sub1.toJsonString();
DatabusSubscription sub1_new = DatabusSubscription.createFromJsonString(sub1Json);
Assert.assertEquals(sub1, sub1_new);
builder.getPhysicalPartition().makeAnyPartitionWildcard();
DatabusSubscription sub2 = builder.build();
String sub2Json = sub2.toJsonString();
DatabusSubscription sub2_new = DatabusSubscription.createFromJsonString(sub2Json);
Assert.assertTrue(sub2_new.getPhysicalPartition().isAnyPartitionWildcard());
}
@Test
public void testDefaultCodec() throws Exception
{
//databus v2 conversion back and forth
DatabusSubscription sub1 = DatabusSubscription.createSimpleSourceSubscription(new LogicalSource(1, "table1"));
String sub1Str = DatabusSubscription.getDefaultCodec().encode(sub1).toString();
Assert.assertEquals(sub1Str, "table1");
DatabusSubscription sub2 = DatabusSubscription.createFromUri("table1");
Assert.assertEquals(sub2, sub1);
}
}