// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF 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 com.cloud.hypervisor.ovm3.objects; import org.junit.Test; public class NetworkTest { ConnectionTest con = new ConnectionTest(); Network net = new Network(con); XmlTestResultTest results = new XmlTestResultTest(); private String IP = "192.168.1.64"; private String BR = "192.168.1.255"; private String MAC = "52:54:00:24:47:70"; private String INT = "xenbr0"; private String PHY = "bond0"; private String VLANBR = "bond0"; public String getBroadcast() { return BR; } public String getMac() { return MAC; } public String getInterface() { return INT; } public String getPhysical() { return PHY; } public String getVlanBridge() { return VLANBR; } public String getVlanInterface() { return VLANINT; } public Integer getVlan() { return VLAN; } public String getControl() { return CONTROL; } private String VLANINT = "xenbr0"; private Integer VLAN = 200; private String CONTROL = "control0"; private String CONTROLMAC = "B2:D1:75:69:8C:58"; private String EMPTY = results.escapeOrNot("<?xml version=\"1.0\" ?>" + "<Discover_Network_Result>" + "</Discover_Network_Result>"); private String DISCOVERNETWORK = results .escapeOrNot("<?xml version=\"1.0\" ?>" + "<Discover_Network_Result>" + " <Network>" + " <Active>" + " <Network>" + " <Device Name=\"" + PHY + "\">" + " <MAC>52:54:00:24:47:70</MAC>" + " <Flags>(0x1043) IFF_UP IFF_BROADCAST IFF_RUNNING IFF_MULTICAST</Flags>" + " <MII>" + " <Autonegotiate>" + " <State>Incomplete</State>" + " <Speed>100baseT-FD</Speed>" + " </Autonegotiate>" + " <Link>ok</Link>" + " <Product>" + " <Vendor>00:00:00</Vendor>" + " <Model>0</Model>" + " <Revision>0</Revision>" + " </Product>" + " <Status>autonegotiation complete </Status>" + " <Capabilities>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</Capabilities>" + " <Advertising>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</Advertising>" + " <LinkPartner>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</LinkPartner>" + " </MII>" + " <WOL>" + " <WakeOnLan>disabled</WakeOnLan>" + " </WOL>" + " <SysFS>" + " <uevent>INTERFACE=" + PHY + "IFINDEX=2</uevent>" + " <addr_assign_type>0</addr_assign_type>" + " <addr_len>6</addr_len>" + " <dev_id>0x0</dev_id>" + " <ifalias/>" + " <iflink>2</iflink>" + " <ifindex>2</ifindex>" + " <features>0x200041a0</features>" + " <type>1</type>" + " <link_mode>0</link_mode>" + " <carrier>1</carrier>" + " <speed>100</speed>" + " <duplex>full</duplex>" + " <dormant>0</dormant>" + " <operstate>up</operstate>" + " <mtu>1500</mtu>" + " <flags>0x1103</flags>" + " <tx_queue_len>1000</tx_queue_len>" + " <netdev_group>0</netdev_group>" + " <SysFSDev>" + " <vendor>0x10ec</vendor>" + " <device>0x8139</device>" + " <subsystem_vendor>0x1af4</subsystem_vendor>" + " <subsystem_device>0x1100</subsystem_device>" + " <class>0x020000</class>" + " </SysFSDev>" + " </SysFS>" + " <BootProto>none</BootProto>" + " <MetaData>ethernet:c0a80100{192.168.1.0}:MANAGEMENT,CLUSTER_HEARTBEAT,LIVE_MIGRATE,VIRTUAL_MACHINE,STORAGE</MetaData>" + " </Device>" + " <Device Name=\"eth1\">" + " <MAC>52:54:00:26:7F:A0</MAC>" + " <Flags>(0x1843) IFF_UP IFF_BROADCAST IFF_RUNNING IFF_SLAVE IFF_MULTICAST</Flags>" + " <MII>" + " <Autonegotiate>" + " <State>Incomplete</State>" + " <Speed>100baseT-FD</Speed>" + " </Autonegotiate>" + " <Link>ok</Link>" + " <Product>" + " <Vendor>00:00:00</Vendor>" + " <Model>0</Model>" + " <Revision>0</Revision>" + " </Product>" + " <Status>autonegotiation complete </Status>" + " <Capabilities>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</Capabilities>" + " <Advertising>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</Advertising>" + " <LinkPartner>100baseT-FD 100baseT-HD 10baseT-FD 10baseT-HD</LinkPartner>" + " </MII>" + " <WOL>" + " <WakeOnLan>disabled</WakeOnLan>" + " </WOL>" + " <SysFS>" + " <uevent>INTERFACE=eth1" + "IFINDEX=3</uevent>" + " <addr_assign_type>0</addr_assign_type>" + " <addr_len>6</addr_len>" + " <dev_id>0x0</dev_id>" + " <ifalias/>" + " <iflink>3</iflink>" + " <ifindex>3</ifindex>" + " <features>0x200041a0</features>" + " <type>1</type>" + " <link_mode>0</link_mode>" + " <carrier>1</carrier>" + " <speed>100</speed>" + " <duplex>full</duplex>" + " <dormant>0</dormant>" + " <operstate>up</operstate>" + " <mtu>1500</mtu>" + " <flags>0x1903</flags>" + " <tx_queue_len>1000</tx_queue_len>" + " <netdev_group>0</netdev_group>" + " <SysFSDev>" + " <vendor>0x10ec</vendor>" + " <device>0x8139</device>" + " <subsystem_vendor>0x1af4</subsystem_vendor>" + " <subsystem_device>0x1100</subsystem_device>" + " <class>0x020000</class>" + " </SysFSDev>" + " </SysFS>" + " <BootProto>none</BootProto>" + " </Device>" + " </Network>" + " <Bonding>" + " <Device Name=\"bond1\">" + " <Bonding_Mode>active-backup</Bonding_Mode>" + " <Primary_Slave>eth1 (primary_reselect always)</Primary_Slave>" + " <Currently_Active_Slave>eth1</Currently_Active_Slave>" + " <MII_Status>up</MII_Status>" + " <MII_Polling_Interval>250</MII_Polling_Interval>" + " <Up_Delay>500</Up_Delay>" + " <Down_Delay>500</Down_Delay>" + " <Slave_Interface Name=\"eth1\">" + " <MII_Status>up</MII_Status>" + " <Speed>100 Mbps</Speed>" + " <Duplex>full</Duplex>" + " <Link_Failure_Count>0</Link_Failure_Count>" + " <Permanent_HW_addr>52:54:00:26:7f:a0</Permanent_HW_addr>" + " </Slave_Interface>" + " <Family Type=\"AF_INET\">" + " <MAC>52:54:00:26:7F:A0</MAC>" + " <mtu>1500</mtu>" + " </Family>" + " <BootProto>none</BootProto>" + " </Device>" + " </Bonding>" + " <Bridges>" + " <Device Name=\"" + INT + "\">" + " <Family Type=\"AF_INET\">" + " <MAC>" + MAC + "</MAC>" + " <Address>" + IP + "</Address>" + " <Netmask>255.255.255.0</Netmask>" + " <Broadcast>" + BR + "</Broadcast>" + " </Family>" + " <Interfaces>" + " <PhyInterface>" + PHY + "</PhyInterface>" + " </Interfaces>" + " <BootProto>static</BootProto>" + " </Device>" + " <Device Name=\"xenbr1\">" + " <Family Type=\"AF_INET\">" + " <MAC>52:54:00:26:7F:A0</MAC>" + " </Family>" + " <Interfaces>" + " <PhyInterface>bond1</PhyInterface>" + " </Interfaces>" + " <BootProto>none</BootProto>" + " </Device>" + " <Device Name=\"" + CONTROL + "\">" + " \"<Family Type=\"AF_INET\">" + " <MAC>" + CONTROLMAC + "</MAC>" + " </Family>" + " <Interfaces>" + " </Interfaces>" + " <BootProto>none</BootProto>" + " </Device>" + " <Device Name=\"xenbr0.200\">" + " <Family Type=\"AF_INET\">" + " <MAC>52:54:00:26:7F:A0</MAC>" + " </Family>" + " <Interfaces>" + " <PhyInterface>bond1.200</PhyInterface>" + " </Interfaces>" + " <BootProto>none</BootProto>" + " </Device>" + " </Bridges>" + " <Infiniband>" + " </Infiniband>" + " </Active>" + " </Network>" + "</Discover_Network_Result>"); public String getDiscoverNetwork() { return DISCOVERNETWORK; } @Test public void testDiscoverNetwork() throws Ovm3ResourceException { con.setResult(results.getNil()); results.basicBooleanTest(net.discoverNetwork(), false); con.setResult(results.simpleResponseWrapWrapper(DISCOVERNETWORK)); results.basicBooleanTest(net.discoverNetwork()); results.basicStringTest(net.getBridgeByIp(IP).getName(), INT); results.basicStringTest(net.getBridgeByName(INT).getAddress(), IP); results.basicStringTest(net.getInterfaceByName(CONTROL).getMac(), CONTROLMAC); net.getBridgeByIp(""); results.basicBooleanTest(net.getSuccess(), false); net.getBridgeByName(""); results.basicBooleanTest(net.getSuccess(), false); // results.basicStringTest(net.getBridgeByIp("").getName(), INT); results.basicStringTest(net.getInterfaceByIp(IP).getName(), INT); results.basicStringTest(net.getInterfaceByName(INT).getAddress(), IP); results.basicStringTest(net.getInterfaceByName(INT).getBroadcast(), BR); results.basicStringTest(net.getInterfaceByName(INT).getMac(), MAC); results.basicStringTest(net.getPhysicalByBridgeName(INT), PHY); } @Test public void testInterfacesNotFound() throws Ovm3ResourceException { con.setResult(results.getNil()); results.basicBooleanTest(net.discoverNetwork(), false); con.setResult(results.simpleResponseWrapWrapper(DISCOVERNETWORK)); results.basicBooleanTest(net.discoverNetwork()); if (net.getInterfaceByName(CONTROL+ "xx") == null) { System.out.println("yay!"); }; } @Test(expected = Ovm3ResourceException.class) public void testLocalBreak() throws Ovm3ResourceException { con.setResult(results .errorResponseWrap( 1, "exceptions.RuntimeError:Command: ['/etc/xen/scripts/linuxbridge/ovs-local-bridge', 'start', 'bridge=control0'] failed (1): stderr: Start local network: Bridge control0 Is Busy")); results.basicBooleanTest(net.startOvsLocalConfig(CONTROL), false); } @Test public void testLocal() throws Ovm3ResourceException { String resp = "local bridge " + CONTROL; con.setResult(results.simpleResponseWrap("start " + resp)); results.basicBooleanTest(net.startOvsLocalConfig(CONTROL)); con.setResult(results.simpleResponseWrap("stop " + resp)); results.basicBooleanTest(net.stopOvsLocalConfig(CONTROL)); } @Test(expected = Ovm3ResourceException.class) public void testVlanBridgeBreak() throws Ovm3ResourceException { con.setResult(results .errorResponseWrap( 1, "exceptions.RuntimeError:Command: ['/etc/xen/scripts/linuxbridge/ovs-local-bridge', 'start', 'bridge=control0'] failed (1): stderr: Start local network: Bridge control0 Is Busy")); results.basicBooleanTest(net.startOvsVlanBridge( VLANINT + "." + VLAN.toString(), VLANBR, VLAN), false); } @Test public void testVlanBridge() throws Ovm3ResourceException { String resp = "bridge=" + VLANINT + "." + VLAN.toString() + " netdev=" + VLANBR + " vlan " + VLAN.toString(); con.setResult(results.simpleResponseWrap("start " + resp)); results.basicBooleanTest(net.startOvsVlanBridge( VLANINT + "." + VLAN.toString(), VLANBR, VLAN)); con.setResult(results.simpleResponseWrap("stop " + resp)); results.basicBooleanTest(net.stopOvsVlanBridge( VLANINT + "." + VLAN.toString(), VLANBR, VLAN)); } }