Package org.openengsb.core.ekb.graph.orient

Source Code of org.openengsb.core.ekb.graph.orient.OrientModelGraphTest

/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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.openengsb.core.ekb.graph.orient;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openengsb.core.api.model.ModelDescription;
import org.openengsb.core.ekb.api.transformation.TransformationDescription;
import org.openengsb.core.ekb.graph.orient.internal.OrientModelGraph;
import org.openengsb.core.ekb.graph.orient.internal.OrientModelGraphUtils;
import org.openengsb.core.ekb.graph.orient.models.ModelA;
import org.openengsb.core.ekb.graph.orient.models.ModelB;
import org.openengsb.core.ekb.graph.orient.models.ModelC;
import org.osgi.framework.Version;

public class OrientModelGraphTest {
    private static OrientModelGraph graph;

    @BeforeClass
    public static void init() {
        graph = new OrientModelGraph();
    }

    @Before
    public void start() {
        graph.cleanDatabase();
        graph.addModel(getModelADescription());
        graph.addModel(getModelBDescription());
        graph.addModel(getModelCDescription());
    }

    @AfterClass
    public static void shutdown() {
        graph.shutdown();
    }

    private static ModelDescription getModelADescription() {
        return new ModelDescription(ModelA.class, new Version(1, 0, 0).toString());
    }

    private static ModelDescription getModelBDescription() {
        return new ModelDescription(ModelB.class, new Version(1, 0, 0).toString());
    }

    private static ModelDescription getModelCDescription() {
        return new ModelDescription(ModelC.class, new Version(1, 0, 0).toString());
    }

    private TransformationDescription getDescriptionForModelAToModelB() {
        return new TransformationDescription(getModelADescription(), getModelBDescription());
    }

    private TransformationDescription getDescriptionForModelBToModelC() {
        return new TransformationDescription(getModelBDescription(), getModelCDescription());
    }

    private TransformationDescription getDescriptionForModelAToModelC() {
        return new TransformationDescription(getModelADescription(), getModelCDescription());
    }

    @Test
    public void testIsTransformationPossible_shouldFindPath() throws Exception {
        TransformationDescription description = getDescriptionForModelAToModelB();
        description.setId("test");
        graph.addTransformation(description);
        boolean possible = graph.isTransformationPossible(getModelADescription(), getModelBDescription(), null);
        assertThat(possible, is(true));
    }

    @Test
    public void testIsTransformationPossiblePath_shouldFindPath() throws Exception {
        TransformationDescription description = getDescriptionForModelAToModelB();
        graph.addTransformation(description);
        TransformationDescription description2 = getDescriptionForModelBToModelC();
        graph.addTransformation(description2);
        boolean possible = graph.isTransformationPossible(getModelADescription(), getModelBDescription(), null);
        assertThat(possible, is(true));
    }

    @Test
    public void testFindTransformationPathWithIDs_shouldFindDifferentPaths() throws Exception {
        TransformationDescription description1 = getDescriptionForModelAToModelB();
        description1.setId("test1");
        graph.addTransformation(description1);
        TransformationDescription description2 = getDescriptionForModelAToModelB();
        description2.setId("test2");
        graph.addTransformation(description2);
        TransformationDescription description3 = getDescriptionForModelBToModelC();
        graph.addTransformation(description3);

        List<TransformationDescription> path1 =
            graph.getTransformationPath(getModelADescription(), getModelCDescription(), Arrays.asList("test1"));
        List<TransformationDescription> path2 =
            graph.getTransformationPath(getModelADescription(), getModelCDescription(), Arrays.asList("test2"));

        assertThat(path1.get(0).getId(), is("test1"));
        assertThat(path2.get(0).getId(), is("test2"));
    }
   
    @Test
    public void testIfModelDeactivationWorks_shouldWork() throws Exception {
        graph.removeModel(getModelADescription());
        assertThat(graph.isModelActive(getModelADescription()), is(false));
        graph.addModel(getModelADescription());
        assertThat(graph.isModelActive(getModelADescription()), is(true));
    }
   
    @Test
    public void testIfDeactivatedModelsAreNotUsed_shouldIgnoreInactiveModels() throws Exception {
        TransformationDescription description = getDescriptionForModelAToModelB();
        description.setId("test1");
        graph.addTransformation(description);
        description = getDescriptionForModelBToModelC();
        description.setId("test2");
        graph.addTransformation(description);
        boolean possible1 = graph.isTransformationPossible(getModelADescription(), getModelCDescription(), null);
        graph.removeModel(getModelBDescription());
        boolean possible2 = graph.isTransformationPossible(getModelADescription(), getModelCDescription(), null);
        description = getDescriptionForModelAToModelC();
        description.setId("test3");
        graph.addTransformation(description);
        boolean possible3 = graph.isTransformationPossible(getModelADescription(), getModelCDescription(), null);
        assertThat(possible1, is(true));
        assertThat(possible2, is(false));
        assertThat(possible3, is(true));
    }
   
    @Test
    public void testIfLoadingByFilenameWorks_shouldLoadByFilename() throws Exception {
        TransformationDescription description = getDescriptionForModelAToModelB();
        description.setId("test1");
        graph.addTransformation(description);
        description = getDescriptionForModelBToModelC();
        description.setId("test2");
        graph.addTransformation(description);
        description = getDescriptionForModelAToModelB();
        description.setId("test3");
        description.setFileName("testfile");
        graph.addTransformation(description);
        description = getDescriptionForModelBToModelC();
        description.setId("test4");
        graph.addTransformation(description);
       
        List<TransformationDescription> result = graph.getTransformationsPerFileName("testfile");
        assertThat(result.size(), is(1));
        assertThat(result.get(0).getId(), is("test3"));
    }
   
    @Test
    public void testIfTransformationDeletionWorks_shouldDeleteTransformationDescription() throws Exception {
        TransformationDescription description = getDescriptionForModelAToModelB();
        description.setId("test1");
        graph.addTransformation(description);
        boolean possible1 = graph.isTransformationPossible(getModelADescription(), getModelBDescription(), null);
        graph.removeTransformation(description);
        boolean possible2 = graph.isTransformationPossible(getModelADescription(), getModelBDescription(), null);
        assertThat(possible1, is(true));
        assertThat(possible2, is(false));
    }
   
    @Test
    public void testIfPropertyConnectionFlatteningWorks_shouldWork() throws Exception {
        Map<String, Set<String>> connections = new TreeMap<String, Set<String>>();
        Set<String> set = new TreeSet<String>();
        set.add("B-1");
        set.add("B-2");
        set.add("B-3");
        connections.put("A-1", set);
        set = new TreeSet<String>();
        set.add("B-1");
        set.add("B-3");
        connections.put("A-2", set);
        Map<String, String> result = OrientModelGraphUtils.convertPropertyConnectionsToSimpleForm(connections);
        assertThat(result.get("A-1"), is("B-1,B-2,B-3"));
        assertThat(result.get("A-2"), is("B-1,B-3"));
    }
}
TOP

Related Classes of org.openengsb.core.ekb.graph.orient.OrientModelGraphTest

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.