diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/integration/ansible.cfg | 17 | ||||
-rw-r--r-- | tests/integration/fixtures/case.json | 14 | ||||
-rw-r--r-- | tests/integration/fixtures/pod.json | 6 | ||||
-rw-r--r-- | tests/integration/fixtures/project.json | 4 | ||||
-rw-r--r-- | tests/integration/group_vars/all | 3 | ||||
-rw-r--r-- | tests/integration/host_vars/localhost | 7 | ||||
-rw-r--r-- | tests/integration/hosts | 1 | ||||
-rw-r--r-- | tests/integration/hosts.default | 6 | ||||
l--------- | tests/integration/roles | 1 | ||||
-rw-r--r-- | tests/integration/run.yaml | 80 | ||||
-rw-r--r-- | tests/integration/setup.yaml | 43 | ||||
-rw-r--r-- | tests/integration/workspace-create.yml | 13 | ||||
-rw-r--r-- | tests/unit/ansible_library/modules/apex_generate_inventory_test.py (renamed from tests/unit/ansible_library/modules/apex_test.py) | 4 | ||||
-rw-r--r-- | tests/unit/ansible_library/modules/fuel_test.py | 8 | ||||
-rw-r--r-- | tests/unit/cli/options_test.py | 3 | ||||
-rw-r--r-- | tests/unit/reporter/test_testapi.py | 116 |
16 files changed, 138 insertions, 188 deletions
diff --git a/tests/integration/ansible.cfg b/tests/integration/ansible.cfg index 40e28bcf..a11bd1af 100644 --- a/tests/integration/ansible.cfg +++ b/tests/integration/ansible.cfg @@ -11,18 +11,5 @@ # some basic default values... -inventory = ./hosts -library = ../../qtip/ansible_library/ - -# set plugin path directories here, separate with colons -action_plugins = ../../qtip/ansible_library/plugins/action -#cache_plugins = /usr/share/ansible/plugins/cache -#callback_plugins = /usr/share/ansible/plugins/callback -#connection_plugins = /usr/share/ansible/plugins/connection -#lookup_plugins = /usr/share/ansible/plugins/lookup -#inventory_plugins = /usr/share/ansible/plugins/inventory -#vars_plugins = /usr/share/ansible/plugins/vars -filter_plugins = ../../qtip/ansible_library/plugins/filter -#test_plugins = /usr/share/ansible/plugins/test -#terminal_plugins = /usr/share/ansible/plugins/terminal -#strategy_plugins = /usr/share/ansible/plugins/strategy +inventory = hosts +roles_path = ../../resources/roles diff --git a/tests/integration/fixtures/case.json b/tests/integration/fixtures/case.json deleted file mode 100644 index 22abc40f..00000000 --- a/tests/integration/fixtures/case.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "run": "", - "name": "compute", - "ci_loop": "", - "tags": "", - "url": "", - "domains": "", - "dependencies": "", - "version": "", - "criteria": "", - "tier": "", - "blocking": "", - "description": "" -}
\ No newline at end of file diff --git a/tests/integration/fixtures/pod.json b/tests/integration/fixtures/pod.json deleted file mode 100644 index 8c2863ba..00000000 --- a/tests/integration/fixtures/pod.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "details": "", - "role": "", - "name": "internal", - "mode": "" -}
\ No newline at end of file diff --git a/tests/integration/fixtures/project.json b/tests/integration/fixtures/project.json deleted file mode 100644 index ecd03e83..00000000 --- a/tests/integration/fixtures/project.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "qtip", - "description": "Platform Performance Benchmarking" -}
\ No newline at end of file diff --git a/tests/integration/group_vars/all b/tests/integration/group_vars/all deleted file mode 100644 index 16a93f46..00000000 --- a/tests/integration/group_vars/all +++ /dev/null @@ -1,3 +0,0 @@ -qtip_resources: ../../resources -qtip_reports: ./reports -qtip_fixtures: ./fixtures diff --git a/tests/integration/host_vars/localhost b/tests/integration/host_vars/localhost deleted file mode 100644 index 18d764cc..00000000 --- a/tests/integration/host_vars/localhost +++ /dev/null @@ -1,7 +0,0 @@ -testapi_url: http://localhost:8000/api/v1 -project_name: qtip -case_name: compute -pod_name: internal -installer: fuel -version: master -scenario: demo diff --git a/tests/integration/hosts b/tests/integration/hosts new file mode 100644 index 00000000..2302edae --- /dev/null +++ b/tests/integration/hosts @@ -0,0 +1 @@ +localhost ansible_connection=local diff --git a/tests/integration/hosts.default b/tests/integration/hosts.default deleted file mode 100644 index 9b91eea6..00000000 --- a/tests/integration/hosts.default +++ /dev/null @@ -1,6 +0,0 @@ -[fuel-master] -fuel-master - -[local] -localhost ansible_connection=local - diff --git a/tests/integration/roles b/tests/integration/roles new file mode 120000 index 00000000..a2363eeb --- /dev/null +++ b/tests/integration/roles @@ -0,0 +1 @@ +../../resources/roles
\ No newline at end of file diff --git a/tests/integration/run.yaml b/tests/integration/run.yaml deleted file mode 100644 index 7545a65e..00000000 --- a/tests/integration/run.yaml +++ /dev/null @@ -1,80 +0,0 @@ -############################################################################## -# Copyright (c) 2017 ZTE Corporation and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - ---- -# Execute compute benchmark plan and collect data -# - system information -# - test condition -# - performance metrics -- hosts: compute - tasks: - - name: check ssh connection - ping: - - name: collect system information - include: "{{ qtip_resources }}/metric/inxi.yaml" - - name: ssl metrics - include: "{{ qtip_resources }}/metric/openssl.yaml" - tags: [ssl] - -- hosts: compute - tasks: - - name: calculate QPI of compute - calculate: - metrics: - ssl_rsa: "{{ openssl_rsa_metrics }}" - spec: "{{ qtip_resources }}/QPI/compute.yaml" - register: qpi_result - delegate_to: localhost - tags: [calculate] - -- hosts: local - tasks: - - name: aggregate QPI results from all tested nodes - aggregate: - group: compute - register: pod_result - -# Generate and publish report - -- hosts: local - tasks: - - name: create report folder - file: - path: "{{ qtip_reports }}" - state: directory - - name: create system information report - template: - src: "{{ qtip_resources }}/template/system-info.j2" - dest: "{{ qtip_reports }}/system-info" - - name: create qpi report - template: - src: "{{ qtip_resources }}/template/qpi-report.j2" - dest: "{{ qtip_reports }}/qpi-report" - tags: [report] - - name: push result to testapi - uri: - url: "{{ testapi_url }}/results" - body: "{{ item|to_json }}" - method: POST - body_format: json - status_code: 200 - with_items: - - - project_name: "{{ project_name }}" - case_name: "{{ case_name }}" - pod_name: "{{ pod_name }}" - installer: "{{ installer }}" - version: "{{ version }}" - scenario: "{{ scenario }}" - start_date: "{{ ansible_date_time.date }}" - stop_date: "{{ ansible_date_time.date }}" - criteria: "" - details: " {{ pod_result }}" - - tags: [testapi] diff --git a/tests/integration/setup.yaml b/tests/integration/setup.yaml deleted file mode 100644 index 8d055c23..00000000 --- a/tests/integration/setup.yaml +++ /dev/null @@ -1,43 +0,0 @@ -############################################################################## -# Copyright (c) 2017 ZTE Corporation and others. -# -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Apache License, Version 2.0 -# which accompanies this distribution, and is available at -# http://www.apache.org/licenses/LICENSE-2.0 -############################################################################## - -# Prepare connection to SUT (System Under Test) -- hosts: fuel-master - gather_facts: no - tasks: - - name: collect facts of fuel hosts - fuel: - - name: update inventory file - template: src={{ qtip_resources }}/template/hosts.j2 dest=./hosts - delegate_to: localhost - - name: update ssh.cfg file - template: src={{ qtip_resources }}/template/ssh.cfg.j2 dest=./ssh.cfg - delegate_to: localhost - -# Initialize testapi database -- hosts: localhost - tasks: - - name: create project and pod - uri: - url: "{{ testapi_url }}/{{item}}s" - method: POST - body: "{{ lookup('file', '{}/{}.json'.format(qtip_fixtures, item)) }}" - status_code: [200, 403] - body_format: json - with_items: - - project - - pod - - name: create cases - uri: - url: "{{ testapi_url }}/projects/qtip/cases" - method: POST - body: "{{ lookup('file', '{}/case.json'.format(qtip_fixtures)) }}" - status_code: [200, 403] - body_format: json - tags: [testapi] diff --git a/tests/integration/workspace-create.yml b/tests/integration/workspace-create.yml new file mode 100644 index 00000000..83e0fadd --- /dev/null +++ b/tests/integration/workspace-create.yml @@ -0,0 +1,13 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +--- +- hosts: localhost + roles: + - { role: qtip-bootstrap, installer: fuel } diff --git a/tests/unit/ansible_library/modules/apex_test.py b/tests/unit/ansible_library/modules/apex_generate_inventory_test.py index 8a1d0673..7df9d35c 100644 --- a/tests/unit/ansible_library/modules/apex_test.py +++ b/tests/unit/ansible_library/modules/apex_generate_inventory_test.py @@ -10,7 +10,7 @@ import json import os -from qtip.ansible_library.modules import apex +from qtip.ansible_library.modules import apex_generate_inventory def test_generate_inventory(data_root): @@ -18,7 +18,7 @@ def test_generate_inventory(data_root): 'apex', 'baremetal_info.json'))) server_info = json.load(open(os.path.join(data_root, 'external', 'apex', 'server_info.json'))) - inventory = apex.generate_inventory(baremetal_info, server_info) + inventory = apex_generate_inventory.generate_inventory(baremetal_info, server_info) assert dict(inventory['hosts']) == { u'compute': [u'192.0.2.5', u'192.0.2.6'], u'control': [u'192.0.2.7', u'192.0.2.8', u'192.0.2.9']} diff --git a/tests/unit/ansible_library/modules/fuel_test.py b/tests/unit/ansible_library/modules/fuel_test.py index 6a440e0d..e004fc17 100644 --- a/tests/unit/ansible_library/modules/fuel_test.py +++ b/tests/unit/ansible_library/modules/fuel_test.py @@ -32,13 +32,7 @@ def test_generate_inventory(data_root): u'node-28', u'node-25', u'node-27'], - u'mongo': [u'node-24'], - 'node-23': [u'node-23'], - 'node-24': [u'node-24'], - 'node-25': [u'node-25'], - 'node-26': [u'node-26'], - 'node-27': [u'node-27'], - 'node-28': [u'node-28']} + u'mongo': [u'node-24']} assert dict(inventory['hosts_meta']) == { u'node-23': {'ansible_ssh_host': u'10.20.11.10', 'cluster': 4, 'ip': u'10.20.11.10', 'mac': u'74:4a:a4:01:71:61', 'name': u'Untitled (71:61)', 'online': True, 'os_platform': u'ubuntu', diff --git a/tests/unit/cli/options_test.py b/tests/unit/cli/options_test.py index 9dbbe6f3..d7c0f700 100644 --- a/tests/unit/cli/options_test.py +++ b/tests/unit/cli/options_test.py @@ -8,6 +8,7 @@ ############################################################################## import pytest +import re import sys from click.testing import CliRunner @@ -26,7 +27,7 @@ class TestClass(object): def test_version(self, runner): result = runner.invoke(cli, ['--version']) - assert 'dev' in result.output + assert re.search(r'\d+\.\d+\.\d+', result.output) def test_debug(self, runner): runner.invoke(cli, ['-d']) diff --git a/tests/unit/reporter/test_testapi.py b/tests/unit/reporter/test_testapi.py new file mode 100644 index 00000000..85655274 --- /dev/null +++ b/tests/unit/reporter/test_testapi.py @@ -0,0 +1,116 @@ +############################################################################## +# Copyright (c) 2017 akhil.batra@research.iiit.ac.in and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +import mock +import pytest + +from qtip.reporter import testapi + + +@pytest.mark.parametrize("testapi_url, payload", [ + ("http://testresults.opnfv.org/test/api/v1", {'project_name': 'qtip', + 'case_name': 'fake-case', + 'pod_name': 'fake_pod', + 'installer': 'fake_installer', + 'version': '1', + 'scenario': 'fake_scenario', + 'criteria': 'fake_criteria', + 'build_tag': 'fake_tag', + 'start_date': 'fake_date', + 'stop_date': 'fake_date', + 'details': 'fake:details'}), +]) +@mock.patch('qtip.reporter.testapi.requests') +def test_testapi_unavailable(mock_request, testapi_url, payload): + mock_request.post.return_value.status_code = testapi.requests.codes.unavailable + mock_request.post.return_value.reason = 'Service unavailable' + testapi.push_results(testapi_url, payload) + mock_request.post.assert_called_with(testapi_url + '/results', json=payload) + mock_request.post.return_value.raise_for_status.assert_called() + + +@pytest.mark.parametrize("testapi_url, payload", [ + ("http://testresults.opnfv.org/test/api/v1", {'project_name': 'qtip', + 'case_name': 'fake-case', + 'pod_name': 'fake_pod', + 'installer': 'fake_installer', + 'version': '1', + 'scenario': 'fake_scenario', + 'criteria': 'fake_criteria', + 'build_tag': 'fake_tag', + 'start_date': 'fake_date', + 'stop_date': 'fake_date', + 'details': 'fake:details'}), +]) +@mock.patch('qtip.reporter.testapi.requests') +def test_push_results_success(mock_request, testapi_url, payload): + mock_request.post.return_value.status_code = testapi.requests.codes.ok + mock_request.post.return_value.json.return_value = {'href': 'mock_url'} + push_response = testapi.push_results(testapi_url, payload) + mock_request.post.assert_called_with(testapi_url + '/results', json=payload) + assert push_response['href'] == 'mock_url' + + +@pytest.mark.parametrize("testapi_url, payload", [ + ("http://testresults.opnfv.org/test/api/v1", {'project_name': 'qtip', + 'case_name': 'fake-case', + 'pod_name': 'fake_pod', + 'installer': 'fake_installer', + 'version': '1', + 'scenario': 'fake_scenario', + 'criteria': 'fake_criteria', + 'build_tag': 'fake_tag', + 'start_date': 'fake_date', + 'stop_date': 'fake_date', + 'details': 'fake:details'}), +]) +@mock.patch('qtip.reporter.testapi.requests') +def test_push_results_not_found(mock_request, testapi_url, payload): + mock_request.post.return_value.status_code = testapi.requests.codes.not_found + mock_request.post.return_value.reason = 'Not found' + testapi.push_results(testapi_url, payload) + mock_request.post.assert_called_with(testapi_url + '/results', json=payload) + mock_request.post.return_value.raise_for_status.assert_called() + + +@pytest.mark.parametrize("testapi_url, payload", [ + ("http://testresults.opnfv.org/test/api/v1", {'project_name': 'qtip', + 'case_name': 'fake-case', + 'pod_name': 'fake_pod', + 'installer': 'fake_installer', + 'version': '', + 'scenario': None, + 'criteria': 'fake_criteria', + 'build_tag': 'fake_tag', + 'start_date': 'fake_date', + 'stop_date': 'fake_date', + 'details': 'fake:details'}), +]) +def test_push_results_invalid_params(testapi_url, payload): + with pytest.raises(testapi.InvalidParamsError) as error_invalid: + testapi.push_results(testapi_url, payload) + assert set(error_invalid.value.params) == {'version', 'scenario'} + + +@pytest.mark.parametrize("testapi_url, payload", [ + ("http://testresults.opnfv.org/test/api/v1", {'project_name': 'qtip', + 'case_name': 'fake-case', + 'pod_name': 'fake_pod', + 'installer': 'fake_installer', + 'criteria': 'fake_criteria', + 'build_tag': 'fake_tag', + 'start_date': 'fake_date', + 'stop_date': 'fake_date', + 'details': 'fake:details'}), +]) +def test_push_results_missing_params(testapi_url, payload): + with pytest.raises(testapi.MissingParamsError) as error_missing: + testapi.push_results(testapi_url, payload) + assert set(error_missing.value.params) == {'version', 'scenario'} |