/* * Copyright 2014-2016 CyberVision, Inc. * * 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.kaaproject.kaa.server.common.core.algorithms.override; import org.apache.avro.generic.GenericRecord; import org.junit.Assert; import org.junit.Test; import org.kaaproject.kaa.common.avro.GenericAvroConverter; import org.kaaproject.kaa.server.common.core.algorithms.schema.SchemaGenerationAlgorithm; import org.kaaproject.kaa.server.common.core.algorithms.schema.SchemaGenerationAlgorithmFactory; import org.kaaproject.kaa.server.common.core.algorithms.schema.SchemaGenerationAlgorithmFactoryImpl; import org.kaaproject.kaa.server.common.core.configuration.BaseData; import org.kaaproject.kaa.server.common.core.configuration.OverrideData; import org.kaaproject.kaa.server.common.core.schema.BaseSchema; import org.kaaproject.kaa.server.common.core.schema.DataSchema; import org.kaaproject.kaa.server.common.core.schema.OverrideSchema; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public class DefaultOverrideAlgorithmTest { @Test public void testMergeOf3Configurations() throws Exception { // Create Configuration Schema Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema.json").toURI()); DataSchema configuraionSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configuraionSchema); BaseSchema baseSchemaString = generator.getBaseSchema(); OverrideSchema overrideSchemaString = generator.getOverrideSchema(); // Create Configuration weight 0 Path configuraionWeight0Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_0.json").toURI()); BaseData baseData = new BaseData(baseSchemaString, new String(Files.readAllBytes(configuraionWeight0Path))); // Create Configuration weight 1 Path configuraionWeight1Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_1.json").toURI()); OverrideData data1 = new OverrideData(overrideSchemaString, new String(Files.readAllBytes(configuraionWeight1Path))); // Create Configuration weight 2 Path configuraionWeight2Path = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/config_weight_2.json").toURI()); OverrideData data2 = new OverrideData(overrideSchemaString, new String(Files.readAllBytes(configuraionWeight2Path))); List<OverrideData> configurations = new ArrayList<>(); configurations.add(data1); configurations.add(data2); Path mergedConfiguraionPath = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/merged_config.json").toURI()); String mergedConfiguraionBody = new String(Files.readAllBytes(mergedConfiguraionPath)); OverrideAlgorithm merger = new DefaultOverrideAlgorithm(); BaseData mergeResult = merger.override(baseData, configurations); GenericAvroConverter<GenericRecord> converter = new GenericAvroConverter<>(baseSchemaString.getRawSchema()); GenericRecord mergeResultGenericRecord = converter.decodeJson(mergeResult.getRawData()); GenericRecord expectedMergedConfiguraionGenericRecord = converter.decodeJson(mergedConfiguraionBody); Assert.assertTrue(mergeResultGenericRecord.equals(expectedMergedConfiguraionGenericRecord)); } @Test public void testMergeWhenConfigurationsIsEmpty() throws Exception { Path schemaUrl = Paths.get(Thread.currentThread().getContextClassLoader().getResource("override/schema.json").toURI()); DataSchema configuraionSchema = new DataSchema(new String(Files.readAllBytes(schemaUrl))); SchemaGenerationAlgorithmFactory factory = new SchemaGenerationAlgorithmFactoryImpl(); SchemaGenerationAlgorithm generator = factory.createSchemaGenerator(configuraionSchema); List<OverrideData> configurations = new ArrayList<>(); OverrideAlgorithm merger = new DefaultOverrideAlgorithm(); BaseData mergeResult = merger.override(null, configurations); Assert.assertNull(mergeResult); } }