3 # Copyright (c) 2016 Orange and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
16 import functest.core.vnf_base as vnf_base
17 import functest.utils.functest_logger as ft_logger
18 import functest.utils.functest_utils as ft_utils
19 from functest.utils.constants import CONST
22 class ImsVnf(vnf_base.VnfOnBoardingBase):
24 def __init__(self, project='functest', case='', repo='', cmd=''):
25 super(ImsVnf, self).__init__(project, case, repo, cmd)
26 self.logger = ft_logger.Logger("vIMS").getLogger()
27 self.case_dir = os.path.join(CONST.functest_test, 'vnf/ims/')
28 self.data_dir = CONST.dir_vIMS_data
29 self.test_dir = CONST.dir_repo_vims_test
31 # vIMS Data directory creation
32 if not os.path.exists(self.data_dir):
33 os.makedirs(self.data_dir)
35 def deploy_orchestrator(self, **kwargs):
37 # put your code here to deploy openbaton
38 # from the functest docker located on the jumphost
39 # you have admin rights on OpenStack SUT
40 # you can cretae a VM, spawn docker on the jumphost
41 # spawn docker on a VM in the SUT, ..up to you
43 # note: this step can be ignored
44 # if OpenBaton is part of the installer
45 self.logger.info("Deploy orchestrator: OK")
49 # call openbaton to deploy the vIMS
50 self.logger.info("Deploy VNF: OK")
53 # Adaptations probably needed
54 # code used for cloudify_ims
55 # ruby client on jumphost calling the vIMS on the SUT
56 script = "source {0}venv_cloudify/bin/activate; "
58 script += "cfy status | grep -Eo \"([0-9]{{1,3}}\.){{3}}[0-9]{{1,3}}\""
59 cmd = "/bin/bash -c '" + script.format(self.data_dir) + "'"
62 self.logger.debug("Trying to get clearwater manager IP ... ")
63 mgr_ip = os.popen(cmd).read()
64 mgr_ip = mgr_ip.splitlines()[0]
66 self.step_failure("Unable to retrieve the IP of the "
67 "cloudify manager server !")
69 api_url = "http://" + mgr_ip + "/api/v2"
70 dep_outputs = requests.get(api_url + "/deployments/" +
71 self.vnf.deployment_name + "/outputs")
72 dns_ip = dep_outputs.json()['outputs']['dns_ip']
73 ellis_ip = dep_outputs.json()['outputs']['ellis_ip']
75 ellis_url = "http://" + ellis_ip + "/"
76 url = ellis_url + "accounts"
78 params = {"password": "functest",
79 "full_name": "opnfv functest user",
80 "email": "functest@opnfv.fr",
81 "signup_code": "secret"}
83 rq = requests.post(url, data=params)
85 while rq.status_code != 201 and i > 0:
86 rq = requests.post(url, data=params)
90 if rq.status_code == 201:
91 url = ellis_url + "session"
92 rq = requests.post(url, data=params)
95 url = ellis_url + "accounts/" + params['email'] + "/numbers"
97 rq = requests.post(url, cookies=cookies)
99 while rq.status_code != 200 and i > 0:
100 rq = requests.post(url, cookies=cookies)
104 if rq.status_code != 200:
105 self.step_failure("Unable to create a number: %s"
106 % rq.json()['reason'])
108 nameservers = ft_utils.get_resolvconf_ns()
110 for ns in nameservers:
111 resolvconf += "\nnameserver " + ns
114 script = ('echo -e "nameserver ' + dns_ip + resolvconf +
115 '" > /etc/resolv.conf; ')
116 script += 'source /etc/profile.d/rvm.sh; '
118 script += ('rake test[{1}] SIGNUP_CODE="secret"')
120 cmd = ("/bin/bash -c '" +
121 script.format(self.data_dir, self.inputs["public_domain"]) +
123 output_file = "output.txt"
124 f = open(output_file, 'w+')
125 subprocess.call(cmd, shell=True, stdout=f,
126 stderr=subprocess.STDOUT)
129 f = open(output_file, 'r')
132 self.logger.debug(result)
134 vims_test_result = ""
135 tempFile = os.path.join(self.test_dir, "temp.json")
137 self.logger.debug("Trying to load test results")
138 with open(tempFile) as f:
139 vims_test_result = json.load(f)
142 self.logger.error("Unable to retrieve test results")
147 self.logger.error("Deleting file failed")
149 if vims_test_result != '':
150 return {'status': 'PASS', 'result': vims_test_result}
152 return {'status': 'FAIL', 'result': ''}
156 super(ImsVnf, self).clean()