/**
* This file is part of CloudML [ http://cloudml.org ]
*
* Copyright (C) 2012 - SINTEF ICT
* Contact: Franck Chauvel <franck.chauvel@sintef.no>
*
* Module: root
*
* CloudML is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* CloudML is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Public License along with CloudML. If not, see
* <http://www.gnu.org/licenses/>.
*/
/*
*/
package test.cloudml.core;
import org.cloudml.core.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
/**
* Verification Helper
*/
public class Verify {
public static void correctComponentInstantiation(Component type, ComponentInstance<? extends Component> instance) {
assertThat("null type", type, is(not(nullValue())));
assertThat("null instance", instance, is(not(nullValue())));
assertThat("instance's type", instance.getType(), is(sameInstance(type)));
verifyProvidedPorts(type, instance);
verifyProvidedExecutionPlatforms(type, instance);
}
private static void verifyProvidedPorts(Component type, ComponentInstance<? extends Component> instance) {
assertThat("instance provided port count", instance.getProvidedPorts(), hasSize(type.getProvidedPorts().size()));
verifyProvidedPortsOwner(instance);
for (ProvidedPort portType : type.getProvidedPorts()) {
hasOneInstanceOf(instance, portType);
}
}
private static void verifyProvidedPortsOwner(ComponentInstance<? extends Component> instance) {
for(ProvidedPortInstance port: instance.getProvidedPorts()) {
assertThat("provided port owner", port.getOwner().get() == instance);
}
}
public static void hasOneInstanceOf(ComponentInstance<? extends Component> instance, ProvidedPort type) {
ProvidedPortInstance match = null;
for (ProvidedPortInstance port : instance.getProvidedPorts()) {
if (port.isInstanceOf(type)) {
match = port;
}
}
assertThat("missing port instance of type " + type.getQualifiedName(),
match, is(not(nullValue())));
}
private static void verifyProvidedExecutionPlatforms(Component type, ComponentInstance<? extends Component> instance) {
assertThat("provided execution platforms count", instance.getProvidedExecutionPlatforms(), hasSize(type.getProvidedExecutionPlatforms().size()));
verifyProvidedExecutionPlatformOwner(instance);
for(ProvidedExecutionPlatform platformType: type.getProvidedExecutionPlatforms()) {
hasOneInstanceOf(instance, platformType);
}
}
public static void verifyProvidedExecutionPlatformOwner(ComponentInstance<? extends Component> instance) {
for(ProvidedExecutionPlatformInstance platform: instance.getProvidedExecutionPlatforms()) {
assertThat("wrong provided execution platform owner", platform.getOwner().get() == instance);
}
}
private static void hasOneInstanceOf(ComponentInstance<? extends Component> instance, ProvidedExecutionPlatform platformType) {
ProvidedExecutionPlatformInstance match = null;
for (ProvidedExecutionPlatformInstance platform: instance.getProvidedExecutionPlatforms()) {
if (platform.isInstanceOf(platformType)) {
match = platform;
}
}
assertThat("missing execution platform instance of " + platformType.getQualifiedName(),
match, is(not(nullValue())));
}
public static void correctExternalComponentInstantiation(ExternalComponent type, ExternalComponentInstance<? extends ExternalComponent> instance) {
correctComponentInstantiation(type, instance);
}
public static void correctVMInstantiation(VM type, VMInstance instance) {
correctExternalComponentInstantiation(type, instance);
}
public static void correctInternalComponentInstance(InternalComponent type, InternalComponentInstance instance) {
correctComponentInstantiation(type, instance);
verifyRequiredPorts(type, instance);
verifyRequiredExecutionPlatform(type, instance);
}
private static void verifyRequiredPorts(InternalComponent type, InternalComponentInstance instance) {
assertThat("required port count", instance.getRequiredPorts(), hasSize(type.getRequiredPorts().size()));
verifyRequiredPortOwner(instance);
for(RequiredPort portType: type.getRequiredPorts()) {
hasOneInstanceOf(instance, portType);
}
}
public static void verifyRequiredPortOwner(InternalComponentInstance instance) {
for(RequiredPortInstance port: instance.getRequiredPorts()) {
assertThat("wrong required port owner", port.getOwner().get() == instance);
}
}
public static void hasOneInstanceOf(InternalComponentInstance instance, RequiredPort type) {
RequiredPortInstance match = null;
for (RequiredPortInstance port : instance.getRequiredPorts()) {
if (port.isInstanceOf(type)) {
match = port;
}
}
assertThat("missing required port instance of type " + type.getQualifiedName(),
match, is(not(nullValue())));
}
private static void verifyRequiredExecutionPlatform(InternalComponent type, InternalComponentInstance instance) {
assertThat("required execution platform type", instance.getRequiredExecutionPlatform().isInstanceOf(type.getRequiredExecutionPlatform()));
assertThat("required execution platform owner", instance == instance.getRequiredExecutionPlatform().getOwner().get());
}
}