Package com.linkedin.databus.util

Source Code of com.linkedin.databus.util.TestDevRelaySrcConfigGen

package com.linkedin.databus.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Arrays;
import java.util.List;

import org.testng.Assert;
import org.testng.annotations.Test;

import com.linkedin.databus.core.util.FileUtils;
import com.linkedin.databus2.relay.config.LogicalSourceConfig;
import com.linkedin.databus2.relay.config.PhysicalSourceConfig;

public class TestDevRelaySrcConfigGen
{

  @Test
  /**
   *
   * Steps:
   * 1. Generate new Schema_registry with some example schemas.
   * 2. Construct schemaDataMAnager and generate RelayDevConfigs for the example DB.
   * 3. Open the newly generated json file containing physical-sources config and de-serialize to construct a physicalSourcesConfig object
   * 4. Ensure physicalSourcesConfig object have expected source configurations.
   *
   * @throws Exception
   */
  public void testDevRelaySrcConfigGen()
    throws Exception
  {
    // Schema
    String[] personSchema = { "{\"type\":\"record\",\"name\":\"Person\",\"namespace\":\"com.linkedin.events.example\",\"fields\":[{\"name\":\"txn\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=TXN;dbFieldPosition=0;\"},{\"name\":\"key\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=KEY;dbFieldPosition=1;\"},{\"name\":\"firstName\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=FIRST_NAME;dbFieldPosition=2;\"},{\"name\":\"lastName\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=LAST_NAME;dbFieldPosition=3;\"},{\"name\":\"birthDate\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=BIRTH_DATE;dbFieldPosition=4;\"},{\"name\":\"deleted\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=DELETED;dbFieldPosition=5;\"}],\"meta\":\"dbFieldName=sy$person;\"}"};
    String[] addressSchema = { "{\"type\":\"record\",\"name\":\"Address\",\"namespace\":\"com.linkedin.events.example\",\"fields\":[{\"name\":\"txn\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=TXN;dbFieldPosition=0;\"},{\"name\":\"key\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=KEY;dbFieldPosition=1;\"},{\"name\":\"addressLine1\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=ADDRESS_LINE_1;dbFieldPosition=2;\"},{\"name\":\"addressLine2\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=ADDRESS_LINE_2;dbFieldPosition=3;\"},{\"name\":\"zipCode\",\"type\":[\"long\",\"null\"],\"meta\":\"dbFieldName=ZIP_CODE;dbFieldPosition=4;\"},{\"name\":\"deleted\",\"type\":[\"string\",\"null\"],\"meta\":\"dbFieldName=DELETED;dbFieldPosition=5;\"}],\"meta\":\"dbFieldName=sy$address;\"}"};

    // Index Schema registry contents
    String[] indexContents = { "com.linkedin.events.example.person.avsc",
                               "com.linkedin.events.example.address.avsc"};

    // Meta-Data contents
    String[] idNameMapContents = {
                                  "1:com.linkedin.events.example.person",
                                  "2:com.linkedin.events.example.address"};

    String[] dbToSrcMapContents = { "{",
                                   "  \"example\" : [ \"com.linkedin.events.example.Address\", \"com.linkedin.events.example.Person\" ]",
                                   "}"
                                 };

    File schemaDir = FileUtils.createTempDir("dir_testDevRelaySrcConfigGen");
    String dbToSrcFile1 = schemaDir.getAbsolutePath() + "/physical_logical_src_map.json";
    String idNameMapFile1 = schemaDir.getAbsolutePath() + "/idToName.map";
    String indexRegistry = schemaDir.getAbsolutePath() + "/index.schemas_registry";
    String personSchemaFile = schemaDir.getAbsolutePath() + "/com.linkedin.events.example.person.1.avsc";
    String addressSchemaFile = schemaDir.getAbsolutePath() + "/com.linkedin.events.example.address.1.avsc";

    FileUtils.storeLinesToTempFile(dbToSrcFile1, dbToSrcMapContents);
    FileUtils.storeLinesToTempFile(idNameMapFile1, idNameMapContents);
    FileUtils.storeLinesToTempFile(indexRegistry, indexContents);
    FileUtils.storeLinesToTempFile(personSchemaFile, personSchema);
    FileUtils.storeLinesToTempFile(addressSchemaFile, addressSchema);

    SchemaMetaDataManager mgr = new SchemaMetaDataManager(schemaDir.getAbsolutePath());
    String uri = "jdbc:oracle:thin:liar/liar@devdb:DB";
    List<String> exampleSrcs = Arrays.asList("com.linkedin.events.example.person", "com.linkedin.events.example.address");
    DevRelayConfigGenerator.generateRelayConfig(schemaDir.getAbsolutePath(), "example", uri, schemaDir.getAbsolutePath(), exampleSrcs, mgr);

    File f = new File(schemaDir.getAbsolutePath() + "/sources-example.json");
    Assert.assertTrue( f.exists(),"Physical Src Config file present?");

    BufferedReader r = new BufferedReader(new FileReader(f));

    String json = r.readLine();
    PhysicalSourceConfig config = PhysicalSourceConfig.fromString(json);
    config.checkForNulls();

    Assert.assertEquals(config.getUri(), uri);
    Assert.assertEquals(config.getName(), "example");

    List<LogicalSourceConfig> srcs = config.getSources();
    Assert.assertEquals(srcs.size(),2 );
    Assert.assertEquals(srcs.get(0).getId(), 1);
    Assert.assertEquals(srcs.get(0).getName(), "com.linkedin.events.example.person");
    Assert.assertEquals(srcs.get(0).getUri(), "example.sy$person");
    Assert.assertEquals(srcs.get(1).getId(), 2);
    Assert.assertEquals(srcs.get(1).getName(), "com.linkedin.events.example.address");
    Assert.assertEquals(srcs.get(1).getUri(), "example.sy$address");
  }

}
TOP

Related Classes of com.linkedin.databus.util.TestDevRelaySrcConfigGen

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.