Changes to cord-test.py to include new options to run, build and list tests.
So to execute test cases, use:
cord-test.py run -h
To build all test container images, use:
cord-test.py build all
To list all test cases, use:
cord-test.py list
diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index d77a2a5..525f8fe 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -36,8 +36,10 @@
('/var/run/docker.sock', '/var/run/docker.sock')
)
basename = 'cord-tester'
+ IMAGE = 'cord-test/nose'
+ ALL_TESTS = ('tls', 'dhcp', 'igmp', 'subscriber', 'vrouter', 'flows')
- def __init__(self, ctlr_ip = None, image = 'cord-test/nose', tag = 'latest',
+ def __init__(self, ctlr_ip = None, image = IMAGE, tag = 'latest',
env = None, rm = False, update = False):
self.ctlr_ip = ctlr_ip
self.rm = rm
@@ -207,7 +209,7 @@
##default onos/radius/test container images and names
onos_image_default='onosproject/onos:latest'
-nose_image_default='cord-test/nose:latest'
+nose_image_default= '{}:latest'.format(CordTester.IMAGE)
test_type_default='dhcp'
onos_app_version = '1.0-SNAPSHOT'
cord_tester_base = os.path.dirname(os.path.realpath(__file__))
@@ -216,22 +218,24 @@
def runTest(args):
#Start the cord test tcp server
test_server = cord_test_server_start()
- tests = args.test_type.split('-')
+ if args.test_type.lower() == 'all':
+ tests = CordTester.ALL_TESTS
+ args.radius = True
+ args.quagga = True
+ else:
+ tests = args.test_type.lower().split('-')
+
onos_cnt = {'tag':'latest'}
- nose_cnt = {'image': 'cord-test/nose','tag': 'latest'}
+ nose_cnt = {'image': CordTester.IMAGE, 'tag': 'latest'}
+ update_map = { 'quagga' : False, 'test' : False, 'radius' : False }
+ update_map[args.update.lower()] = True
+
+ if args.update.lower() == 'all':
+ for c in update_map.keys():
+ update_map[c] = True
+
radius_ip = None
quagga_ip = None
- if args.cleanup:
- cleanup_container = args.cleanup
- if cleanup_container.find(':') < 0:
- cleanup_container += ':latest'
- print('Cleaning up containers %s' %cleanup_container)
- Container.cleanup(cleanup_container)
- sys.exit(0)
-
- if args.list:
- CordTester.list_tests(tests)
- sys.exit(0)
#don't spawn onos if the user has specified external test controller with test interface config
if args.test_controller:
@@ -251,7 +255,7 @@
##Start Radius container if specified
if args.radius == True:
- radius = Radius()
+ radius = Radius( update = update_map['radius'])
radius_ip = radius.ip()
print('Radius server running with IP %s' %radius_ip)
else:
@@ -263,7 +267,7 @@
if args.quagga == True:
#Start quagga. Builds container if required
- quagga = Quagga()
+ quagga = Quagga(update = update_map['quagga'])
quagga_ip = quagga.ip()
test_cnt_env = { 'ONOS_CONTROLLER_IP' : onos_ip,
@@ -277,28 +281,69 @@
test_cnt = CordTester(ctlr_ip = onos_ip, image = nose_cnt['image'], tag = nose_cnt['tag'],
env = test_cnt_env,
rm = False if args.keep else True,
- update = args.update)
+ update = update_map['test'])
if args.start_switch or not args.olt:
test_cnt.start_switch()
test_cnt.setup_intfs()
test_cnt.run_tests(tests)
cord_test_server_stop(test_server)
+def cleanupTests(args):
+ test_container = '{}:latest'.format(CordTester.IMAGE)
+ print('Cleaning up Test containers ...')
+ Container.cleanup(test_container)
+
+def listTests(args):
+ if args.test == 'all':
+ tests = CordTester.ALL_TESTS
+ else:
+ tests = args.test.lower().split('-')
+ CordTester.list_tests(tests)
+
+def buildImages(args):
+ if args.image == 'all' or args.image == 'quagga':
+ Quagga.build_image(Quagga.IMAGE)
+
+ if args.image == 'all' or args.image == 'radius':
+ Radius.build_image(Radius.IMAGE)
+
+ if args.image == 'all' or args.image == 'test':
+ CordTester.build_image(CordTester.IMAGE)
+
if __name__ == '__main__':
parser = ArgumentParser(description='Cord Tester')
- parser.add_argument('-t', '--test-type', default=test_type_default, type=str)
- parser.add_argument('-o', '--onos', default=onos_image_default, type=str, help='ONOS container image')
- parser.add_argument('-r', '--radius',action='store_true', help='Start Radius service')
- parser.add_argument('-q', '--quagga',action='store_true',help='Provision quagga container for vrouter')
- parser.add_argument('-a', '--app', default=onos_app_file, type=str, help='Cord ONOS app filename')
- parser.add_argument('-p', '--olt', action='store_true', help='Use OLT config')
- parser.add_argument('-l', '--list', action='store_true', help='List test cases')
- parser.add_argument('-e', '--test-controller', default='', type=str, help='External test controller ip for Onos and/or radius server.'
+ subparser = parser.add_subparsers()
+ parser_run = subparser.add_parser('run', help='Run cord tester')
+ parser_run.add_argument('-t', '--test-type', default=test_type_default, help='Specify test type or test case to run')
+ parser_run.add_argument('-o', '--onos', default=onos_image_default, type=str, help='ONOS container image')
+ parser_run.add_argument('-r', '--radius',action='store_true', help='Start Radius service')
+ parser_run.add_argument('-q', '--quagga',action='store_true',help='Provision quagga container for vrouter')
+ parser_run.add_argument('-a', '--app', default=onos_app_file, type=str, help='Cord ONOS app filename')
+ parser_run.add_argument('-p', '--olt', action='store_true', help='Use OLT config')
+ parser_run.add_argument('-e', '--test-controller', default='', type=str, help='External test controller ip for Onos and/or radius server. '
'Eg: 10.0.0.2/10.0.0.3 to specify ONOS and Radius ip to connect')
- parser.add_argument('-c', '--cleanup', default='', type=str, help='Cleanup test containers')
- parser.add_argument('-k', '--keep', action='store_true', help='Keep test container after tests')
- parser.add_argument('-s', '--start-switch', action='store_true', help='Start OVS when running under OLT config')
- parser.add_argument('-u', '--update', action='store_true', help='Update test container image')
- parser.set_defaults(func=runTest)
+ parser_run.add_argument('-k', '--keep', action='store_true', help='Keep test container after tests')
+ parser_run.add_argument('-s', '--start-switch', action='store_true', help='Start OVS when running under OLT config')
+ parser_run.add_argument('-u', '--update', default='none', choices=['test','quagga','radius', 'all'], type=str, help='Update cord tester container images. '
+ 'Eg: --update=quagga to rebuild quagga image.'
+ ' --update=radius to rebuild radius server image.'
+ ' --update=test to rebuild cord test image.(Default)'
+ ' --update=all to rebuild all cord tester images.')
+ parser_run.set_defaults(func=runTest)
+
+ parser_list = subparser.add_parser('list', help='List test cases')
+ parser_list.add_argument('-t', '--test', default='all', help='Specify test type to list test cases. '
+ 'Eg: -t tls to list tls test cases.'
+ ' -t tls-dhcp-vrouter to list tls,dhcp and vrouter test cases.'
+ ' -t all to list all test cases.')
+ parser_list.set_defaults(func=listTests)
+
+ parser_build = subparser.add_parser('build', help='Build cord test container images')
+ parser_build.add_argument('image', choices=['quagga', 'radius', 'test', 'all'])
+ parser_build.set_defaults(func=buildImages)
+
+ parser_cleanup = subparser.add_parser('cleanup', help='Cleanup test containers')
+ parser_cleanup.set_defaults(func=cleanupTests)
+
args = parser.parse_args()
args.func(args)
diff --git a/src/test/setup/eval.sh b/src/test/setup/eval.sh
index f37b0c4..51513c9 100755
--- a/src/test/setup/eval.sh
+++ b/src/test/setup/eval.sh
@@ -3,16 +3,16 @@
if [ ! -f $cord_tester ]; then
cord_tester="$HOME/cord-tester/src/test/setup/cord-test.py"
fi
-ONOS_IGMP="onosproject/onos:1.5"
+echo "Building all cord-tester images."
+$cord_tester build all
docker kill cord-onos || true
docker kill cord-quagga || true
+docker kill cord-radius || true
echo "Running TLS authentication test"
-$cord_tester -r -t tls
+$cord_tester run -r -t tls
echo "Running DHCP request test"
-$cord_tester -q -t dhcp
-docker kill cord-onos || true
+$cord_tester run -t dhcp
echo "Running IGMP join verify test"
-$cord_tester -q -o $ONOS_IGMP -t igmp:igmp_exchange.test_igmp_join_verify_traffic
-docker kill cord-onos || true
+$cord_tester run -t igmp:igmp_exchange.test_igmp_join_verify_traffic
echo "Running VROUTER test with 5 routes"
-$cord_tester -q -t vrouter:vrouter_exchange.test_vrouter_1
+$cord_tester run -q -t vrouter:vrouter_exchange.test_vrouter_1
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index c04f219..de4ec2f 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -199,8 +199,9 @@
host_config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'setup/onos-config')
guest_config_dir = '/root/onos/config'
host_guest_map = ( (host_config_dir, guest_config_dir), )
+ NAME = 'cord-onos'
- def __init__(self, name = 'cord-onos', image = 'onosproject/onos', tag = 'latest',
+ def __init__(self, name = NAME, image = 'onosproject/onos', tag = 'latest',
boot_delay = 60, restart = False, network_cfg = None):
if restart is True:
##Find the right image to restart
@@ -245,10 +246,13 @@
host_guest_map = ( (host_db_dir, guest_db_dir),
(host_config_dir, guest_config_dir)
)
- def __init__(self, name = 'cord-radius', image = 'cord-test/radius', tag = 'latest',
- boot_delay = 10, restart = False):
+ IMAGE = 'cord-test/radius'
+ NAME = 'cord-radius'
+
+ def __init__(self, name = NAME, image = IMAGE, tag = 'latest',
+ boot_delay = 10, restart = False, update = False):
super(Radius, self).__init__(name, image, tag = tag, command = self.start_command)
- if not self.img_exists():
+ if update is True or not self.img_exists():
self.build_image(image)
if restart is True and self.exists():
self.kill()
@@ -289,11 +293,13 @@
guest_quagga_config = '/root/config'
quagga_config_file = os.path.join(guest_quagga_config, 'testrib.conf')
host_guest_map = ( (host_quagga_config, guest_quagga_config), )
-
- def __init__(self, name = 'cord-quagga', image = 'cord-test/quagga', tag = 'latest',
- boot_delay = 15, restart = False, config_file = quagga_config_file):
+ IMAGE = 'cord-test/quagga'
+ NAME = 'cord-quagga'
+
+ def __init__(self, name = NAME, image = IMAGE, tag = 'latest',
+ boot_delay = 15, restart = False, config_file = quagga_config_file, update = False):
super(Quagga, self).__init__(name, image, tag = tag, quagga_config = self.quagga_config)
- if not self.img_exists():
+ if update is True or not self.img_exists():
self.build_image(image)
if restart is True and self.exists():
self.kill()