blob: 099bd3374219fd7a524bab1da924f4c55f2d5171 [file] [log] [blame]
/*
* Copyright 2017-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.cli;
import org.junit.Before;
import org.junit.Test;
import org.onosproject.net.EncapsulationType;
import org.onosproject.vpls.VplsTest;
import org.onosproject.vpls.api.VplsData;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Collection;
import static org.junit.Assert.*;
/**
* Test for {@link VplsCommand}.
*/
public class VplsCommandTest extends VplsTest {
private static final String NEW_LINE = "\n";
private static final String SHOW_ALL_RES = "----------------\n" +
"VPLS name: \u001B[1mvpls2\u001B[0m\n" +
"Associated interfaces: [v200h2, v200h1]\n" +
"Encapsulation: NONE\n" +
"State: ADDED\n" +
"----------------\n" +
"VPLS name: \u001B[1mvpls1\u001B[0m\n" +
"Associated interfaces: [v100h1, v100h2]\n" +
"Encapsulation: NONE\n" +
"State: ADDED\n" +
"----------------\n";
private static final String SHOW_ONE_RES = "VPLS name: \u001B[1mvpls1\u001B[0m\n" +
"Associated interfaces: [v100h1, v100h2]\n" +
"Encapsulation: NONE\n" +
"State: ADDED\n";
private static final String IFACE_ALREADY_USED =
"\u001B[31mInterface \u001B[1mv200h1\u001B[0m\u001B[31m already associated " +
"to VPLS \u001B[1mvpls2\u001B[0m\u001B[31m\u001B[0m\n";
private static final String LIST_OUTPUT = VPLS1 + NEW_LINE + VPLS2 + NEW_LINE;
VplsCommand vplsCommand;
@Before
public void setup() {
vplsCommand = new VplsCommand();
vplsCommand.vpls = new TestVpls();
vplsCommand.interfaceService = new TestInterfaceService();
}
/**
* Creates a new VPLS.
*/
@Test
public void testCreate() {
vplsCommand.command = VplsCommandEnum.CREATE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.doExecute();
Collection<VplsData> vplss = vplsCommand.vpls.getAllVpls();
assertEquals(1, vplss.size());
VplsData result = vplss.iterator().next();
VplsData expected = VplsData.of(VPLS1, EncapsulationType.NONE);
assertEquals(expected, result);
}
/**
* Adds new network interface to a VPLS.
*/
@Test
public void testAddIf() {
vplsCommand.create(VPLS1);
vplsCommand.command = VplsCommandEnum.ADD_IFACE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = V100H1.name();
vplsCommand.doExecute();
vplsCommand.command = VplsCommandEnum.ADD_IFACE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = V200H1.name();
vplsCommand.doExecute();
Collection<VplsData> vplss = vplsCommand.vpls.getAllVpls();
assertEquals(1, vplss.size());
VplsData result = vplss.iterator().next();
assertEquals(2, result.interfaces().size());
assertTrue(result.interfaces().contains(V100H1));
assertTrue(result.interfaces().contains(V200H1));
}
/**
* Removes network interface from a VPLS.
*/
@Test
public void testRemIf() {
vplsCommand.create(VPLS1);
vplsCommand.addIface(VPLS1, V100H1.name());
vplsCommand.addIface(VPLS1, V200H1.name());
vplsCommand.command = VplsCommandEnum.REMOVE_IFACE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = V200H1.name();
vplsCommand.doExecute();
Collection<VplsData> vplss = vplsCommand.vpls.getAllVpls();
assertEquals(1, vplss.size());
VplsData result = vplss.iterator().next();
assertEquals(1, result.interfaces().size());
assertTrue(result.interfaces().contains(V100H1));
assertFalse(result.interfaces().contains(V200H1));
}
/**
* Lists all VPLS names.
*/
@Test
public void testList() {
((TestVpls) vplsCommand.vpls).initSampleData();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
vplsCommand.command = VplsCommandEnum.LIST.toString();
vplsCommand.doExecute();
String result = baos.toString();
assertEquals(LIST_OUTPUT, result);
}
/**
* Sets encapsulation to a VPLS.
*/
@Test
public void testSetEncap() {
((TestVpls) vplsCommand.vpls).initSampleData();
// Sets to NONE
vplsCommand.command = VplsCommandEnum.SET_ENCAP.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = EncapsulationType.NONE.name();
vplsCommand.doExecute();
VplsData result = vplsCommand.vpls.getVpls(VPLS1);
assertEquals(result.encapsulationType(), EncapsulationType.NONE);
// Sets to VLAN
vplsCommand.command = VplsCommandEnum.SET_ENCAP.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = EncapsulationType.VLAN.name();
vplsCommand.doExecute();
result = vplsCommand.vpls.getVpls(VPLS1);
assertEquals(result.encapsulationType(), EncapsulationType.VLAN);
// Sets to MPLS
vplsCommand.command = VplsCommandEnum.SET_ENCAP.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = EncapsulationType.MPLS.name();
vplsCommand.doExecute();
result = vplsCommand.vpls.getVpls(VPLS1);
assertEquals(result.encapsulationType(), EncapsulationType.MPLS);
}
/**
* Deletes a VPLS.
*/
@Test
public void testDelete() {
((TestVpls) vplsCommand.vpls).initSampleData();
vplsCommand.command = VplsCommandEnum.DELETE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.doExecute();
Collection<VplsData> vplss = vplsCommand.vpls.getAllVpls();
assertEquals(1, vplss.size());
}
/**
* Shows all VPLS information.
*/
@Test
public void testShowAll() {
((TestVpls) vplsCommand.vpls).initSampleData();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
vplsCommand.command = VplsCommandEnum.SHOW.toString();
vplsCommand.doExecute();
String result = baos.toString();
assertEquals(SHOW_ALL_RES, result);
}
/**
* Shows a VPLS information.
*/
@Test
public void testShowOne() {
((TestVpls) vplsCommand.vpls).initSampleData();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
vplsCommand.command = VplsCommandEnum.SHOW.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.doExecute();
String result = baos.toString();
assertEquals(SHOW_ONE_RES, result);
}
/**
* Adds a network interface which already related to another VPLS to a VPLS.
*/
@Test
public void testIfaceAssociated() {
((TestVpls) vplsCommand.vpls).initSampleData();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
vplsCommand.command = VplsCommandEnum.ADD_IFACE.toString();
vplsCommand.vplsName = VPLS1;
vplsCommand.optArg = V200H1.name();
vplsCommand.doExecute();
String result = baos.toString();
assertEquals(IFACE_ALREADY_USED, result);
}
/**
* Removes all VPLS.
*/
@Test
public void testClean() {
((TestVpls) vplsCommand.vpls).initSampleData();
vplsCommand.command = VplsCommandEnum.CLEAN.toString();
vplsCommand.doExecute();
Collection<VplsData> vplss = vplsCommand.vpls.getAllVpls();
assertEquals(0, vplss.size());
}
}