[VVP] Preload Generation Enhancements and Fixes
[vvp/validation-scripts.git] / ice_validator / app_tests / preload_tests / test_environment.py
1 # -*- coding: utf8 -*-
2 # ============LICENSE_START====================================================
3 # org.onap.vvp/validation-scripts
4 # ===================================================================
5 # Copyright © 2019 AT&T Intellectual Property. All rights reserved.
6 # ===================================================================
7 #
8 # Unless otherwise specified, all software contained herein is licensed
9 # under the Apache License, Version 2.0 (the "License");
10 # you may not use this software except in compliance with the License.
11 # You may obtain a copy of the License at
12 #
13 #             http://www.apache.org/licenses/LICENSE-2.0
14 #
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 # See the License for the specific language governing permissions and
19 # limitations under the License.
20 #
21 #
22 #
23 # Unless otherwise specified, all documentation contained herein is licensed
24 # under the Creative Commons License, Attribution 4.0 Intl. (the "License");
25 # you may not use this documentation except in compliance with the License.
26 # You may obtain a copy of the License at
27 #
28 #             https://creativecommons.org/licenses/by/4.0/
29 #
30 # Unless required by applicable law or agreed to in writing, documentation
31 # distributed under the License is distributed on an "AS IS" BASIS,
32 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33 # See the License for the specific language governing permissions and
34 # limitations under the License.
35 #
36 # ============LICENSE_END============================================
37 from pathlib import Path
38
39 import pytest
40 from mock import mock
41
42 from preload.environment import CloudServiceArchive, PreloadEnvironment
43
44 THIS_DIR = Path(__file__).parent
45 PRELOAD_ENV_DIR = THIS_DIR / "preload_envs"
46
47
48 @pytest.fixture(scope="session")
49 def csar():
50     return CloudServiceArchive(PRELOAD_ENV_DIR / "test.csar")
51
52
53 @pytest.fixture(scope="session")
54 def env():
55     return PreloadEnvironment(PRELOAD_ENV_DIR)
56
57
58 def test_csar_service_name(csar):
59     assert csar.service_name == "stark_vccf_svc"
60
61
62 def test_csar_str_and_repr(csar):
63     assert str(csar) == "CSAR (path=test.csar, name=stark_vccf_svc)"
64     assert repr(csar) == "CSAR (path=test.csar, name=stark_vccf_svc)"
65
66
67 def test_csar_vf_module_model_name(csar):
68     assert (
69         csar.get_vf_module_model_name("base_vIECCF")
70         == "StarkVccfVf..base_vIECCF..module-0"
71     )
72
73
74 def test_csar_get_vf_module_resource_name(csar):
75     assert csar.get_vf_module_resource_name("base_vIECCF") == "stark_vccf_vf"
76
77
78 def test_csar_get_vnf_type(csar):
79     assert csar.get_vnf_type("base_vIECCF") == "stark_vccf_svc/stark_vccf_vf"
80
81
82 def test_csar_get_vf_module_resource_name_not_found(csar):
83     assert csar.get_vf_module_resource_name("unknown") is None
84
85
86 def test_preload_environment_global_csar(env):
87     assert env.csar.service_name == "stark_vccf_svc"
88
89
90 def test_preload_environment_nest_env_csar_inherit(env):
91     env_two = env.get_environment("env_two")
92     assert env_two.csar.service_name == "stark_vccf_svc"
93
94
95 def test_preload_environment_nest_env_csar_override(env):
96     sub_env = env.get_environment("env_three")
97     assert sub_env.csar.service_name == "StarkMultiModule2_43550"
98
99
100 def test_preload_environment_environments(env):
101     names = {e.name for e in env.environments}
102     assert names == {"env_two", "env_three", "env_one_a"}
103
104
105 def test_preload_environment_environments_nested(env):
106     env_one = env.get_environment("env_one")
107     names = {e.name for e in env_one.environments}
108     assert names == {"env_one_a"}
109
110
111 def test_preload_environment_get_module_global_base(env):
112     module = env.get_module("base")
113     assert module["my_ip"] == "default"
114
115
116 def test_preload_environment_get_module_global_not_found(env):
117     module = env.get_module("unknown")
118     assert module == {}
119
120
121 def test_preload_environment_get_module_sub_env(env):
122     env_two = env.get_environment("env_two")
123     module = env_two.get_module("base")
124     assert module["my_ip"] == "192.168.0.2"
125     assert module["common"] == "ABC"
126
127
128 def test_preload_environment_module_names(env):
129     expected = {"base.env", "incremental.env"}
130     assert env.module_names == expected
131     # check a nested env with inherits all modules
132     assert env.get_environment("env_three").module_names == expected
133
134
135 def test_preload_environment_modules(env):
136     modules = env.modules
137     assert isinstance(modules, dict)
138     assert modules.keys() == {"base.env", "incremental.env"}
139     assert all(isinstance(val, dict) for val in modules.values())
140
141
142 def test_preload_environment_is_base(env):
143     assert env.is_base
144     assert not env.get_environment("env_one").is_base
145
146
147 def test_preload_environment_is_leaf(env):
148     assert not env.is_leaf
149     assert env.get_environment("env_two").is_leaf
150     assert not env.get_environment("env_one").is_leaf
151     assert env.get_environment("env_one_a").is_leaf
152
153
154 def test_preload_environment_str_repr(env):
155     assert str(env) == "PreloadEnvironment(name=preload_envs)"
156     assert repr(env) == "PreloadEnvironment(name=preload_envs)"
157
158
159 def test_preload_environment_defaults(env):
160     expected = {"availability_zone_0": "az0"}
161     assert env.defaults == expected
162     assert env.get_environment("env_one_a").defaults == expected
163
164
165 def test_preload_environment_defaults_merging_and_override(env):
166     assert env.get_environment("env_three").defaults == {
167         "availability_zone_0": "az0-b",
168         "custom_env_3": "default",
169     }
170
171
172 def test_preload_environment_defaults_in_module_env(env):
173     mod = env.get_environment("env_three").get_module("base")
174     assert mod == {
175         "availability_zone_0": "az0-b",
176         "common": "ABC",
177         "custom_env_3": "default",
178         "my_ip": "default",
179     }
180     mod = env.get_environment("env_one").get_module("base")
181     assert mod == {
182         "availability_zone_0": "az0",
183         "common": "ABC",
184         "my_ip": "192.168.0.1",
185     }
186
187
188 def test_preload_environment_uses_csar(env, monkeypatch):
189     csar = mock.MagicMock(spec=CloudServiceArchive)
190     csar.get_vnf_type = mock.Mock(return_value="stark_vccf_svc/stark_vccf_vf")
191     csar.get_vf_module_model_name = mock.Mock(return_value="model_name")
192     env = env.get_environment("env_three")
193     monkeypatch.setattr(env, "csar", csar)
194     mod = env.get_module("base")
195     assert mod["vnf-type"] == "stark_vccf_svc/stark_vccf_vf"
196     assert mod["vf-module-model-name"] == "model_name"