From 32e98a86b99d8c730e19d91e9a13fff644b37ac3 Mon Sep 17 00:00:00 2001 From: Toshiaki Takahashi Date: Wed, 16 Jan 2019 02:22:24 +0000 Subject: Fix wrong image name in test code This change fix the name of the container image to be tested from the past name "LocalAgent" to the current name "DMA". This also fix python function names, comments and log output. Change-Id: I8bd8d1d884f6ff59c7e52da31455bc7f042ee9eb Signed-off-by: Toshiaki Takahashi --- baro_tests/collectd.py | 6 +- baro_tests/config_server.py | 38 +++---- baro_tests/dma.py | 265 ++++++++++++++++++++++++++++++++++++++++++++ baro_tests/local_agent.py | 265 -------------------------------------------- baro_tests/tests.py | 2 +- src/dma/pkg/common/types.go | 2 +- 6 files changed, 289 insertions(+), 289 deletions(-) create mode 100644 baro_tests/dma.py delete mode 100644 baro_tests/local_agent.py diff --git a/baro_tests/collectd.py b/baro_tests/collectd.py index 86871b47..c1a05afb 100644 --- a/baro_tests/collectd.py +++ b/baro_tests/collectd.py @@ -25,7 +25,7 @@ import time import logging import config_server import tests -import local_agent +import dma from distutils import version from opnfv.deployment import factory @@ -878,8 +878,8 @@ def main(bt_logger=None): else: pass - _print_label('Testing LocalAgent on compute nodes') - res_agent = local_agent.local_agent_main(logger, conf, computes) + _print_label('Testing DMA on compute nodes') + res_agent = dma.dma_main(logger, conf, computes) return 0 if res_overall == 0 and res_agent == 0 else 1 diff --git a/baro_tests/config_server.py b/baro_tests/config_server.py index d64a9146..e6d72335 100644 --- a/baro_tests/config_server.py +++ b/baro_tests/config_server.py @@ -324,64 +324,64 @@ class ConfigServer(object): compute_name)) return False - def is_localagent_server_running(self, compute): - """Check whether LocalAgent server is running on compute""" + def is_dma_server_running(self, compute): + """Check whether DMA server is running on compute""" compute_name = compute.get_name() nodes = get_apex_nodes() for node in nodes: if compute_name == node.get_dict()['name']: stdout = node.run_cmd('sudo systemctl status docker' '&& sudo docker ps' - '| grep opnfv/barometer-localagent') + '| grep opnfv/barometer-dma') if stdout and '/server' in stdout: self.__logger.info( - 'LocalAgent Server is running in node {}'.format( + 'DMA Server is running in node {}'.format( compute_name)) return True self.__logger.info( - 'LocalAgent Server is *not* running in node {}'.format( + 'DMA Server is *not* running in node {}'.format( compute_name)) return False - def is_localagent_infofetch_running(self, compute): - """Check whether LocalAgent infofetch is running on compute""" + def is_dma_infofetch_running(self, compute): + """Check whether DMA infofetch is running on compute""" compute_name = compute.get_name() nodes = get_apex_nodes() for node in nodes: if compute_name == node.get_dict()['name']: stdout = node.run_cmd('sudo systemctl status docker' '&& sudo docker ps' - '| grep opnfv/barometer-localagent') + '| grep opnfv/barometer-dma') if stdout and '/infofetch' in stdout: self.__logger.info( - 'LocalAgent InfoFetch is running in node {}'.format( + 'DMA InfoFetch is running in node {}'.format( compute_name)) return True self.__logger.info( - 'LocalAgent InfoFetch is *not* running in node {}'.format( + 'DMA InfoFetch is *not* running in node {}'.format( compute_name)) return False - def get_localagent_config(self, compute): - """Get config values of LocalAgent""" + def get_dma_config(self, compute): + """Get config values of DMA""" compute_name = compute.get_name() nodes = get_apex_nodes() for node in nodes: if compute_name == node.get_dict()['name']: # We use following after functest accept python-toml # stdout = node.run_cmd( - # 'cat /etc/barometer-localagent/config.toml') + # 'cat /etc/barometer-dma/config.toml') # try: # agent_conf = toml.loads(stdout) # except (TypeError, TomlDecodeError) as e: # self.__logger.error( - # 'LocalAgent config error: {}'.format(e)) + # 'DMA config error: {}'.format(e)) # agent_conf = None # finally: # return agent_conf readcmd = ( 'egrep "listen_port|amqp_"' - ' /etc/barometer-localagent/config.toml' + ' /etc/barometer-dma/config.toml' '| sed -e "s/#.*$//" | sed -e "s/=/:/"' ) stdout = node.run_cmd(readcmd) @@ -757,8 +757,8 @@ class ConfigServer(object): else: return False - def check_localagent_dummy_included(self, compute, name): - """Check if dummy collectd config by LocalAgent + def check_dma_dummy_included(self, compute, name): + """Check if dummy collectd config by DMA is included in collectd.conf file. Keyword arguments: @@ -859,13 +859,13 @@ class ConfigServer(object): self.__logger.debug('VM and other OpenStack resources deleted') - def test_localagent_infofetch_get_data(self, compute, test_name): + def test_dma_infofetch_get_data(self, compute, test_name): compute_name = compute.get_name() nodes = get_apex_nodes() for node in nodes: if compute_name == node.get_dict()['name']: stdout = node.run_cmd( - 'redis-cli keys "barometer-localagent/vm/*/vminfo"' + 'redis-cli keys "barometer-dma/vm/*/vminfo"' ' | while read k; do redis-cli get $k; done' ' | grep {}'.format(test_name)) self.__logger.debug('InfoFetch data: {}'.format(stdout)) diff --git a/baro_tests/dma.py b/baro_tests/dma.py new file mode 100644 index 00000000..4a44480b --- /dev/null +++ b/baro_tests/dma.py @@ -0,0 +1,265 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2018 OPNFV +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# Patch on October 10 2017 + +"""Executing test of DMA""" + +import os +import pika +import requests +import time + +import tests + +logger = None + +TEMP_DIR = '/root' + + +class DMAClient(object): + """Client to request DMA""" + def __init__(self, host, port, user, passwd): + """ + Keyword arguments: + host -- Host URL + port -- Host Port + user -- Username + passwd -- Password + """ + self._host = host + self._port = port + self._user = user + self._passwd = passwd + + def set(self, file): + logger.error('Do nothing to DMA') + + def __str__(self): + return ('host: {0}, port: {1}, user: {2}, pass: {3}' + .format(self._host, self._port, + self._user, (self._passwd and ''))) + + +class RestDMAClient(DMAClient): + """Client to request DMA using REST""" + def __init__(self, host, port, user, passwd): + super(self.__class__, self).__init__(host, port, user, passwd) + + def set(self, file): + logger.debug('Send to DMA using REST -- {}'.format(str(self))) + + if not os.path.isfile(file): + print '{} is not found'.format(file) + return False + filename = os.path.basename(file) + + url = 'http://{0}:{1}/collectd/conf'.format(self._host, self._port) + config = {'file': (filename, open(file, 'r'))} + requests.post(url, files=config) + + return True + + +class PubDMAClient(DMAClient): + """Client to request DMA using AMQP Publish""" + def __init__(self, host, port, user, passwd): + super(self.__class__, self).__init__(host, port, user, passwd) + + def set(self, file): + logger.debug('Send to DMA using AMQP Publish -- {}' + .format(str(self))) + + if not os.path.isfile(file): + print '{} is not found'.format(file) + return False + filename = os.path.basename(file) + filebody = open(file, 'r').read() + message = filename + '/' + filebody + + credentials = pika.PlainCredentials(self._user, self._passwd) + connection = pika.BlockingConnection(pika.ConnectionParameters( + host=self._host, port=int(self._port), + credentials=credentials)) + channel = connection.channel() + channel.exchange_declare(exchange='collectd-conf', + exchange_type='fanout') + channel.basic_publish(exchange='collectd-conf', + routing_key='', + body=message) + + connection.close() + return True + + +def _process_dma_result(compute_node, testfunc, + result, results_list, node): + """Print DMA test result and append it to results list. + + Keyword arguments: + testfunc -- DMA function name + result -- boolean test result + results_list -- results list + """ + if result: + logger.info( + 'Test case for {0} with DMA PASSED on {1}.'.format( + node, testfunc)) + else: + logger.error( + 'Test case for {0} with DMA FAILED on {1}.'.format( + node, testfunc)) + results_list.append((compute_node, "DMA", testfunc, result)) + + +def _print_result_of_dma(compute_ids, results): + """Print results of DMA. + + Keyword arguments: + compute_ids -- list of compute node IDs + results -- results list + """ + compute_node_names = ['Node-{}'.format(i) for i in range( + len((compute_ids)))] + all_computes_in_line = '' + for compute in compute_node_names: + all_computes_in_line += '| ' + compute + (' ' * (7 - len(compute))) + line_of_nodes = '| Test ' + all_computes_in_line + '|' + logger.info('=' * 70) + logger.info('+' + ('-' * ((9 * len(compute_node_names))+16)) + '+') + logger.info( + '|' + ' ' * ((9*len(compute_node_names))/2) + + ' DMA TEST ' + + ' ' * ( + 9*len(compute_node_names) - (9*len(compute_node_names))/2) + + '|') + logger.info( + '+' + ('-' * 16) + '+' + (('-' * 8) + '+') * len(compute_node_names)) + logger.info(line_of_nodes) + logger.info( + '+' + ('-' * 16) + '+' + (('-' * 8) + '+') * len(compute_node_names)) + + testname = "DMA" + print_line = '' + for id in compute_ids: + all_result = \ + 'FAIL' if [ + testfunc for comp_id, testname, testfunc, res in results + if comp_id == id and not res] else 'PASS' + print_line += '| ' + all_result + ' ' + logger.info( + '| {}'.format(testname) + (' ' * (15 - len(testname))) + + print_line + '|') + + for testfunc in ['Server', 'InfoFetch']: + print_line = '' + for id in compute_ids: + if (id, testname, testfunc, True) in results: + print_line += ' PASS |' + elif (id, testname, testfunc, False) in results: + print_line += ' FAIL |' + else: + print_line += ' SKIP |' + logger.info( + '| {}'.format(testfunc) + (' ' * (14-len(testfunc))) + + '|' + print_line) + + logger.info( + '+' + ('-' * 16) + '+' + + (('-' * 8) + '+') * len(compute_node_names)) + logger.info('=' * 70) + + +def dma_main(bt_logger, conf, computes): + """Check DMA of each compute node. + + Keyword arguments: + bt_logger -- logger instance + computes -- compute node list + """ + global logger + logger = bt_logger + + compute_ids = [] + agent_results = [] + for compute_node in computes: + node_id = compute_node.get_id() + compute_ids.append(node_id) + + agent_server_running = conf.is_dma_server_running(compute_node) + agent_infofetch_running = ( + conf.is_dma_infofetch_running(compute_node) and + conf.is_redis_running(compute_node)) + + if agent_server_running: + test_name = 'barotest' + tmpfile = TEMP_DIR + '/' + test_name + '.conf' + + agent_config = conf.get_dma_config(compute_node) + listen_ip = compute_node.get_ip() + listen_port = agent_config.get('server').get('listen_port') + amqp_host = agent_config.get('server').get('amqp_host') + amqp_port = agent_config.get('server').get('amqp_port') + amqp_user = agent_config.get('server').get('amqp_user') + amqp_passwd = agent_config.get('server').get('amqp_password') + rest_client = RestDMAClient( + listen_ip, listen_port, '', '') + pub_client = PubDMAClient( + amqp_host, amqp_port, amqp_user, + amqp_passwd) + + all_res = True + for client in [rest_client, pub_client]: + tests.test_dma_server_set_collectd( + compute_node, tmpfile, logger, client) + sleep_time = 1 + logger.info( + 'Sleeping for {} seconds'.format(sleep_time) + + ' before DMA server test...') + time.sleep(sleep_time) + res = conf.check_dma_dummy_included( + compute_node, test_name) + all_res = all_res and res + + _process_dma_result( + compute_node.get_id(), 'Server', + all_res, agent_results, compute_node.get_name()) + + if agent_infofetch_running: + test_name = 'barotest' + resources = conf.create_testvm(compute_node, test_name) + sleep_time = 5 + logger.info( + 'Sleeping for {} seconds'.format(sleep_time) + + ' before DMA infofetch test...') + time.sleep(sleep_time) + res = conf.test_dma_infofetch_get_data( + compute_node, test_name) + conf.delete_testvm(resources) + + _process_dma_result( + compute_node.get_id(), 'InfoFetch', + res, agent_results, compute_node.get_name()) + + _print_result_of_dma(compute_ids, agent_results) + + for res in agent_results: + if not res[3]: + logger.error('Some tests have failed or have not been executed') + logger.error('DMA test is Fail') + return 1 + else: + pass + return 0 diff --git a/baro_tests/local_agent.py b/baro_tests/local_agent.py deleted file mode 100644 index 1a50d963..00000000 --- a/baro_tests/local_agent.py +++ /dev/null @@ -1,265 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2018 OPNFV -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# Patch on October 10 2017 - -"""Executing test of LocalAgent""" - -import os -import pika -import requests -import time - -import tests - -logger = None - -TEMP_DIR = '/root' - - -class LocalAgentClient(object): - """Client to request LocalAgent""" - def __init__(self, host, port, user, passwd): - """ - Keyword arguments: - host -- Host URL - port -- Host Port - user -- Username - passwd -- Password - """ - self._host = host - self._port = port - self._user = user - self._passwd = passwd - - def set(self, file): - logger.error('Do nothing to LocalAgent') - - def __str__(self): - return ('host: {0}, port: {1}, user: {2}, pass: {3}' - .format(self._host, self._port, - self._user, (self._passwd and ''))) - - -class RestLocalAgentClient(LocalAgentClient): - """Client to request LocalAgent using REST""" - def __init__(self, host, port, user, passwd): - super(self.__class__, self).__init__(host, port, user, passwd) - - def set(self, file): - logger.debug('Send to localagent using REST -- {}'.format(str(self))) - - if not os.path.isfile(file): - print '{} is not found'.format(file) - return False - filename = os.path.basename(file) - - url = 'http://{0}:{1}/collectd/conf'.format(self._host, self._port) - config = {'file': (filename, open(file, 'r'))} - requests.post(url, files=config) - - return True - - -class PubLocalAgentClient(LocalAgentClient): - """Client to request LocalAgent using AMQP Publish""" - def __init__(self, host, port, user, passwd): - super(self.__class__, self).__init__(host, port, user, passwd) - - def set(self, file): - logger.debug('Send to localagent using AMQP Publish -- {}' - .format(str(self))) - - if not os.path.isfile(file): - print '{} is not found'.format(file) - return False - filename = os.path.basename(file) - filebody = open(file, 'r').read() - message = filename + '/' + filebody - - credentials = pika.PlainCredentials(self._user, self._passwd) - connection = pika.BlockingConnection(pika.ConnectionParameters( - host=self._host, port=int(self._port), - credentials=credentials)) - channel = connection.channel() - channel.exchange_declare(exchange='collectd-conf', - exchange_type='fanout') - channel.basic_publish(exchange='collectd-conf', - routing_key='', - body=message) - - connection.close() - return True - - -def _process_localagent_result(compute_node, testfunc, - result, results_list, node): - """Print LocalAgent test result and append it to results list. - - Keyword arguments: - testfunc -- localagent function name - result -- boolean test result - results_list -- results list - """ - if result: - logger.info( - 'Test case for {0} with LocalAgent PASSED on {1}.'.format( - node, testfunc)) - else: - logger.error( - 'Test case for {0} with LocalAgent FAILED on {1}.'.format( - node, testfunc)) - results_list.append((compute_node, "LocalAgent", testfunc, result)) - - -def _print_result_of_localagent(compute_ids, results): - """Print results of LocalAgent. - - Keyword arguments: - compute_ids -- list of compute node IDs - results -- results list - """ - compute_node_names = ['Node-{}'.format(i) for i in range( - len((compute_ids)))] - all_computes_in_line = '' - for compute in compute_node_names: - all_computes_in_line += '| ' + compute + (' ' * (7 - len(compute))) - line_of_nodes = '| Test ' + all_computes_in_line + '|' - logger.info('=' * 70) - logger.info('+' + ('-' * ((9 * len(compute_node_names))+16)) + '+') - logger.info( - '|' + ' ' * ((9*len(compute_node_names))/2) - + ' LOCALAGENT TEST' - + ' ' * ( - 9*len(compute_node_names) - (9*len(compute_node_names))/2) - + '|') - logger.info( - '+' + ('-' * 16) + '+' + (('-' * 8) + '+') * len(compute_node_names)) - logger.info(line_of_nodes) - logger.info( - '+' + ('-' * 16) + '+' + (('-' * 8) + '+') * len(compute_node_names)) - - testname = "LocalAgent" - print_line = '' - for id in compute_ids: - all_result = \ - 'FAIL' if [ - testfunc for comp_id, testname, testfunc, res in results - if comp_id == id and not res] else 'PASS' - print_line += '| ' + all_result + ' ' - logger.info( - '| {}'.format(testname) + (' ' * (15 - len(testname))) - + print_line + '|') - - for testfunc in ['Server', 'InfoFetch']: - print_line = '' - for id in compute_ids: - if (id, testname, testfunc, True) in results: - print_line += ' PASS |' - elif (id, testname, testfunc, False) in results: - print_line += ' FAIL |' - else: - print_line += ' SKIP |' - logger.info( - '| {}'.format(testfunc) + (' ' * (14-len(testfunc))) - + '|' + print_line) - - logger.info( - '+' + ('-' * 16) + '+' - + (('-' * 8) + '+') * len(compute_node_names)) - logger.info('=' * 70) - - -def local_agent_main(bt_logger, conf, computes): - """Check LocalAgent of each compute node. - - Keyword arguments: - bt_logger -- logger instance - computes -- compute node list - """ - global logger - logger = bt_logger - - compute_ids = [] - agent_results = [] - for compute_node in computes: - node_id = compute_node.get_id() - compute_ids.append(node_id) - - agent_server_running = conf.is_localagent_server_running(compute_node) - agent_infofetch_running = ( - conf.is_localagent_infofetch_running(compute_node) and - conf.is_redis_running(compute_node)) - - if agent_server_running: - test_name = 'barotest' - tmpfile = TEMP_DIR + '/' + test_name + '.conf' - - agent_config = conf.get_localagent_config(compute_node) - listen_ip = compute_node.get_ip() - listen_port = agent_config.get('server').get('listen_port') - amqp_host = agent_config.get('server').get('amqp_host') - amqp_port = agent_config.get('server').get('amqp_port') - amqp_user = agent_config.get('server').get('amqp_user') - amqp_passwd = agent_config.get('server').get('amqp_password') - rest_client = RestLocalAgentClient( - listen_ip, listen_port, '', '') - pub_client = PubLocalAgentClient( - amqp_host, amqp_port, amqp_user, - amqp_passwd) - - all_res = True - for client in [rest_client, pub_client]: - tests.test_localagent_server_set_collectd( - compute_node, tmpfile, logger, client) - sleep_time = 1 - logger.info( - 'Sleeping for {} seconds'.format(sleep_time) - + ' before localagent server test...') - time.sleep(sleep_time) - res = conf.check_localagent_dummy_included( - compute_node, test_name) - all_res = all_res and res - - _process_localagent_result( - compute_node.get_id(), 'Server', - all_res, agent_results, compute_node.get_name()) - - if agent_infofetch_running: - test_name = 'barotest' - resources = conf.create_testvm(compute_node, test_name) - sleep_time = 5 - logger.info( - 'Sleeping for {} seconds'.format(sleep_time) - + ' before localagent infofetch test...') - time.sleep(sleep_time) - res = conf.test_localagent_infofetch_get_data( - compute_node, test_name) - conf.delete_testvm(resources) - - _process_localagent_result( - compute_node.get_id(), 'InfoFetch', - res, agent_results, compute_node.get_name()) - - _print_result_of_localagent(compute_ids, agent_results) - - for res in agent_results: - if not res[3]: - logger.error('Some tests have failed or have not been executed') - logger.error('LocalAgent test is Fail') - return 1 - else: - pass - return 0 diff --git a/baro_tests/tests.py b/baro_tests/tests.py index d315fcf1..47edd778 100644 --- a/baro_tests/tests.py +++ b/baro_tests/tests.py @@ -274,7 +274,7 @@ def test_csv_handles_plugin_data( return True -def test_localagent_server_set_collectd(compute, file, logger, client): +def test_dma_server_set_collectd(compute, file, logger, client): with open(file, mode='w') as f: f.write('# dummy conf\n') res = client.set(file) diff --git a/src/dma/pkg/common/types.go b/src/dma/pkg/common/types.go index 98f605e9..f6302a59 100644 --- a/src/dma/pkg/common/types.go +++ b/src/dma/pkg/common/types.go @@ -16,7 +16,7 @@ package common -// redisLabel is prefix of local-agent for redis +// redisLabel is prefix of DMA for redis const redisLabel = "barometer-dma" // Pool is an interface of DB pool to annotate. -- cgit 1.2.3-korg