blob: 02f9645dbcffc793681139345cebdaff908d781e [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Foundation
*
* 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.onosproject.vpls.config;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Before;
import org.junit.Test;
import org.onosproject.TestApplicationId;
import org.onosproject.core.ApplicationId;
import org.onosproject.net.EncapsulationType;
import org.onosproject.net.config.Config;
import org.onosproject.net.config.ConfigApplyDelegate;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import static org.junit.Assert.*;
/**
* Tests for the {@link VplsAppConfig} class.
*/
public class VplsAppConfigTest {
private static final String APP_NAME = "org.onosproject.vpls";
private static final ApplicationId APP_ID = new TestApplicationId(APP_NAME);
private static final String VPLS = "vplsList";
private static final String NAME = "name";
private static final String INTERFACE = "interfaces";
private static final String ENCAPSULATION = "encapsulation";
private static final String VPLS1 = "vpls1";
private static final String VPLS2 = "vpls2";
private static final String NEWVPLS = "newvpls";
private static final String IF1 = "sw5-4-100";
private static final String IF2 = "sw5-4-200";
private static final String IF3 = "sw5-5-100";
private static final String IF4 = "sw6-5-100";
private static final String IF5 = "sw6-5-400";
private static final String IF_NON_EXIST = "sw7-5-100";
private static final String JSON_TREE = "{\"" + VPLS + "\" : [{\"" + NAME +
"\" : \"" + VPLS1 + "\"," + "\"" + INTERFACE + "\" : [" + "\"" +
IF1 + "\",\"" + IF2 + "\",\"" + IF3 + "\"]" + ",\"" +
ENCAPSULATION + "\" : \"none\"}]}";
private static final String EMPTY_JSON_TREE = "{}";
private final ObjectMapper mapper = new ObjectMapper();
private final ConfigApplyDelegate delegate = new MockCfgDelegate();
private final VplsConfig initialVpls = createInitialVpls();
private Set<VplsConfig> vplss = new HashSet<>();
private VplsAppConfig vplsAppConfig = new VplsAppConfig();
private VplsAppConfig emptyVplsAppConfig = new VplsAppConfig();
@Before
public void setUp() throws Exception {
JsonNode tree = new ObjectMapper().readTree(JSON_TREE);
vplsAppConfig.init(APP_ID, APP_NAME, tree, mapper, delegate);
JsonNode emptyTree = new ObjectMapper().readTree(EMPTY_JSON_TREE);
emptyVplsAppConfig.init(APP_ID, APP_NAME, emptyTree, mapper, delegate);
vplss.add(initialVpls);
}
/**
* Tests if a VPLS configuration can be retrieved from JSON.
*/
@Test
public void vplss() {
assertEquals("Cannot load VPLS configuration or unexpected configuration" +
"loaded", vplss, vplsAppConfig.vplss());
}
/**
* Tests an empty VPLS application configuration is retrieved from JSON.
*/
@Test
public void emptyVplss() {
assertTrue("Configuration retrieved from JSON was not empty",
emptyVplsAppConfig.vplss().isEmpty());
}
/**
* Tests if a VPLS can be found by name. Tries also to find a VPLS that
* does not exist in the configuration.
*/
@Test
public void getVplsWithName() {
assertNotNull("Configuration for VPLS not found",
vplsAppConfig.getVplsWithName(VPLS1));
assertNull("Unexpected configuration for VPLS found",
vplsAppConfig.getVplsWithName(VPLS2));
}
/**
* Tests the addition of a new VPLS.
*/
@Test
public void addVpls() {
int initialSize = vplsAppConfig.vplss().size();
VplsConfig newVpls = createNewVpls();
vplsAppConfig.addVpls(newVpls);
assertEquals("The new VPLS has not been added correctly to the list of" +
"existing VPLSs",
initialSize + 1,
vplsAppConfig.vplss().size());
vplss.add(newVpls);
}
/**
* Tests the addition of new VPLS to an empty configuration.
*/
@Test
public void addVplsToEmpty() {
VplsConfig newVpls = createNewVpls();
emptyVplsAppConfig.addVpls(newVpls);
assertFalse("The new VPLS has not been added correctly",
emptyVplsAppConfig.vplss().isEmpty());
}
/**
* Tests the removal of an existing VPLS from the configuration.
*/
@Test
public void removeExistingVpls() {
int initialSize = vplsAppConfig.vplss().size();
vplsAppConfig.removeVpls(VPLS1);
assertEquals("The VPLS has not been removed correctly",
initialSize - 1, vplsAppConfig.vplss().size());
}
/**
* Tests the removal of a non-existing VPLS from the configuration.
*/
@Test
public void removeInexistingVpls() {
int initialSize = vplsAppConfig.vplss().size();
vplsAppConfig.removeVpls(VPLS2);
assertEquals("Non-configured VPLS has been unexpectedly removed",
initialSize, vplsAppConfig.vplss().size());
}
/**
* Tests the addition of a new interface.
*/
@Test
public void addInterfaceToVpls() {
int initialSize = vplsAppConfig.getVplsWithName(VPLS1).ifaces().size();
vplsAppConfig.addIface(VPLS1, IF4);
assertEquals("The interface has not been added to the VPLS",
initialSize + 1,
vplsAppConfig.getVplsWithName(VPLS1).ifaces().size());
}
/**
* Tests the addition of a new interface when it already exists.
*/
@Test
public void addExistingInterfaceToVpls() {
int initialSize = vplsAppConfig.getVplsWithName(VPLS1).ifaces().size();
vplsAppConfig.addIface(VPLS1, IF1);
assertEquals("The interface has been unexpectedly added twice to the" +
"same VPLS",
initialSize,
vplsAppConfig.getVplsWithName(VPLS1).ifaces().size());
}
/**
* Tests the retrieval of a VPLS, given an interface name.
*/
@Test
public void getVplsFromInterface() {
assertNotNull("VPLS not found", vplsAppConfig.vplsFromIface(IF1));
assertNull("VPLS unexpectedly found",
vplsAppConfig.vplsFromIface(IF_NON_EXIST));
}
/**
* Tests the removal of an interface.
*/
@Test
public void removeExistingInterfaceFromVpls() {
int initialSize = vplsAppConfig.getVplsWithName(VPLS1).ifaces().size();
vplsAppConfig.removeIface(initialVpls, IF1);
assertEquals("Interface has not been removed correctly from the VPLS",
initialSize - 1,
vplsAppConfig.getVplsWithName(VPLS1).ifaces().size());
}
/**
* Tests the removal of an interface from a VPLS when it does not exist.
*/
@Test
public void removeNonExistingInterfaceFromVpls() {
int initialSize = vplsAppConfig.getVplsWithName(VPLS1).ifaces().size();
vplsAppConfig.removeIface(initialVpls, IF_NON_EXIST);
assertEquals("Interface unexpectedly removed from the VPLS",
initialSize, vplsAppConfig.getVplsWithName(VPLS1).ifaces().size());
}
/**
* Tests if the two interfaces are attached to the VPLS, while one of them
* is also attached and another.
*/
@Test
public void isAttached() {
VplsConfig vpls = createNewVpls();
assertTrue("Interface not correctly attached to the VPLS",
vpls.isAttached(IF4));
assertTrue("Interface not correctly attached to the VPLS",
vpls.isAttached(IF4));
assertFalse("Unexpected interface attached to the VPLS",
vpls.isAttached(IF_NON_EXIST));
}
/**
* Tests if encapsulation is set correctly.
*/
@Test
public void encap() {
vplsAppConfig.setEncap(VPLS1, EncapsulationType.VLAN);
assertEquals("Wrong encapsulation type found",
EncapsulationType.VLAN,
vplsAppConfig.getVplsWithName(VPLS1).encap());
}
public static class MockCfgDelegate implements ConfigApplyDelegate {
@Override
public void onApply(@SuppressWarnings("rawtypes") Config config) {
config.apply();
}
}
/**
* Creates a basic VPLS config.
*
* @return the VPLS config
*/
private VplsConfig createInitialVpls() {
Set<String> ifaces = new HashSet<>(Arrays.asList(IF1, IF2, IF3));
return new VplsConfig(VPLS1, ifaces, EncapsulationType.NONE);
}
/**
* Creates another basic VPLS config.
*
* @return the VPLS config
*/
private VplsConfig createNewVpls() {
Set<String> ifaces = new HashSet<>(Arrays.asList(IF4, IF5));
return new VplsConfig(NEWVPLS, ifaces, EncapsulationType.NONE);
}
}