Hi,

I am newbie to Python,

I am trying to use unittest and python. My python script is like this:

#! /usr/bin/env python
__author__ = 'Milson Munakami'
__revision__ = '0.0.2'

import json
import urllib
import httplib
from scapy.all import *

import unittest

import os, sys, socket, struct, select, time 
from threading import Thread

import logging
import traceback

from mininet.net import Mininet
from mininet.node import OVSSwitch, OVSKernelSwitch, Controller, 
RemoteController
from mininet.log import setLogLevel, info
from mininet.cli import CLI

class testFirewallS1( unittest.TestCase ):

        #I am trying to set net variable to global
        global net
        ######################

        def setUp(self):
                self.controllerIp="127.0.0.1"
                self.switch = "00:00:00:00:00:00:00:01"
                self.destinationIp = "10.0.0.1"
                self.startTime_ = time.time()
                self.failed = False
                self.reportStatus_ = True
                self.name_ = "Firewall"
                self.log = logging.getLogger("unittest")
                self.CreateNet()
                self.SetPrecondition()          

        def CreateNet(self):
                "Create an empty network and add nodes to it."
                net = Mininet( controller=RemoteController )

                info( '*** Adding controller\n' )
                net.addController( 'c0' , controller=RemoteController,ip= 
"127.0.0.1", port=6633)

                info( '*** Adding hosts\n' )
                h1 = net.addHost( 'h1', ip='10.0.0.1' )
                h2 = net.addHost( 'h2', ip='10.0.0.2' )
                h3 = net.addHost( 'h3', ip='10.0.0.3' )

                info( '*** Adding switch\n' )
                s1 = net.addSwitch( 's1' )

                info( '*** Creating links\n' )
                net.addLink( h1, s1 )
                net.addLink( h2, s1 )
                net.addLink( h3, s1 )

                info( '*** Starting network\n')
                net.start()

        def tearDown(self):
                if self.failed:
                        return
                duration = time.time() - self.startTime_
                self.cleanup(True)
                if self.reportStatus_:
                        self.log.info("=== Test %s completed normally (%d 
sec)", self.name_, duration)

        def cleanup(self, success):
                sys.excepthook = sys.__excepthook__
                self.SetFinalcondition()
                try:
                        return
                except NameError:
                        self.log.error("Exception hit during cleanup, 
bypassing:\n%s\n\n" % traceback.format_exc())
                        pass
                else:

                        fail("Expected a NameError")    
                                
        def StatusFirewall(self):
                command = "http://%s:8080/wm/firewall/module/status/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                parsedResult = json.loads(x)
                return parsedResult['result']
        
        def CountFirewallRules(self):
                command = "http://%s:8080/wm/firewall/rules/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                return x
                
        def CountFlowRules(self):
                command = "http://%s:8080/wm/core/switch/%s/flow/json"; % 
(self.controllerIp, self.switch)
                x = urllib.urlopen(command).read()
                parsedResult = json.loads(x)
                content = parsedResult['00:00:00:00:00:00:00:01']
                if content is None:
                        return "[]"
                else:                   
                        return str(content)

        def SetPrecondition(self):
                command = "http://%s:8080/wm/firewall/module/enable/json"; % 
self.controllerIp
                urllib.urlopen(command).read()
        
                # cleanup all Firewall rules
                command = "http://%s:8080/wm/firewall/rules/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                parsedResult = json.loads(x)
                for i in range(len(parsedResult)):
                        params = "{\"ruleid\":\"%s\"}" % 
parsedResult[i]['ruleid']
                        command = "/wm/firewall/rules/json"
                        url = "%s:8080" % self.controllerIp
                        connection =  httplib.HTTPConnection(url)
                        connection.request("DELETE", command, params)
                        connection.getresponse().read()

                # sleep for REST command to get processed to avoid racing
                time.sleep(5)

        def SetFinalcondition(self):
                command = "http://%s:8080/wm/firewall/module/disable/json"; % 
self.controllerIp
                urllib.urlopen(command).read()
        
                # cleanup all Firewall rules
                command = "http://%s:8080/wm/firewall/rules/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                parsedResult = json.loads(x)
                for i in range(len(parsedResult)):
                        params = "{\"ruleid\":\"%s\"}" % 
parsedResult[i]['ruleid']
                        command = "/wm/firewall/rules/json"
                        url = "%s:8080" % self.controllerIp
                        connection =  httplib.HTTPConnection(url)
                        connection.request("DELETE", command, params)
                        connection.getresponse().read()

                # sleep for REST command to get processed to avoid racing
                time.sleep(5)

                info( '*** Stopping network' )
                net.stop()

        #Precondition Test
        def testPreConditionFirewall(self):
                self.assertTrue("enabled" in self.StatusFirewall())     
                self.assertTrue("[]" in self.CountFirewallRules())
                self.assertEqual("[]",self.CountFlowRules(), "should be empty") 
                
                
        #7
        def testCreateFlow(self):               

                info( '*** Testing network connecivity\n')      
                net.pingAll()

                #Using Scapy
                #send(IP(dst="10.0.0.3")/ICMP()/"Hello World")  

                #info( '*** Running CLI\n' )
                #CLI( net )             
                
                # Post Conditions Validation
                self.assertTrue("enabled" in self.StatusFirewall())     
                self.assertTrue("[]" in self.CountFirewallRules())
                self.assertNotEqual("[]",self.CountFlowRules(), "should not be 
empty rules cause it is added from Firewall with Action = []")   
        #8
        def testCountFlow(self):
                command = "http://%s:8080/wm/core/switch/all/flow/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                self.assertEqual("[]",self.CountFlowRules(), "should be empty") 
                
                # Post Conditions Validation
                self.assertTrue("enabled" in self.StatusFirewall())     
                self.assertTrue("[]" in self.CountFirewallRules())
                self.assertEqual("[]",self.CountFlowRules(), "should be empty") 
        #10
        def testDeleteFlow(self):
                # sleep for REST command to get processed to avoid racing
                time.sleep(5)
                
                command = "http://%s:8080/wm/core/switch/all/flow/json"; % 
self.controllerIp
                x = urllib.urlopen(command).read()
                self.assertEqual("[]",self.CountFlowRules(), "should be empty") 
                
                # Post Conditions Validation
                self.assertTrue("enabled" in self.StatusFirewall())     
                self.assertTrue("[]" in self.CountFirewallRules())
                self.assertEqual("[]",self.CountFlowRules(), "should be empty") 
                
def suite():

        suite = unittest.TestSuite()

        suite.addTest(unittest.makeSuite(testFirewallS1))

        return suite

if __name__ == '__main__':
                logging.basicConfig(filename='/tmp/testfirewall.log', 
level=logging.DEBUG, 
                    format='%(asctime)s %(levelname)s %(name)s %(message)s')
                logger=logging.getLogger(__name__)      

                suiteFew = unittest.TestSuite()
                
                # Preconditions:        
                suiteFew.addTest(testFirewallS1("testPreConditionFirewall"))    
                
                
                
                # 7. Add one Flow Entry
                suiteFew.addTest(testFirewallS1("testCreateFlow"))      
                        
                # 8. Count Flow rules - empty
                suiteFew.addTest(testFirewallS1("testCountFlow"))
                
                # 9. Update a Flow Rule - Not Implemented due to Controller's 
Constraint

                # 10. wait till the time-stamp period to validate the flow is 
deleted with that time.
                suiteFew.addTest(testFirewallS1("testDeleteFlow"))

                #Testing the Test Cases Begins Here
                unittest.TextTestRunner(verbosity=2).run(suiteFew)

                #unittest.main()
                #unittest.TextTestRunner(verbosity=2).run(suite())
                
                        
I tired to set a globla net variable inside the class and tring to access it 
from another methods like from def SetFinalcondition(self): and def 
testCreateFlow(self): but the error says:\


ERROR: testPreConditionFirewall (__main__.testFirewallS1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mm.py", line 68, in tearDown
    self.cleanup(True)
  File "mm.py", line 74, in cleanup
    self.SetFinalcondition()
  File "mm.py", line 144, in SetFinalcondition
    net.stop()
NameError: global name 'net' is not defined

======================================================================
ERROR: testCreateFlow (__main__.testFirewallS1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mm.py", line 156, in testCreateFlow
    net.pingAll()
NameError: global name 'net' is not defined

======================================================================
ERROR: testCreateFlow (__main__.testFirewallS1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mm.py", line 68, in tearDown
    self.cleanup(True)
  File "mm.py", line 74, in cleanup
    self.SetFinalcondition()
  File "mm.py", line 144, in SetFinalcondition
    net.stop()
NameError: global name 'net' is not defined

======================================================================
ERROR: testCountFlow (__main__.testFirewallS1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mm.py", line 68, in tearDown
    self.cleanup(True)
  File "mm.py", line 74, in cleanup
    self.SetFinalcondition()
  File "mm.py", line 144, in SetFinalcondition
    net.stop()
NameError: global name 'net' is not defined

======================================================================
ERROR: testDeleteFlow (__main__.testFirewallS1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "mm.py", line 68, in tearDown
    self.cleanup(True)
  File "mm.py", line 74, in cleanup
    self.SetFinalcondition()
  File "mm.py", line 144, in SetFinalcondition
    net.stop()
NameError: global name 'net' is not defined


How to fix it!
Thanks for any help
- Milson
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to