X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fra%2Fpytest%2Fns%2Fconftest.py;fp=rwlaunchpad%2Fra%2Fpytest%2Fns%2Fconftest.py;h=a2a9434714cbd781ee91846de4b629eb8a1659fa;hb=4870d0ee29789b859931e4e2c73e13dcb29537d5;hp=a1fa4461a40e20669db1dd424fb5b518bf8b2867;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;p=osm%2FSO.git diff --git a/rwlaunchpad/ra/pytest/ns/conftest.py b/rwlaunchpad/ra/pytest/ns/conftest.py index a1fa4461..a2a94347 100644 --- a/rwlaunchpad/ra/pytest/ns/conftest.py +++ b/rwlaunchpad/ra/pytest/ns/conftest.py @@ -22,19 +22,41 @@ import os import tempfile import shutil import subprocess +import random import gi +import rift.auto.descriptor import rift.auto.session -import rift.mano.examples.ping_pong_nsd as ping_pong +import rift.mano.examples.ping_pong_nsd as ping_pong_example import rift.vcs.vcs class PackageError(Exception): pass @pytest.fixture(scope='session', autouse=True) -def cloud_account_name(request): - '''fixture which returns the name used to identify the cloud account''' - return 'cloud-0' +def multidisk_testdata(request, descriptor_images, path_ping_image, path_pong_image): + """fixture which returns test data related to multidisk test""" + + if not request.config.option.multidisk: + return None + + iso_img, qcow2_img = [os.path.basename(image) for image in descriptor_images] + + ping_ = {'vda': ['disk', 'virtio', 5, os.path.basename(path_ping_image), 0], + 'sda': ['cdrom', 'scsi', 5, iso_img, 1], + 'hda': ['disk', 'ide', 5, None, None], + } + + pong_ = {'vda': ['disk', 'virtio', 5, os.path.basename(path_pong_image), 0], + 'hda': ['cdrom', 'ide', 5, iso_img, 1], + 'hdb': ['disk', 'ide', 5, qcow2_img, 2], + } + return ping_, pong_ + +@pytest.fixture(scope='session') +def port_sequencing_intf_positions(): + """fixture which returns a list of ordered positions for pong interfaces related to port sequencing test""" + return random.sample(range(1, 2**32-1), 3) @pytest.fixture(scope='session') def ping_pong_install_dir(): @@ -115,6 +137,11 @@ def image_dirs(): ] return image_dirs +@pytest.fixture(scope='session') +def random_image_name(image_dirs): + """Fixture which returns a random image name""" + return 'image_systemtest_{}.qcow2'.format(random.randint(100, 9999)) + @pytest.fixture(scope='session') def image_paths(image_dirs): ''' Fixture containing a mapping of image names to their path images @@ -147,12 +174,92 @@ def path_pong_image(image_paths): ''' return image_paths["Fedora-x86_64-20-20131211.1-sda-pong.qcow2"] +@pytest.fixture(scope='session') +def rsyslog_userdata(rsyslog_host, rsyslog_port): + ''' Fixture providing rsyslog user data + Arguments: + rsyslog_host - host of the rsyslog process + rsyslog_port - port of the rsyslog process + ''' + if rsyslog_host and rsyslog_port: + return ''' +rsyslog: + - "$ActionForwardDefaultTemplate RSYSLOG_ForwardFormat" + - "*.* @{host}:{port}" + '''.format( + host=rsyslog_host, + port=rsyslog_port, + ) + + return None + +@pytest.fixture(scope='session') +def descriptors_pingpong_vnf_input_params(): + return ping_pong_example.generate_ping_pong_descriptors( + pingcount=1, + nsd_name='pp_input_nsd', + vnfd_input_params=True, + ) + +@pytest.fixture(scope='session') +def packages_pingpong_vnf_input_params(descriptors_pingpong_vnf_input_params): + return rift.auto.descriptor.generate_descriptor_packages(descriptors_pingpong_vnf_input_params) + +@pytest.fixture(scope='session') +def ping_script_userdata(): + userdata = '''#cloud-config +password: fedora +chpasswd: { expire: False } +ssh_pwauth: True +runcmd: + - [ systemctl, daemon-reload ] + - [ systemctl, enable, {{ CI-script-init-data }}.service ] + - [ systemctl, start, --no-block, {{ CI-script-init-data }}.service ] + - [ ifup, eth1 ] +''' + return userdata + +@pytest.fixture(scope='session') +def pong_script_userdata(): + userdata = '''#!/bin/bash +sed 's/^.*PasswordAuthentication.*$/PasswordAuthentication yes/' < /etc/ssh/sshd_config > /etc/ssh/sshd_config +systemctl daemon-reload +systemctl enable {{ CI-script-init-data }}.service +systemctl start --no-block {{ CI-script-init-data }}.service +ifup eth1 +''' + return userdata + +@pytest.fixture(scope='session') +def descriptors_pingpong_script_input_params(ping_script_userdata, pong_script_userdata): + return ping_pong_example.generate_ping_pong_descriptors( + pingcount=1, + nsd_name='pp_script_nsd', + script_input_params=True, + ping_userdata=ping_script_userdata, + pong_userdata=pong_script_userdata, + ) + +@pytest.fixture(scope='session') +def packages_pingpong_script_input_params(descriptors_pingpong_script_input_params): + return rift.auto.descriptor.generate_descriptor_packages(descriptors_pingpong_script_input_params) + class PingPongFactory: - def __init__(self, path_ping_image, path_pong_image, rsyslog_host, rsyslog_port): + def __init__(self, path_ping_image, path_pong_image, static_ip, vnf_dependencies, rsyslog_userdata, port_security, metadata_vdud, multidisk, ipv6, port_sequencing, service_primitive): + self.path_ping_image = path_ping_image self.path_pong_image = path_pong_image - self.rsyslog_host = rsyslog_host - self.rsyslog_port = rsyslog_port + self.rsyslog_userdata = rsyslog_userdata + self.static_ip = static_ip + self.service_primitive = service_primitive + self.use_vca_conf = vnf_dependencies + self.port_security = port_security + self.port_sequencing = port_sequencing + self.metadata_vdud = metadata_vdud + self.multidisk = multidisk + self.ipv6 = ipv6 + if not port_security: + self.port_security = None # Not to disable port security if its not specific to --port-security feature. def generate_descriptors(self): '''Return a new set of ping and pong descriptors @@ -167,32 +274,29 @@ class PingPongFactory: ping_md5sum = md5sum(self.path_ping_image) pong_md5sum = md5sum(self.path_pong_image) - ex_userdata = None - if self.rsyslog_host and self.rsyslog_port: - ex_userdata = ''' -rsyslog: - - "$ActionForwardDefaultTemplate RSYSLOG_ForwardFormat" - - "*.* @{host}:{port}" - '''.format( - host=self.rsyslog_host, - port=self.rsyslog_port, - ) - - descriptors = ping_pong.generate_ping_pong_descriptors( + descriptors = ping_pong_example.generate_ping_pong_descriptors( pingcount=1, ping_md5sum=ping_md5sum, pong_md5sum=pong_md5sum, - ex_ping_userdata=ex_userdata, - ex_pong_userdata=ex_userdata, + ex_ping_userdata=self.rsyslog_userdata, + ex_pong_userdata=self.rsyslog_userdata, + use_static_ip=self.static_ip, + port_security=self.port_security, + explicit_port_seq=self.port_sequencing, + metadata_vdud=self.metadata_vdud, + use_vca_conf=self.use_vca_conf, + multidisk=self.multidisk, + use_ipv6=self.ipv6, + primitive_test=self.service_primitive, ) return descriptors @pytest.fixture(scope='session') -def ping_pong_factory(path_ping_image, path_pong_image, rsyslog_host, rsyslog_port): +def ping_pong_factory(path_ping_image, path_pong_image, static_ip, vnf_dependencies, rsyslog_userdata, port_security, metadata_vdud, multidisk_testdata, ipv6, port_sequencing, service_primitive): '''Fixture returns a factory capable of generating ping and pong descriptors ''' - return PingPongFactory(path_ping_image, path_pong_image, rsyslog_host, rsyslog_port) + return PingPongFactory(path_ping_image, path_pong_image, static_ip, vnf_dependencies, rsyslog_userdata, port_security, metadata_vdud, multidisk_testdata, ipv6, port_sequencing, service_primitive) @pytest.fixture(scope='session') def ping_pong_records(ping_pong_factory): @@ -202,7 +306,7 @@ def ping_pong_records(ping_pong_factory): @pytest.fixture(scope='session') -def descriptors(request, ping_pong_records): +def descriptors(request, ping_pong_records, random_image_name): def pingpong_descriptors(with_images=True): """Generated the VNFDs & NSD files for pingpong NS. @@ -232,8 +336,7 @@ def descriptors(request, ping_pong_records): 'images/Fedora-x86_64-20-20131211.1-sda-pong.qcow2') for descriptor in [ping_vnfd, pong_vnfd, ping_pong_nsd]: - descriptor.write_to_file(output_format='xml', outdir=tmpdir) - + descriptor.write_to_file(output_format='yaml', outdir=tmpdir) ping_img_path = os.path.join(tmpdir, "{}/images/".format(ping_vnfd.name)) pong_img_path = os.path.join(tmpdir, "{}/images/".format(pong_vnfd.name)) @@ -243,9 +346,13 @@ def descriptors(request, ping_pong_records): shutil.copy(ping_img, ping_img_path) shutil.copy(pong_img, pong_img_path) + if request.config.option.upload_images_multiple_accounts: + with open(os.path.join(ping_img_path, random_image_name), 'wb') as image_bin_file: + image_bin_file.seek(1024*1024*512) # image file of size 512 MB + image_bin_file.write(b'0') + for dir_name in [ping_vnfd.name, pong_vnfd.name, ping_pong_nsd.name]: subprocess.call([ - "sh", "{rift_install}/usr/rift/toolchain/cmake/bin/generate_descriptor_pkg.sh".format(rift_install=os.environ['RIFT_INSTALL']), tmpdir, dir_name]) @@ -266,8 +373,43 @@ def descriptors(request, ping_pong_records): return files + def l2portchain_descriptors(): + """L2 port chaining packages""" + files = [ + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_dpi_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_firewall_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_nat_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_pgw_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_router_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_sff_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/vnffg_demo_nsd/vnffg_l2portchain_demo_nsd.tar.gz") + ] + + return files + + def metadata_vdud_cfgfile_descriptors(): + """Metadata-vdud feature related packages""" + files = [ + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/cfgfile/cirros_cfgfile_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/cfgfile/fedora_cfgfile_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/cfgfile/ubuntu_cfgfile_vnfd.tar.gz"), + os.path.join(os.getenv('RIFT_BUILD'), "modules/ext/vnfs/src/ext_vnfs-build/cfgfile/cfgfile_nsd.tar.gz") + ] + + return files + + if request.config.option.vnf_onboard_delete: + return haproxy_descriptors() + l2portchain_descriptors() + list(pingpong_descriptors()) + if request.config.option.multiple_ns_instantiate: + return haproxy_descriptors() + metadata_vdud_cfgfile_descriptors() + list(pingpong_descriptors()) + if request.config.option.l2_port_chaining: + return l2portchain_descriptors() + if request.config.option.metadata_vdud_cfgfile: + return metadata_vdud_cfgfile_descriptors() if request.config.option.network_service == "pingpong": return pingpong_descriptors() + elif request.config.option.ha_multiple_failovers: + return {'pingpong': pingpong_descriptors(), 'haproxy': haproxy_descriptors(), 'vdud_cfgfile': metadata_vdud_cfgfile_descriptors()} elif request.config.option.network_service == "pingpong_noimg": return pingpong_descriptors(with_images=False) elif request.config.option.network_service == "haproxy": @@ -286,7 +428,37 @@ def descriptor_images(request): return images + def l2portchain_images(): + """HAProxy images.""" + images = [os.path.join(os.getenv('RIFT_ROOT'), "images/ubuntu_trusty_1404.qcow2")] + return images + + def multidisk_images(): + images = [ + os.path.join(os.getenv('RIFT_ROOT'), 'images/ubuntu-16.04-mini-64.iso'), + os.path.join(os.getenv('RIFT_ROOT'), "images/ubuntu_trusty_1404.qcow2"), + ] + return images + + def metadata_vdud_cfgfile_images(): + """Metadata-vdud feature related images.""" + images = [ + os.path.join(os.getenv('RIFT_ROOT'), "images/cirros-0.3.4-x86_64-disk.img"), + os.path.join(os.getenv('RIFT_ROOT'), "images/Fedora-x86_64-20-20131211.1-sda.qcow2"), + os.path.join(os.getenv('RIFT_ROOT'), "images/UbuntuXenial") + ] + + return images + + if request.config.option.l2_port_chaining: + return l2portchain_images() + if request.config.option.multidisk: + return multidisk_images() + if request.config.option.metadata_vdud_cfgfile: + return metadata_vdud_cfgfile_images() if request.config.option.network_service == "haproxy": return haproxy_images() + if request.config.option.multiple_ns_instantiate: + return haproxy_images() + metadata_vdud_cfgfile_images() return []