+ engine.get_autorization()
+ temp_dir = os.path.dirname(os.path.abspath(__file__)) + "/temp/"
+ if not os.path.exists(temp_dir):
+ os.makedirs(temp_dir)
+
+ # download files
+ for filename in (self.vnfd_filename, self.nsd_filename):
+ filename_path = temp_dir + filename
+ if not os.path.exists(filename_path):
+ with open(filename_path, "wb") as file:
+ response = requests.get(self.descriptor_url + filename)
+ if response.status_code >= 300:
+ raise TestException("Error downloading descriptor from '{}': {}".format(
+ self.descriptor_url + filename, response.status_code))
+ file.write(response.content)
+
+ vnfd_filename_path = temp_dir + self.vnfd_filename
+ nsd_filename_path = temp_dir + self.nsd_filename
+
+ # vnfd CREATE AND UPLOAD in one step:
+ test_name = "DESCRIPTOR{}".format(self.step)
+ engine.test(test_name, "Onboard VNFD in one step", "POST",
+ "/vnfpkgm/v1/vnf_packages_content", headers_zip_yaml, "@b" + vnfd_filename_path, 201,
+ {"Location": "/vnfpkgm/v1/vnf_packages_content/", "Content-Type": "application/yaml"}, "yaml")
+ self.vnfd_id = engine.test_ids["last_id"]
+ self.step += 1
+
+ # get vnfd descriptor
+ engine.test("DESCRIPTOR" + str(self.step), "Get VNFD descriptor", "GET",
+ "/vnfpkgm/v1/vnf_packages/{}".format(self.vnfd_id), headers_yaml, None, 200, r_header_yaml, "yaml")
+ self.step += 1
+
+ # get vnfd file descriptor
+ engine.test("DESCRIPTOR" + str(self.step), "Get VNFD file descriptor", "GET",
+ "/vnfpkgm/v1/vnf_packages/{}/vnfd".format(self.vnfd_id), headers_text, None, 200,
+ r_header_text, "text", temp_dir+"vnfd-yaml")
+ self.step += 1
+ # TODO compare files: diff vnfd-yaml hackfest_3charmed_vnfd/hackfest_3charmed_vnfd.yaml
+
+ # get vnfd zip file package
+ engine.test("DESCRIPTOR" + str(self.step), "Get VNFD zip package", "GET",
+ "/vnfpkgm/v1/vnf_packages/{}/package_content".format(self.vnfd_id), headers_zip, None, 200,
+ r_header_zip, "zip", temp_dir+"vnfd-zip")
+ self.step += 1
+ # TODO compare files: diff vnfd-zip hackfest_3charmed_vnfd.tar.gz
+
+ # get vnfd artifact
+ engine.test("DESCRIPTOR" + str(self.step), "Get VNFD artifact package", "GET",
+ "/vnfpkgm/v1/vnf_packages/{}/artifacts/icons/osm.png".format(self.vnfd_id), headers_zip, None, 200,
+ r_header_octect, "octet-string", temp_dir+"vnfd-icon")
+ self.step += 1
+ # TODO compare files: diff vnfd-icon hackfest_3charmed_vnfd/icons/osm.png
+
+ # nsd CREATE AND UPLOAD in one step:
+ test_name = "DESCRIPTOR{}".format(self.step)
+ engine.test(test_name, "Onboard NSD in one step", "POST",
+ "/nsd/v1/ns_descriptors_content", headers_zip_yaml, "@b" + nsd_filename_path, 201,
+ {"Location": "/nsd/v1/ns_descriptors_content/", "Content-Type": "application/yaml"}, "yaml")
+ self.nsd_id = engine.test_ids["last_id"]
+ self.step += 1
+
+ # get nsd descriptor
+ engine.test("DESCRIPTOR" + str(self.step), "Get NSD descriptor", "GET",
+ "/nsd/v1/ns_descriptors/{}".format(self.nsd_id), headers_yaml, None, 200, r_header_yaml, "yaml")
+ self.step += 1
+
+ # get nsd file descriptor
+ engine.test("DESCRIPTOR" + str(self.step), "Get NSD file descriptor", "GET",
+ "/nsd/v1/ns_descriptors/{}/nsd".format(self.nsd_id), headers_text, None, 200,
+ r_header_text, "text", temp_dir+"nsd-yaml")
+ self.step += 1
+ # TODO compare files: diff nsd-yaml hackfest_3charmed_nsd/hackfest_3charmed_nsd.yaml
+
+ # get nsd zip file package
+ engine.test("DESCRIPTOR" + str(self.step), "Get NSD zip package", "GET",
+ "/nsd/v1/ns_descriptors/{}/nsd_content".format(self.nsd_id), headers_zip, None, 200,
+ r_header_zip, "zip", temp_dir+"nsd-zip")
+ self.step += 1
+ # TODO compare files: diff nsd-zip hackfest_3charmed_nsd.tar.gz
+
+ # get nsd artifact
+ engine.test("DESCRIPTOR" + str(self.step), "Get NSD artifact package", "GET",
+ "/nsd/v1/ns_descriptors/{}/artifacts/icons/osm.png".format(self.nsd_id), headers_zip, None, 200,
+ r_header_octect, "octet-string", temp_dir+"nsd-icon")
+ self.step += 1
+ # TODO compare files: diff nsd-icon hackfest_3charmed_nsd/icons/osm.png
+
+ # vnfd DELETE
+ test_rest.test("DESCRIPTOR" + str(self.step), "Delete VNFD conflict", "DELETE",
+ "/vnfpkgm/v1/vnf_packages/{}".format(self.vnfd_id), headers_yaml, None, 409, None, None)
+ self.step += 1
+
+ test_rest.test("DESCRIPTOR" + str(self.step), "Delete VNFD force", "DELETE",
+ "/vnfpkgm/v1/vnf_packages/{}?FORCE=TRUE".format(self.vnfd_id), headers_yaml, None, 204, None, 0)
+ self.step += 1
+
+ # nsd DELETE
+ test_rest.test("DESCRIPTOR" + str(self.step), "Delete NSD", "DELETE",
+ "/nsd/v1/ns_descriptors/{}".format(self.nsd_id), headers_yaml, None, 204, None, 0)
+ self.step += 1
+
+
+class TestNetSliceTemplates:
+ description = "Upload a NST to OSM"
+
+ def __init__(self):
+ self.nst_filenames = ("@./cirros_slice/cirros_slice.yaml")
+
+ def run(self, engine, test_osm, manual_check, test_params=None):
+ # nst CREATE
+ engine.get_autorization()
+ r = engine.test("NST1", "Onboard NST", "POST", "/nst/v1/netslice_templates_content", headers_yaml,
+ self.nst_filenames,
+ 201, {"Location": "/nst/v1/netslice_templates_content", "Content-Type": "application/yaml"},
+ "yaml")
+ location = r.headers["Location"]
+ nst_id = location[location.rfind("/")+1:]
+
+ # nstd SHOW OSM format
+ r = engine.test("NST2", "Show NSTD OSM format", "GET",
+ "/nst/v1/netslice_templates/{}".format(nst_id), headers_json, None,
+ 200, r_header_json, "json")
+
+ # nstd DELETE
+ r = engine.test("NST3", "Delete NSTD", "DELETE",
+ "/nst/v1/netslice_templates/{}".format(nst_id), headers_json, None,
+ 204, None, 0)
+
+
+class TestNetSliceInstances:
+ description = "Upload a NST to OSM"
+
+ def __init__(self):
+ self.nst_filenames = ("@./cirros_slice/cirros_slice.yaml")
+
+ def run(self, engine, test_osm, manual_check, test_params=None):
+ # nst CREATE
+ engine.get_autorization()
+ r = engine.test("NST1", "Onboard NST", "POST", "/nst/v1/netslice_templates_content", headers_yaml,
+ self.nst_filenames, 201,
+ {"Location": "/nst/v1/netslice_templates_content", "Content-Type": "application/yaml"}, "yaml")
+ location = r.headers["Location"]
+ nst_id = location[location.rfind("/")+1:]
+
+ # nsi CREATE
+ if test_osm:
+ self.vim_id = engine.get_create_vim(test_osm)
+ else:
+ r = engine.test("VIM1", "Get available VIM", "GET", "/admin/v1/vim_accounts",
+ headers_json, None, None, r_header_json, "json")
+ r_json = json.loads(r.text)
+ vim = r_json[0]
+ self.vim_id = vim["_id"]
+
+ ns_data = {"nsiDescription": "default description", "nsiName": "my_slice", "nstdId": "cirros_nst",
+ "vimAccountId": self.vim_id}
+ ns_data_text = yaml.safe_dump(ns_data, default_flow_style=True, width=256)
+
+ r = engine.test("NSI1", "Onboard NSI", "POST", "/nsilcm/v1/netslice_instances_content", headers_yaml,
+ ns_data_text, 201,
+ {"Location": "/nsilcm/v1/netslice_instances_content", "Content-Type":
+ "application/yaml"}, "yaml")
+ location = r.headers["Location"]
+ nsi_id = location[location.rfind("/")+1:]
+
+ # TODO: Improve the wait with a polling if NSI was deployed
+ wait = 120
+ sleep(wait)
+
+ # Check deployment
+ r = engine.test("NSI2", "Wait until NSI is deployed", "GET",
+ "/nsilcm/v1/netslice_instances_content/{}".format(nsi_id), headers_json, None,
+ 200, r_header_json, "json")
+
+ # nsi DELETE
+ r = engine.test("NSI3", "Delete NSI", "DELETE",
+ "/nsilcm/v1/netslice_instances_content/{}".format(nsi_id), headers_json, None,
+ 202, r_header_json, "json")
+
+ sleep(60)
+
+ # nstd DELETE
+ r = engine.test("NST2", "Delete NSTD", "DELETE",
+ "/nst/v1/netslice_templates/{}".format(nst_id), headers_json, None,
+ 204, None, 0)