Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/python3
"""
// © University of Southampton IT Innovation Centre, 2018
//
// Copyright in this software belongs to University of Southampton
// IT Innovation Centre of Gamma House, Enterprise Road,
// Chilworth Science Park, Southampton, SO16 7NS, UK.
//
// This software may not be used, sold, licensed, transferred, copied
// or reproduced in whole or in part in any manner or form or in or
// on any media by any person other than in accordance with the terms
// of the Licence Agreement supplied with the software, or otherwise
// without the prior written consent of the copyright owners.
//
// This software is distributed WITHOUT ANY WARRANTY, without even the
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE, except where stated in the Licence Agreement supplied with
// the software.
//
// Created By : Nikolay Stanchev
// Created Date : 14-08-2018
// Created for Project : FLAME
"""
# Python standard libs
from os import listdir
from os.path import isfile, join
from yaml import load
# PIP installed libs
import pytest
from pyramid import testing
from toscaparser.tosca_template import ToscaTemplate
# CLMC-service imports
from clmcservice.alertsapi.utilities import adjust_tosca_definitions_import, validate_clmc_alerts_specification
from clmcservice.alertsapi.views import AlertsConfigurationAPI
from clmcservice import ROOT_DIR
class TestAlertsConfigurationAPI(object):
"""
A pytest-implementation test for the Alerts Configuration API endpoints.
"""
@pytest.fixture(autouse=True)
def print_fixture(self):
"""
Fixture to adjust the printing format when running pytest with the "-s" flag - by default print messages mix up with pytest's output
"""
print()
@pytest.fixture()
def app_config(self):
"""
A fixture to implement setUp/tearDown functionality for all tests by initializing configuration structure for the web service
"""
self.registry = testing.setUp()
yield
testing.tearDown()
def test_alerts_config_tosca_parsing(self):
"""
Tests that what we consider a valid/invalid alerts specification is successfully/unsuccessfully parsed by the TOSCA-parser.
"""
for path_suffix, valid_expected in (("valid", True), ("invalid", False)):
test_data_path = join(ROOT_DIR, *["resources", "tosca", "test-data", "tosca-parser", path_suffix])
for test_file_path in listdir(test_data_path):
alert_config_abs_path = join(test_data_path, test_file_path)
if not isfile(alert_config_abs_path):
continue # skip directories
if not test_file_path.lower().endswith('.yaml'):
continue # non-yaml files are not intended for being tested
print(alert_config_abs_path, valid_expected)
with open(alert_config_abs_path, 'r') as fh:
yaml_content = load(fh)
adjust_tosca_definitions_import(yaml_content)
valid_real = True
try:
ToscaTemplate(yaml_dict_tpl=yaml_content)
except Exception:
valid_real = False
assert valid_expected == valid_real, "TOSCA parser test failed for file: {0}".format(alert_config_abs_path)
def test_alerts_config_clmc_validation(self):
"""
Tests the custom CLMC validation of the TOSCA alerts specification.
"""
for path_suffix, valid_expected in (("valid", True), ("invalid", False)):
test_data_path = join(ROOT_DIR, *["resources", "tosca", "test-data", "clmc-validator", path_suffix])
for test_file_path in listdir(test_data_path):
alert_config_abs_path = join(test_data_path, test_file_path)
if not isfile(alert_config_abs_path):
continue # skip directories
if not test_file_path.lower().endswith('.yaml'):
continue # non-yaml files are not intended for being tested
print(alert_config_abs_path, valid_expected)
with open(alert_config_abs_path, 'r') as fh:
yaml_content = load(fh)
adjust_tosca_definitions_import(yaml_content)
# do not catch exceptions here since we are testing the clmc validator, the tosca parsing is tested in the previous test method
alert_tosca_spec = ToscaTemplate(yaml_dict_tpl=yaml_content)
valid_real, err = validate_clmc_alerts_specification(alert_tosca_spec.tpl, include_error=True)
assert valid_expected == valid_real, "CLMC alerts specification validator test failed for file: {0}".format(alert_config_abs_path)
def test_alerts_config_api_post(self, app_config):
"""
Tests the POST API endpoint of the alerts configuration API responsible for receiving alerts specifications.
:param app_config: fixture for setUp/tearDown of the web service registry
"""
pass