package com.linkedin.databus2.schemas;
/*
*
* 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.io.File;
import java.io.FileWriter;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestFileSystemVersionedSchemaSetProvider
{
private static final String TEST_SCHEMA1_TEXT =
"{\"name\":\"schema1\",\"namespace\":\"com.linkedin.databus2.test\",\"type\":\"record\"," +
" \"fields\":[{\"name\":\"field1\",\"type\":\"string\"},{\"name\":\"field2\",\"type\":\"int\"}]}";
private static final String TEST_SCHEMA2_TEXT =
"{\"name\":\"schema2\",\"namespace\":\"com.linkedin.databus2.test\",\"type\":\"record\"," +
" \"fields\":[{\"name\":\"field1\",\"type\":\"double\"},{\"name\":\"field2\",\"type\":\"string\"}]}";
private static final String TEST_SCHEMA3_TEXT =
"{\"name\":\"AnotherSchema1\",\"namespace\":\"com.linkedin.databus2.test\",\"type\":\"record\"," +
" \"fields\":[{\"name\":\"field1\",\"type\":\"double\"},{\"name\":\"field2\",\"type\":\"string\"}]}";
static
{
PatternLayout defaultLayout = new PatternLayout("%d{ISO8601} +%r [%t] (%p) {%c} %m%n");
ConsoleAppender defaultAppender = new ConsoleAppender(defaultLayout);
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(defaultAppender);
//Logger.getRootLogger().setLevel(Level.OFF);
//Logger.getRootLogger().setLevel(Level.ERROR);
//Logger.getRootLogger().setLevel(Level.INFO);
//Logger.getRootLogger().setLevel(Level.DEBUG);
}
@Test
public void testSimpleDir() throws Exception
{
final File tmpDir = File.createTempFile("TestFileSystemVersionedSchemaSetProvider", "tmp");
tmpDir.deleteOnExit();
Assert.assertTrue(tmpDir.delete(), "temp file deleted");
Assert.assertTrue(tmpDir.mkdir());
File schema1File = new File(tmpDir, "TestSchema.1.avsc");
schema1File.deleteOnExit();
File schema2File = new File(tmpDir, "TestSchema.3.avsc");
schema2File.deleteOnExit();
File schema3File = new File(tmpDir, "AnotherSchema.2.avsc");
schema3File.deleteOnExit();
FileWriter schema1Writer = null;
FileWriter schema2Writer = null;
FileWriter schema3Writer = null;
try
{
schema3Writer = new FileWriter(schema3File);
schema3Writer.write(TEST_SCHEMA3_TEXT);
schema3Writer.flush();
schema2Writer = new FileWriter(schema2File);
schema2Writer.write(TEST_SCHEMA2_TEXT);
schema2Writer.flush();
schema1Writer = new FileWriter(schema1File);
schema1Writer.write(TEST_SCHEMA1_TEXT);
schema1Writer.flush();
FileSystemVersionedSchemaSetProvider schemaSetProvider =
new FileSystemVersionedSchemaSetProvider(tmpDir);
VersionedSchemaSet schemaSet = schemaSetProvider.loadSchemas();
VersionedSchema vs1 = schemaSet.getLatestVersionByName("TestSchema");
Assert.assertNotNull(vs1);
Assert.assertEquals(vs1.getId(), new VersionedSchemaId("TestSchema", (short)3),
"latest TestSchema id correct");
SchemaId vs1Id = SchemaId.createWithMd5(TEST_SCHEMA1_TEXT);
VersionedSchema vs11 = schemaSet.getById(vs1Id);
Assert.assertNotNull(vs11);
Assert.assertEquals(vs11.getId(), new VersionedSchemaId("TestSchema", (short)1),
"TestSchema v1 present");
VersionedSchema vs12 = schemaSet.getSchemaByNameVersion("TestSchema", (short)1);
Assert.assertNotNull(vs12);
Assert.assertEquals(vs12.getId(), new VersionedSchemaId("TestSchema", (short)1),
"TestSchema v1 readable");
VersionedSchema vs2 = schemaSet.getSchemaByNameVersion("AnotherSchema", (short)2);
Assert.assertNotNull(vs2);
Assert.assertEquals(vs2.getId(), new VersionedSchemaId("AnotherSchema", (short)2),
"AnotherSchema v2 readable");
VersionedSchema vs21 = schemaSet.getSchemaByNameVersion("AnotherSchema", (short)1);
Assert.assertNull(vs21, "AnotherSchema v1 not present");
VersionedSchema vs3 = schemaSet.getSchemaByNameVersion("FakeSchema", (short)1);
Assert.assertNull(vs3, "FakeSchema not present");
}
finally
{
if (null != schema1Writer) schema1Writer.close();
if (null != schema2Writer) schema2Writer.close();
if (null != schema3Writer) schema3Writer.close();
}
}
}