
class MininetSlicing :

    def __init__(self) :
        self.default = ''

    def CASE1(self,main) :

        main.case("Verifying 'SSH protocol' based slicing")
    
        main.step("Deleting flowspace using 'removeFlowSpace'")
        removeflowspace_result = main.FlowVisor1.removeFlowSpace("all")
        utilities.assert_equals(expect=main.TRUE,actual=removeflowspace_result,onpass="Removed FlowSpace Successfully",onfail="Failed to remove FlowSpace")
    
        main.step("Showing connected devices using 'listDevices'")
        listdevices_result = main.FlowVisor1.listDevices()
        utilities.assert_equals(expect=main.TRUE,actual=listdevices_result,onpass="Listed devices Successfully",onfail="Failed to list the devices")
    
        main.step("Verifying hosts reachability through ICMP traffic")
        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
    
        main.step("Showing the flowSpace USING 'listFlowSpace'")
        listflowspace_result = main.FlowVisor1.listFlowSpace()
        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
    
    
        main.step("Adding FlowSpace to create the slice of the Network")
        main.log.info(" Geeting the IP-Addresses of Hosts")
        h1_ipaddress = main.Mininet1.getIPAddress('h1')
        h4_ipaddress  = main.Mininet1.getIPAddress('h4')
    
        main.log.info(" Geeting the MAC-Addresses of Hosts"  )
        h1_macaddress = main.Mininet1.getMacAddress('h1')
        h4_macaddress = main.Mininet1.getMacAddress('h4')
    
        addflowspace_result_1 = main.FlowVisor1.addFlowSpace(dl_src=h1_macaddress,nw_dst=h4_ipaddress)
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_1,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        addflowspace_result_2  = main.FlowVisor1.addFlowSpace(dl_src=h4_macaddress,nw_dst=h1_ipaddress)
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_2,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress)
        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress)
    
        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress, tp_dst='22')
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_3,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        addflowspace_result_4 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress,tp_dst='22')
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_4,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        addflowspace_result_5 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress,tp_src='22')
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_5,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        addflowspace_result_6 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress,tp_src='22')
        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_6,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
    
        main.log.info("Showing the flowSpace USING 'listFlowSpace'")
        listflowspace_result     = main.FlowVisor1.listFlowSpace()
    
        main.step("Verifying hosts reachability through ICMP traffic and Connectivity through SSH service")
        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
    
        ssh_result = main.Mininet1.verifySSH(user_name=main.params['CASE1']['destination_username'],ip_address=main.params['CASE1']['destination_host'], pwd=main.params['CASE1']['destination_password'], port=main.params['CASE1']['destination_port'])
        utilities.assert_equals(expect=main.TRUE,actual=ssh_result,onpass="Failed to connect remote host throgh SSH",onfail="Remote host connected throgh SSH ")
    
    
    
    
    