From 2b945497107081be6045459bd566e620ad694de4 Mon Sep 17 00:00:00 2001 From: Nikolay Stanchev <ns17@it-innovation.soton.ac.uk> Date: Tue, 27 Mar 2018 09:33:40 +0100 Subject: [PATCH] [ Issue #61 ] - update to endpoints configuration test --- clmctest/monitoring/test_endpoint_config.py | 54 +++++++++++++++++++-- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/clmctest/monitoring/test_endpoint_config.py b/clmctest/monitoring/test_endpoint_config.py index 244b7ca..5faac2f 100644 --- a/clmctest/monitoring/test_endpoint_config.py +++ b/clmctest/monitoring/test_endpoint_config.py @@ -9,11 +9,17 @@ import time """ Tests the monitoring of endpoints' configuration states - currently based on model with three states (placing -> booting -> connecting) + +Line Protocol report format: + +mcEndpointConfig <global tags>,<state> <statePeriod=milliseconds>,<cpus=numberOfCPUs>, <memory=memoryOfVM>, <storage=storageCapacityOfVM> time """ +# Random initialization of state periods state_delays = [{'placing': random.randint(75, 125)/10, 'booting': random.randint(75, 125)/10, 'connecting': random.randint(75, 125)/10}, - {'placing': random.randint(75, 125)/10, 'booting': random.randint(75, 125)/10, 'connecting': random.randint(75, 125)/10}] # Random initialization of state periods + {'placing': random.randint(75, 125)/10, 'booting': random.randint(75, 125)/10, 'connecting': random.randint(75, 125)/10}] + measurement_name = 'mcEndpointConfig' # measurement name for configuration of media components' endpoints @@ -29,6 +35,8 @@ measurement_name = 'mcEndpointConfig' # measurement name for configuration of m ]) def test_endpoint_config(query, result, get_db_client): """ + Test endpoint configuration state measurements in general. + :param query: query under test for the endpoint configuration state :param result: expected result of executed query :param get_db_client: the InfluxDB client fixture from conftest.py @@ -36,13 +44,51 @@ def test_endpoint_config(query, result, get_db_client): print("\n") # blank line for formatting purposes - measurements = get_db_client.query(query, raise_errors=False).get_points() + query_result = get_db_client.query(query, raise_errors=False) + # test the error attribute of the result is None, that is no error is returned from executing the DB query + assert query_result.error is None, "An error was encountered while executing query {0}.".format(query) + measurements = query_result.get_points() assert all(map(lambda measurement: compare(measurement, result), measurements)), "Comparison failure for query:\n{0}".format(query) print("Successfully passed test for query:\n{0}".format(query)) +@pytest.mark.parametrize("query, result", [ + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'placing\' and ipendpoint=\'adaptive_streaming_I1_apache1\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[0]['placing']}), + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'booting\' and ipendpoint=\'adaptive_streaming_I1_apache1\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[0]['booting']}), + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'connecting\' and ipendpoint=\'adaptive_streaming_I1_apache1\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[0]['connecting']}), + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'placing\' and ipendpoint=\'adaptive_streaming_I1_apache2\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[1]['placing']}), + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'booting\' and ipendpoint=\'adaptive_streaming_I1_apache2\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[1]['booting']}), + ('SELECT MEAN("statePeriod") as "mean_statePeriod" FROM "CLMCMetrics"."autogen"."mcEndpointConfig" WHERE state=\'connecting\' and ipendpoint=\'adaptive_streaming_I1_apache2\' and sf=\'adaptive_streaming\'', + {"mean_statePeriod": state_delays[1]['connecting']}) +]) +def test_mean_config_periods(query, result, get_db_client): + """ + :param query: query under test for the endpoint configuration state + :param result: expected result of executed query + :param get_db_client: the InfluxDB client fixture from conftest.py + """ + + print("\n") # blank line for formatting purposes + + query_result = get_db_client.query(query, raise_errors=False) + # test the error attribute of the result is None, that is no error is returned from executing the DB query + assert query_result.error is None, "An error was encountered while executing query {0}.".format(query) + + measurement = next(query_result.get_points()) + measurement.pop('time') + + assert measurement == result, "Comparison failure for query of mean state period:\n{0}".format(query) + + print("Successfully passed test for query of mean state period:\n{0}".format(query)) + + @pytest.fixture(scope='module', autouse=True) def generate_states_data(streaming_sim_config, get_db_client): """ @@ -61,8 +107,8 @@ def generate_states_data(streaming_sim_config, get_db_client): time.sleep(2) for i in range(1, 3): - measurement_time = 1 - for state in state_delays[i-1].keys(): + measurement_time = 0 + for state in ('placing', 'booting', 'connecting'): epURL = streaming_sim_config['hosts'][i]['ip_address'] # endpoint URL mc_EndpointID = streaming_sim_config['hosts'][i]['ipendpoint_id'] cpu = streaming_sim_config['hosts'][i]['cpus'] -- GitLab