Merge pull request #31 from pingping-lin/ONOS-Next
add Test Case1 && route delete driver && integrate ping test
diff --git a/TestON/drivers/common/cli/quaggaclidriver.py b/TestON/drivers/common/cli/quaggaclidriver.py
index 0f84bc0..acb0831 100644
--- a/TestON/drivers/common/cli/quaggaclidriver.py
+++ b/TestON/drivers/common/cli/quaggaclidriver.py
@@ -14,25 +14,25 @@
def __init__(self):
super(CLI, self).__init__()
- #TODO: simplify this method
+ # TODO: simplify this method
def connect(self, **connectargs):
for key in connectargs:
vars(self)[key] = connectargs[key]
-
+
self.name = self.options['name']
- #self.handle = super(QuaggaCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
+ # self.handle = super(QuaggaCliDriver,self).connect(user_name = self.user_name, ip_address = self.ip_address,port = self.port, pwd = self.pwd)
self.handle = super(QuaggaCliDriver, self).connect(user_name=self.user_name, ip_address="1.1.1.1", port=self.port, pwd=self.pwd)
main.log.info("connect parameters:" + str(self.user_name) + ";" + str(self.ip_address) + ";" + str(self.port) + ";" + str(self.pwd))
- if self.handle:
+ if self.handle:
self.handle.expect("")
self.handle.expect("\$")
self.handle.sendline("telnet localhost 2605")
- self.handle.expect("Password:", timeout = 5)
+ self.handle.expect("Password:", timeout=5)
self.handle.sendline("hello")
- self.handle.expect("bgpd",timeout = 5)
+ self.handle.expect("bgpd", timeout=5)
self.handle.sendline("enable")
- self.handle.expect("bgpd#", timeout = 5)
+ self.handle.expect("bgpd#", timeout=5)
return self.handle
else :
main.log.info("NO HANDLE")
@@ -72,11 +72,11 @@
self.disconnect()
return main.FALSE
self.handle.sendline("configure terminal")
- self.handle.expect("config", timeout = 5)
+ self.handle.expect("config", timeout=5)
routerAS = "router bgp " + str(asn)
try:
self.handle.sendline(routerAS)
- self.handle.expect("config-router", timeout = 5)
+ self.handle.expect("config-router", timeout=5)
return main.TRUE
except:
return main.FALSE
@@ -117,9 +117,9 @@
if peer['ipAddress'] == nextHop:
egress = "of:" + str(peer['attachmentDpid']).replace(":", "") + ":" + str(peer['attachmentPort'])
else:
- ingress.append("of:" + str(peer['attachmentDpid']).replace(":", "") + ":" + str(peer['attachmentPort']) )
+ ingress.append("of:" + str(peer['attachmentDpid']).replace(":", "") + ":" + str(peer['attachmentPort']))
- selector = "[ETH_TYPE{ethType=800}, IPV4_DST{ip=" + prefix + "}]"
+ selector = "ETH_TYPE{ethType=800},IPV4_DST{ip=" + prefix + "}"
treatment = "[ETH_DST{mac=" + str(nextHopMac) + "}]"
intent = egress + "/" + str(sorted(ingress)) + "/" + selector + "/" + treatment
@@ -127,7 +127,7 @@
def generate_expected_onePeerRouteIntents(self, prefixes, nextHop, nextHopMac, sdnip_json_file_path):
intents = []
- sdnip_json_file=open(sdnip_json_file_path).read()
+ sdnip_json_file = open(sdnip_json_file_path).read()
sdnip_data = json.loads(sdnip_json_file)
@@ -163,12 +163,18 @@
for intent in intents_json_obj:
if intent['appId'] != "org.onlab.onos.sdnip" :
continue
- if intent['type'] == "MultiPointToSinglePointIntent":
- egress = str(intent['egress']['device'])+ ":" + str(intent['egress']['port'])
+ if intent['type'] == "MultiPointToSinglePointIntent" and intent['state'] == 'INSTALLED':
+ egress = str(intent['egress']['device']) + ":" + str(intent['egress']['port'])
ingress = []
for attachmentPoint in intent['ingress']:
ingress.append(str(attachmentPoint['device']) + ":" + str(attachmentPoint['port']))
- intent = egress + "/" + str(sorted(ingress)) + "/" + intent['selector'] + "/" + intent['treatment']
+
+ selector = intent['selector'].replace("[" , "").replace("]" , "").replace(" ", "")
+ if str(selector).startswith("IPV4"):
+ str1, str2 = str(selector).split(",")
+ selector = str2 + "," + str1
+
+ intent = egress + "/" + str(sorted(ingress)) + "/" + selector + "/" + intent['treatment']
intents.append(intent)
return sorted(intents)
@@ -195,37 +201,37 @@
def generate_expected_bgpIntents(self, sdnip_json_file_path):
from operator import eq
- sdnip_json_file=open(sdnip_json_file_path).read()
+ sdnip_json_file = open(sdnip_json_file_path).read()
sdnip_data = json.loads(sdnip_json_file)
intents = []
- bgpPeerAttachmentPoint=""
+ bgpPeerAttachmentPoint = ""
bgpSpeakerAttachmentPoint = "of:" + str(sdnip_data['bgpSpeakers'][0]['attachmentDpid']).replace(":", "") + ":" + str(sdnip_data['bgpSpeakers'][0]['attachmentPort'])
for peer in sdnip_data['bgpPeers']:
bgpPeerAttachmentPoint = "of:" + str(peer['attachmentDpid']).replace(":", "") + ":" + str(peer['attachmentPort'])
# find out the BGP speaker IP address for this BGP peer
- bgpSpeakerIpAddress=""
+ bgpSpeakerIpAddress = ""
for interfaceAddress in sdnip_data['bgpSpeakers'][0]['interfaceAddresses']:
- #if eq(interfaceAddress['interfaceDpid'],sdnip_data['bgpSpeakers'][0]['attachmentDpid']) and eq(interfaceAddress['interfacePort'], sdnip_data['bgpSpeakers'][0]['attachmentPort']):
- if eq(interfaceAddress['interfaceDpid'],peer['attachmentDpid']) and eq(interfaceAddress['interfacePort'], peer['attachmentPort']):
- bgpSpeakerIpAddress = interfaceAddress['ipAddress']
+ # if eq(interfaceAddress['interfaceDpid'],sdnip_data['bgpSpeakers'][0]['attachmentDpid']) and eq(interfaceAddress['interfacePort'], sdnip_data['bgpSpeakers'][0]['attachmentPort']):
+ if eq(interfaceAddress['interfaceDpid'], peer['attachmentDpid']) and eq(interfaceAddress['interfacePort'], peer['attachmentPort']):
+ bgpSpeakerIpAddress = interfaceAddress['ipAddress']
break
else:
continue
# from bgpSpeakerAttachmentPoint to bgpPeerAttachmentPoint direction
- selector_str = "IPV4_SRC{ip=" + bgpSpeakerIpAddress + "/32}," + "IPV4_DST{ip=" + peer['ipAddress']+ "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}"
+ selector_str = "IPV4_SRC{ip=" + bgpSpeakerIpAddress + "/32}," + "IPV4_DST{ip=" + peer['ipAddress'] + "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}"
selector = selector_str.replace(" ", "").replace("[", "").replace("]", "").split(",")
intent = bgpSpeakerAttachmentPoint + "/" + bgpPeerAttachmentPoint + "/" + str(sorted(selector))
intents.append(intent)
- selector_str = "IPV4_SRC{ip=" + bgpSpeakerIpAddress + "/32}," + "IPV4_DST{ip=" + peer['ipAddress']+ "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_SRC{tcpPort=179}"
+ selector_str = "IPV4_SRC{ip=" + bgpSpeakerIpAddress + "/32}," + "IPV4_DST{ip=" + peer['ipAddress'] + "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_SRC{tcpPort=179}"
selector = selector_str.replace(" ", "").replace("[", "").replace("]", "").split(",")
intent = bgpSpeakerAttachmentPoint + "/" + bgpPeerAttachmentPoint + "/" + str(sorted(selector))
intents.append(intent)
# from bgpPeerAttachmentPoint to bgpSpeakerAttachmentPoint direction
- selector_str = "IPV4_SRC{ip=" + peer['ipAddress'] + "/32}," + "IPV4_DST{ip=" + bgpSpeakerIpAddress + "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}"
+ selector_str = "IPV4_SRC{ip=" + peer['ipAddress'] + "/32}," + "IPV4_DST{ip=" + bgpSpeakerIpAddress + "/32}," + "IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}"
selector = selector_str.replace(" ", "").replace("[", "").replace("]", "").split(",")
intent = bgpPeerAttachmentPoint + "/" + bgpSpeakerAttachmentPoint + "/" + str(sorted(selector))
intents.append(intent)
@@ -236,14 +242,14 @@
intents.append(intent)
return sorted(intents)
-
+
def add_routes(self, routes, routeRate):
main.log.info("I am in add_routes method!")
-
+
routes_added = 0
try:
self.handle.sendline("")
- #self.handle.expect("config-router")
+ # self.handle.expect("config-router")
self.handle.expect("config-router", timeout=5)
except:
main.log.warn("Probably not in config-router mode!")
@@ -264,7 +270,59 @@
main.log.info("Finished adding routes")
return main.TRUE
return main.FALSE
-
+
+ def delete_routes(self, routes, routeRate):
+ main.log.info("I am in delete_routes method!")
+
+ routes_added = 0
+ try:
+ self.handle.sendline("")
+ # self.handle.expect("config-router")
+ self.handle.expect("config-router", timeout=5)
+ except:
+ main.log.warn("Probably not in config-router mode!")
+ self.disconnect()
+ main.log.info("Start to delete routes")
+
+ for i in range(0, len(routes)):
+ routeCmd = "no network " + routes[i]
+ try:
+ self.handle.sendline(routeCmd)
+ self.handle.expect("bgpd", timeout=5)
+ except:
+ main.log.warn("Failed to add route")
+ self.disconnect()
+ waitTimer = 1.00 / routeRate
+ time.sleep(waitTimer)
+ if routes_added == len(routes):
+ main.log.info("Finished deleting routes")
+ return main.TRUE
+ return main.FALSE
+
+ def ping_test(self, ip_address, ping_test_file, ping_test_result_file):
+ main.log.info("Start the ping test on host:" + str(ip_address))
+
+ self.name = self.options['name']
+ self.handle = super(QuaggaCliDriver, self).connect(
+ user_name=self.user_name, ip_address=ip_address,
+ port=self.port, pwd=self.pwd)
+ main.log.info("connect parameters:" + str(self.user_name) + ";"
+ + str(self.ip_address) + ";" + str(self.port) + ";" + str(self.pwd))
+
+ if self.handle:
+ self.handle.expect("")
+ self.handle.expect("\$")
+ main.log.info("I in host " + str(ip_address))
+ self.handle.sendline(ping_test_file + ">" + ping_test_result_file + "&")
+ self.handle.expect("\$", timeout=60)
+ handle = self.handle.before
+
+ return handle
+ else:
+ main.log.info("NO HANDLE")
+ return main.FALSE
+
+
# Please use the generate_routes plus add_routes instead of this one
def add_route(self, net, numRoutes, routeRate):
try:
@@ -274,8 +332,8 @@
main.log.warn("Probably not in config-router mode!")
self.disconnect()
main.log.info("Adding Routes")
- j=0
- k=0
+ j = 0
+ k = 0
while numRoutes > 255:
numRoutes = numRoutes - 255
j = j + 1
@@ -283,8 +341,8 @@
routes_added = 0
if numRoutes > 255:
numRoutes = 255
- for m in range(1,j+1):
- for n in range(1, numRoutes+1):
+ for m in range(1, j + 1):
+ for n in range(1, numRoutes + 1):
network = str(net) + "." + str(m) + "." + str(n) + ".0/24"
routeCmd = "network " + network
try:
@@ -292,12 +350,12 @@
self.handle.expect("bgpd")
except:
main.log.warn("failed to add route")
- self.disconnect()
- waitTimer = 1.00/routeRate
+ self.disconnect()
+ waitTimer = 1.00 / routeRate
time.sleep(waitTimer)
routes_added = routes_added + 1
- for d in range(j+1,j+2):
- for e in range(1,k+1):
+ for d in range(j + 1, j + 2):
+ for e in range(1, k + 1):
network = str(net) + "." + str(d) + "." + str(e) + ".0/24"
routeCmd = "network " + network
try:
@@ -306,7 +364,7 @@
except:
main.log.warn("failed to add route")
self.disconnect
- waitTimer = 1.00/routeRate
+ waitTimer = 1.00 / routeRate
time.sleep(waitTimer)
routes_added = routes_added + 1
if routes_added == numRoutes:
@@ -321,8 +379,8 @@
main.log.warn("Probably not in config-router mode!")
self.disconnect()
main.log.info("Deleting Routes")
- j=0
- k=0
+ j = 0
+ k = 0
while numRoutes > 255:
numRoutes = numRoutes - 255
j = j + 1
@@ -330,8 +388,8 @@
routes_deleted = 0
if numRoutes > 255:
numRoutes = 255
- for m in range(1,j+1):
- for n in range(1, numRoutes+1):
+ for m in range(1, j + 1):
+ for n in range(1, numRoutes + 1):
network = str(net) + "." + str(m) + "." + str(n) + ".0/24"
routeCmd = "no network " + network
try:
@@ -340,11 +398,11 @@
except:
main.log.warn("Failed to delete route")
self.disconnect()
- waitTimer = 1.00/routeRate
+ waitTimer = 1.00 / routeRate
time.sleep(waitTimer)
routes_deleted = routes_deleted + 1
- for d in range(j+1,j+2):
- for e in range(1,k+1):
+ for d in range(j + 1, j + 2):
+ for e in range(1, k + 1):
network = str(net) + "." + str(d) + "." + str(e) + ".0/24"
routeCmd = "no network " + network
try:
@@ -353,17 +411,18 @@
except:
main.log.warn("Failed to delete route")
self.disconnect()
- waitTimer = 1.00/routeRate
+ waitTimer = 1.00 / routeRate
time.sleep(waitTimer)
routes_deleted = routes_deleted + 1
if routes_deleted == numRoutes:
return main.TRUE
return main.FALSE
+
def check_routes(self, brand, ip, user, pw):
def pronto(ip, user, passwd):
print "Connecting to Pronto switch"
child = pexpect.spawn("telnet " + ip)
- i = child.expect(["login:", "CLI#",pexpect.TIMEOUT])
+ i = child.expect(["login:", "CLI#", pexpect.TIMEOUT])
if i == 0:
print "Username and password required. Passing login info."
child.sendline(user)
@@ -381,7 +440,7 @@
child.expect("Flow table show")
count = 0
while 1:
- i = child.expect(['17\d\.\d{1,3}\.\d{1,3}\.\d{1,3}','CLI#',pexpect.TIMEOUT])
+ i = child.expect(['17\d\.\d{1,3}\.\d{1,3}\.\d{1,3}', 'CLI#', pexpect.TIMEOUT])
if i == 0:
count = count + 1
elif i == 1:
@@ -389,10 +448,10 @@
break
else:
break
- def cisco(ip,user,passwd):
+ def cisco(ip, user, passwd):
print "Establishing Cisco switch connection"
- child = pexpect.spawn("ssh " + user + "@" + ip)
- i = child.expect(["Password:", "CLI#",pexpect.TIMEOUT])
+ child = pexpect.spawn("ssh " + user + "@" + ip)
+ i = child.expect(["Password:", "CLI#", pexpect.TIMEOUT])
if i == 0:
print "Password required. Passing now."
child.sendline(passwd)
@@ -403,7 +462,7 @@
print "Flow table retrieved. Counting flows"
count = 0
while 1:
- i = child.expect(["nw_src=17","#",pexpect.TIMEOUT])
+ i = child.expect(["nw_src=17", "#", pexpect.TIMEOUT])
if i == 0:
count = count + 1
elif i == 1:
@@ -412,9 +471,9 @@
else:
break
if brand == "pronto" or brand == "PRONTO":
- pronto(ip,user,passwd)
- #elif brand == "cisco" or brand == "CISCO":
- # cisco(ip,user,passwd)
+ pronto(ip, user, passwd)
+ # elif brand == "cisco" or brand == "CISCO":
+ # cisco(ip,user,passwd)
def disconnect(self):
'''
Called when Test is complete to disconnect the Quagga handle.
diff --git a/TestON/tests/SdnIpTest/SdnIpTest.py b/TestON/tests/SdnIpTest/SdnIpTest.py
index 543bea2..acd9b0f 100755
--- a/TestON/tests/SdnIpTest/SdnIpTest.py
+++ b/TestON/tests/SdnIpTest/SdnIpTest.py
@@ -1,6 +1,6 @@
from cupshelpers.config import prefix
-#Testing the basic functionality of SDN-IP
+# Testing the basic functionality of SDN-IP
class SdnIpTest:
def __init__(self):
@@ -20,23 +20,25 @@
import time
import json
from operator import eq
-
+ # from datetime import datetime
+ from time import gmtime, strftime
+
main.case("The test case is to help to setup the TestON environment and test new drivers")
SDNIP_JSON_FILE_PATH = "../tests/SdnIpTest/sdnip.json"
# all expected routes for all BGP peers
allRoutes_expected = []
main.step("Start to generate routes for all BGP peers")
- #bgpPeerHosts = []
- #for i in range(3, 5):
+ # bgpPeerHosts = []
+ # for i in range(3, 5):
# bgpPeerHosts.append("host" + str(i))
- #main.log.info("BGP Peer Hosts are:" + bgpPeerHosts)
+ # main.log.info("BGP Peer Hosts are:" + bgpPeerHosts)
- #for i in range(3, 5):
+ # for i in range(3, 5):
# QuaggaCliHost = "QuaggaCliHost" + str(i)
# prefixes = main.QuaggaCliHost.generate_prefixes(3, 10)
# main.log.info(prefixes)
- #allRoutes_expected.append(prefixes)
+ # allRoutes_expected.append(prefixes)
main.log.info("Generate prefixes for host3")
prefixes_host3 = main.QuaggaCliHost3.generate_prefixes(3, 10)
main.log.info(prefixes_host3)
@@ -69,6 +71,7 @@
main.QuaggaCliHost4.enter_config(64516)
main.log.info("Add routes to Quagga on host4")
main.QuaggaCliHost4.add_routes(prefixes_host4, 1)
+ time.sleep(30)
cell_name = main.params['ENV']['cellName']
@@ -80,24 +83,24 @@
main.step("Set cell for ONOS-cli environment")
main.ONOScli.set_cell(cell_name)
-
+
main.step("Start ONOS-cli")
# TODO: change the hardcode in start_onos_cli method in ONOS CLI driver
- time.sleep(5)
- main.ONOScli.start_onos_cli(ONOS1_ip)
+
+ main.ONOScli.start_onos_cli(ONOS1_ip)
main.step("Get devices in the network")
list_result = main.ONOScli.devices(json_format=False)
main.log.info(list_result)
- #get all routes inside SDN-IP
+ # get all routes inside SDN-IP
get_routes_result = main.ONOScli.routes(json_format=True)
-
+
# parse routes from ONOS CLI
allRoutes_actual = main.QuaggaCliHost3.extract_actual_routes(get_routes_result)
-
+
allRoutes_str_expected = str(sorted(allRoutes_expected))
- allRoutes_str_actual = str(allRoutes_actual).replace('u',"")
+ allRoutes_str_actual = str(allRoutes_actual).replace('u', "")
main.step("Check routes installed")
main.log.info("Routes expected:")
main.log.info(allRoutes_str_expected)
@@ -114,9 +117,9 @@
main.step("Check MultiPointToSinglePointIntent intents installed")
# route_intents_expected are generated when generating routes
# get rpoute intents from ONOS CLI
- routeIntents_actual = main.QuaggaCliHost3.extract_actual_routeIntents(get_intents_result)
+ routeIntents_actual = main.QuaggaCliHost3.extract_actual_routeIntents(get_intents_result)
routeIntents_str_expected = str(sorted(routeIntents_expected))
- routeIntents_str_actual = str(routeIntents_actual).replace('u',"")
+ routeIntents_str_actual = str(routeIntents_actual).replace('u', "")
main.log.info("MultiPointToSinglePoint intents expected:")
main.log.info(routeIntents_str_expected)
main.log.info("MultiPointToSinglePoint intents get from ONOS CLI:")
@@ -132,7 +135,7 @@
# get BGP intents from ONOS CLI
bgpIntents_actual = main.QuaggaCliHost3.extract_actual_bgpIntents(get_intents_result)
- bgpIntents_str_expected = str(bgpIntents_expected).replace('u',"")
+ bgpIntents_str_expected = str(bgpIntents_expected).replace('u', "")
bgpIntents_str_actual = str(bgpIntents_actual)
main.log.info("PointToPointIntent intents expected:")
main.log.info(bgpIntents_str_expected)
@@ -143,7 +146,50 @@
onpass="***PointToPointIntent Intents in SDN-IP are correct!***",
onfail="***PointToPointIntent Intents in SDN-IP are wrong!***")
- #main.step("Test whether Mininet is started")
- #main.Mininet2.handle.sendline("xterm host1")
- #main.Mininet2.handle.expect("mininet>")
+ #============================= Ping Test ========================
+ # wait until all MultiPointToSinglePoint
+ time.sleep(20)
+ ping_test_script = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
+ ping_test_results_file = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-results-before-delete-routes-" + strftime("%Y-%m-%d-%H:%M:%S", gmtime()) + ".txt"
+ ping_test_results = main.QuaggaCliHost.ping_test("1.168.30.100", ping_test_script, ping_test_results_file)
+ main.log.info(ping_test_results)
+
+ # ping test
+
+ #============================= Deleting Routes ==================
+ main.step("Check deleting routes installed")
+ main.QuaggaCliHost3.delete_routes(prefixes_host3, 1)
+ main.QuaggaCliHost4.delete_routes(prefixes_host4, 1)
+
+ # main.log.info("main.ONOScli.get_routes_num() = " )
+ # main.log.info(main.ONOScli.get_routes_num())
+ # utilities.assert_equals(expect = "Total SDN-IP routes = 1", actual= main.ONOScli.get_routes_num(),
+ get_routes_result = main.ONOScli.routes(json_format=True)
+ allRoutes_actual = main.QuaggaCliHost3.extract_actual_routes(get_routes_result)
+ main.log.info("allRoutes_actual = ")
+ main.log.info(allRoutes_actual)
+
+ utilities.assert_equals(expect="[]", actual=str(allRoutes_actual),
+ onpass="***Route number in SDN-IP is 0, correct!***",
+ onfail="***Routes number in SDN-IP is not 0, wrong!***")
+
+ main.step("Check intents after deleting routes")
+ get_intents_result = main.ONOScli.intents(json_format=True)
+ routeIntents_actual = main.QuaggaCliHost3.extract_actual_routeIntents(get_intents_result)
+ main.log.info("main.ONOScli.intents()= ")
+ main.log.info(routeIntents_actual)
+ utilities.assert_equals(expect="[]", actual=str(routeIntents_actual),
+ onpass="***MultiPointToSinglePoint Intents number in SDN-IP is 0, correct!***",
+ onfail="***MultiPointToSinglePoint Intents number in SDN-IP is 0, wrong!***")
+
+
+ time.sleep(20)
+ ping_test_script = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-as2host.sh"
+ ping_test_results_file = "~/SDNIP/SdnIpIntentDemo/CASE1-ping-results-after-delete-routes-" + strftime("%Y-%m-%d-%H:%M:%S", gmtime()) + ".txt"
+ ping_test_results = main.QuaggaCliHost.ping_test("1.168.30.100", ping_test_script, ping_test_results_file)
+ main.log.info(ping_test_results)
+
+ # main.step("Test whether Mininet is started")
+ # main.Mininet2.handle.sendline("xterm host1")
+ # main.Mininet2.handle.expect("mininet>")
diff --git a/TestON/tests/SdnIpTest/SdnIpTest.topo b/TestON/tests/SdnIpTest/SdnIpTest.topo
index a2d9616..51b5ac8 100755
--- a/TestON/tests/SdnIpTest/SdnIpTest.topo
+++ b/TestON/tests/SdnIpTest/SdnIpTest.topo
@@ -44,14 +44,14 @@
<connect_order>5</connect_order>
<COMPONENTS> </COMPONENTS>
</QuaggaCliHost4>
- <QuaggaCliHost5>
+ <QuaggaCliHost>
<host>127.0.0.1</host>
<user>username</user>
<password>password</password>
<type>QuaggaCliDriver</type>
<connect_order>5</connect_order>
<COMPONENTS> </COMPONENTS>
- </QuaggaCliHost5>
+ </QuaggaCliHost>
</COMPONENT>
</TOPOLOGY>