/****************************************************************************** * Copyright (c) 2012-2015 VMware, Inc. All Rights Reserved. * 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 com.vmware.bdd.cli.command.tests; /** * This class is the test of Network command. */ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; import static org.testng.AssertJUnit.assertEquals; import com.fasterxml.jackson.databind.ObjectMapper; import org.testng.annotations.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.test.context.ContextConfiguration; import com.vmware.bdd.apitypes.BddErrorMessage; import com.vmware.bdd.apitypes.IpAllocEntryRead; import com.vmware.bdd.apitypes.IpBlock; import com.vmware.bdd.apitypes.NetworkDnsType; import com.vmware.bdd.apitypes.NetworkRead; import com.vmware.bdd.cli.commands.CommandsUtils; import com.vmware.bdd.cli.commands.CookieCache; import com.vmware.bdd.cli.commands.NetworkCommands; @ContextConfiguration(locations = { "classpath:com/vmware/bdd/cli/command/tests/test-context.xml" }) public class NetworkCommandsTest extends MockRestServer { @Autowired private NetworkCommands networkCommands; @Test public void testPatten() { // Match a single IP format,eg. 192.168.0.2 . final String IP = "\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"; // Match a IP section format,eg. 192.168.0.2-100 . final String IPSEG = "\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\-((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"; Pattern ipPattern = Pattern.compile(IP); Pattern ipSegPattern = Pattern.compile(IPSEG); //Test a single IP format. assertEquals(ipPattern.matcher("192.168.0.1").matches(), true); assertEquals(ipPattern.matcher("88.207.6.12").matches(), true); assertEquals(ipPattern.matcher("abcd").matches(), false); assertEquals(ipPattern.matcher("256.0.0").matches(), false); assertEquals(ipPattern.matcher("256.0.0.1").matches(), false); //Test a IP section format. assertEquals(ipSegPattern.matcher("192.168.0.1-100").matches(), true); assertEquals(ipSegPattern.matcher("abcd").matches(), false); assertEquals(ipSegPattern.matcher("192.168.0.1").matches(), false); assertEquals(ipSegPattern.matcher("192.168.0.1-256").matches(), false); assertEquals(ipSegPattern.matcher("192.168.0-255.1-256").matches(), false); List<String> list = null; list = testIpGroupFormat("192.168.0.12,192.168.0.12,192.168.0.12-200"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), true); } list = testIpGroupFormat("192.168.0.12,192.168.0.12,192.168.0.12"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), true); } list = testIpGroupFormat("192.168.0.12-30,192.168.0.12-80,192.168.0.12-90"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), true); } list = testIpGroupFormat("192.168.0.12, "); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), true); } list = testIpGroupFormat("192.168.0.12,256.117.6.12-300"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); if (ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches()) assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), true); else assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), false); } list = testIpGroupFormat(","); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), false); } list = testIpGroupFormat("123444"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), false); } list = testIpGroupFormat("aa,bb"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) { String string = iterator.next(); assertEquals(ipPattern.matcher(string).matches() || ipSegPattern.matcher(string).matches(), false); } } @Test public void testAddNetwork() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/networks", HttpMethod.POST, HttpStatus.NO_CONTENT, ""); networkCommands.addNetwork("name", "portGroup", false, "192.168.0.12", "192.168.0.13", "192.168.0.1,192.167.0.4-100", "192.168.1.1", "255.255.255.0", NetworkDnsType.NORMAL.toString()); CookieCache.clear(); } @Test public void testAddNetworkFailure() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); BddErrorMessage errorMsg = new BddErrorMessage(); errorMsg.setMessage("already exists"); ObjectMapper mapper = new ObjectMapper(); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/networks", HttpMethod.POST, HttpStatus.BAD_REQUEST, mapper.writeValueAsString(errorMsg)); networkCommands.addNetwork("name", "portGroup", false, "192.168.0.12", "192.168.0.13", "192.168.0.1,192.168.3.4-100", "192.168.7.1", "255.255.255.0", NetworkDnsType.NORMAL.toString()); CookieCache.clear(); } @Test public void testModifyNetwork() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/staticNetwork", HttpMethod.PUT, HttpStatus.NO_CONTENT, ""); networkCommands.modifyNetwork("staticNetwork","192.168.0.2-100", NetworkDnsType.NORMAL.toString()); CookieCache.clear(); } @Test public void testDeleteNetwork() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/name", HttpMethod.DELETE, HttpStatus.NO_CONTENT, ""); networkCommands.deleteNetwork("name"); CookieCache.clear(); } @Test public void testDeleteNetworkFailure() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); BddErrorMessage errorMsg = new BddErrorMessage(); errorMsg.setMessage("not found"); ObjectMapper mapper = new ObjectMapper(); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/name", HttpMethod.DELETE, HttpStatus.NOT_FOUND, mapper.writeValueAsString(errorMsg)); networkCommands.deleteNetwork("name"); CookieCache.clear(); } @Test public void testGetNetwork() { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); ObjectMapper mapper = new ObjectMapper(); NetworkRead networkRead1 = new NetworkRead(); networkRead1.setName("name1"); networkRead1.setPortGroup("portGroup1"); networkRead1.setDhcp(false); networkRead1.setDns1("192.1.1.1"); networkRead1.setDns2("192.1.2.1"); List<IpBlock> allIpBlocks = new ArrayList<IpBlock>(); IpBlock ip1 = new IpBlock(); ip1.setBeginIp("192.1.1.2"); ip1.setEndIp("192.1.1.5"); IpBlock ip2 = new IpBlock(); ip2.setBeginIp("192.1.1.8"); ip2.setEndIp("192.1.1.8"); IpBlock ip3 = new IpBlock(); ip3.setBeginIp("192.1.1.10"); ip3.setEndIp("192.1.1.100"); allIpBlocks.add(ip1); allIpBlocks.add(ip2); allIpBlocks.add(ip3); List<IpBlock> freeIpBlocks = new ArrayList<IpBlock>(); freeIpBlocks.add(ip1); List<IpBlock> assignedIpBlocks = new ArrayList<IpBlock>(); assignedIpBlocks.add(ip2); networkRead1.setAllIpBlocks(allIpBlocks); networkRead1.setFreeIpBlocks(freeIpBlocks); networkRead1.setAssignedIpBlocks(assignedIpBlocks); networkRead1.setGateway("192.1.1.0"); networkRead1.setNetmask("255.255.0.0"); networkRead1.setDnsType(NetworkDnsType.DYNAMIC); networkRead1.setIsGenerateHostname(false); List<IpAllocEntryRead> ipAllocEntries1 = new ArrayList<IpAllocEntryRead>(); IpAllocEntryRead ipAllocEntry1 = new IpAllocEntryRead(); ipAllocEntry1.setIpAddress("192.1.1.3"); ipAllocEntry1.setNodeName("nodeName1"); ipAllocEntry1.setNodeGroupName("nodeGroupName1"); ipAllocEntry1.setClusterName("clusterName1"); IpAllocEntryRead ipAllocEntry2 = new IpAllocEntryRead(); ipAllocEntry2.setIpAddress("192.1.1.7"); ipAllocEntry2.setNodeName("nodeName2"); ipAllocEntry2.setNodeGroupName("nodeGroupName1"); ipAllocEntry2.setClusterName("clusterName1"); ipAllocEntries1.add(ipAllocEntry1); ipAllocEntries1.add(ipAllocEntry2); networkRead1.setIpAllocEntries(ipAllocEntries1); NetworkRead networkRead2 = new NetworkRead(); networkRead2.setName("name2"); networkRead2.setPortGroup("portGroup2"); networkRead2.setDhcp(true); networkRead2.setDnsType(NetworkDnsType.NORMAL); networkRead2.setIsGenerateHostname(true); List<IpAllocEntryRead> ipAllocEntries2 = new ArrayList<IpAllocEntryRead>(); IpAllocEntryRead ipAllocEntry3 = new IpAllocEntryRead(); ipAllocEntry3.setIpAddress("192.1.10.3"); ipAllocEntry3.setNodeName("nodeName3"); ipAllocEntry3.setNodeGroupName("nodeGroupName2"); ipAllocEntry3.setClusterName("clusterName2"); IpAllocEntryRead ipAllocEntry4 = new IpAllocEntryRead(); ipAllocEntry4.setIpAddress("192.1.10.7"); ipAllocEntry4.setNodeName("nodeName4"); ipAllocEntry4.setNodeGroupName("nodeGroupName2"); ipAllocEntry4.setClusterName("clusterName2"); ipAllocEntries2.add(ipAllocEntry3); ipAllocEntries2.add(ipAllocEntry4); networkRead2.setIpAllocEntries(ipAllocEntries2); getListNetwork(mapper, new NetworkRead[] { networkRead1, networkRead2 }, true); CookieCache.clear(); } private List<String> testIpGroupFormat(String str) { return CommandsUtils.inputsConvert(str); } private void getListNetwork(ObjectMapper mapper, NetworkRead[] networks, boolean detail) { try { if (detail) { buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/networks?details=true", HttpMethod.GET, HttpStatus.OK, mapper.writeValueAsString(networks)); networkCommands.getNetwork(null, detail); } else { buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/networks", HttpMethod.GET, HttpStatus.OK, mapper.writeValueAsString(networks)); networkCommands.getNetwork(null, detail); } } catch (Exception e) { System.out.println(e.getMessage()); } } @SuppressWarnings("unused") private void getNetworkByName(ObjectMapper mapper, NetworkRead network, boolean detail) { try { if (detail) { buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/name1?details=true", HttpMethod.GET, HttpStatus.OK, mapper.writeValueAsString(network)); networkCommands.getNetwork("name1", detail); } else { buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/name1", HttpMethod.GET, HttpStatus.OK, mapper.writeValueAsString(network)); networkCommands.getNetwork("name1", detail); } } catch (Exception e) { System.out.println(e.getMessage()); } } @Test public void testGetClusterFailure() throws Exception { CookieCache.put("Cookie","JSESSIONID=2AAF431F59ACEE1CC68B43C87772C54F"); BddErrorMessage errorMsg = new BddErrorMessage(); errorMsg.setMessage("not found"); ObjectMapper mapper = new ObjectMapper(); buildReqRespWithoutReqBody( "https://127.0.0.1:8443/serengeti/api/network/name1", HttpMethod.GET, HttpStatus.NOT_FOUND, mapper.writeValueAsString(errorMsg)); networkCommands.getNetwork("name1", false); CookieCache.clear(); } }