watcher-tempest-plugin 3.7.0__tar.gz → 3.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/.zuul.yaml +15 -8
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/AUTHORS +2 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/ChangeLog +22 -0
- {watcher_tempest_plugin-3.7.0/watcher_tempest_plugin.egg-info → watcher_tempest_plugin-3.9.0}/PKG-INFO +7 -4
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/README.rst +4 -0
- watcher_tempest_plugin-3.9.0/releasenotes/notes/parametrize-promtool-write-url-path-3534f2b9.yaml +8 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/requirements.txt +1 -1
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/setup.cfg +1 -2
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/config.py +48 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/infra_optim_clients.py +1 -22
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/metric/prometheus_client.py +43 -8
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/base.py +2 -2
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_action.py +7 -4
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_action_plan.py +11 -8
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_audit.py +15 -10
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_action.py +5 -2
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_action_plan.py +7 -4
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_audit.py +13 -10
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/common/base.py +9 -6
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/base.py +153 -51
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_continuous_audit.py +12 -12
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_data_model.py +9 -3
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_actuator.py +4 -4
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin/tests/scenario/test_execute_host_maintenance.py +195 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_node_resource_consolidation.py +71 -2
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin/tests/scenario/test_execute_skipped_actions.py +667 -0
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin/tests/scenario/test_execute_vm_workload_consolidation.py +171 -0
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin/tests/scenario/test_execute_workload_balance.py +305 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_workload_stabilization.py +76 -1
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin/tests/scenario/test_execute_zone_migration.py +646 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0/watcher_tempest_plugin.egg-info}/PKG-INFO +7 -4
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/SOURCES.txt +2 -0
- watcher_tempest_plugin-3.9.0/watcher_tempest_plugin.egg-info/pbr.json +1 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/requires.txt +1 -1
- watcher_tempest_plugin-3.7.0/watcher_tempest_plugin/tests/scenario/test_execute_host_maintenance.py +0 -114
- watcher_tempest_plugin-3.7.0/watcher_tempest_plugin/tests/scenario/test_execute_vm_workload_consolidation.py +0 -91
- watcher_tempest_plugin-3.7.0/watcher_tempest_plugin/tests/scenario/test_execute_workload_balance.py +0 -137
- watcher_tempest_plugin-3.7.0/watcher_tempest_plugin/tests/scenario/test_execute_zone_migration.py +0 -334
- watcher_tempest_plugin-3.7.0/watcher_tempest_plugin.egg-info/pbr.json +0 -1
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/.coveragerc +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/.mailmap +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/.stestr.conf +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/.testr.conf +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/CONTRIBUTING.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/HACKING.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/LICENSE +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/doc/requirements.txt +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/doc/source/conf.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/doc/source/contributing.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/doc/source/index.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/doc/source/readme.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/pyproject.toml +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/notes/.placeholder +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/notes/drop-py-2-7-eb1979587d237f5e.yaml +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/notes/drop-python38-support-eeb09a8bc0170ce2.yaml +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/source/_static/.placeholder +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/source/_templates/.placeholder +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/source/conf.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/source/index.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/releasenotes/source/unreleased.rst +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/setup.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/test-requirements.txt +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/tox.ini +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/plugin.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/base.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/infra_optim/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/infra_optim/v1/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/infra_optim/v1/json/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/infra_optim/v1/json/api_microversion_fixture.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/infra_optim/v1/json/client.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/metric/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/metric/v1/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/metric/v1/json/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/services/metric/v1/json/client.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_api_discovery.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_audit_template.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_data_model.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_goal.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_scoring_engine.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_service.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/api/admin/test_strategy.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/base.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_audit_template.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_goal.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_scoring_engine.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_service.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/client_functional/v1/test_strategy.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/common/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/__init__.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_basic_optim.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_dummy_optim.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_storage_balance.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/tests/scenario/test_execute_strategies_real.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/utils.py +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/dependency_links.txt +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/entry_points.txt +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/not-zip-safe +0 -0
- {watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin.egg-info/top_level.txt +0 -0
|
@@ -10,26 +10,39 @@
|
|
|
10
10
|
- watcher-tempest-aetos
|
|
11
11
|
- watcher-tempest-gnocchi
|
|
12
12
|
- watcher-tempest-prometheus
|
|
13
|
+
- watcher-tempest-aetos-2026-1
|
|
14
|
+
- watcher-tempest-gnocchi-2026-1
|
|
13
15
|
- watcher-tempest-aetos-2025-2
|
|
14
16
|
- watcher-tempest-gnocchi-2025-2
|
|
15
17
|
- watcher-tempest-gnocchi-2025-1
|
|
16
18
|
- watcher-tempest-prometheus-2025-1
|
|
17
|
-
- watcher-tempest-gnocchi-2024-2
|
|
18
19
|
gate:
|
|
19
20
|
jobs:
|
|
20
21
|
- watcher-tempest-aetos
|
|
21
22
|
- watcher-tempest-gnocchi
|
|
22
23
|
- watcher-tempest-prometheus
|
|
24
|
+
- watcher-tempest-aetos-2026-1
|
|
25
|
+
- watcher-tempest-gnocchi-2026-1
|
|
23
26
|
- watcher-tempest-aetos-2025-2
|
|
24
27
|
- watcher-tempest-gnocchi-2025-2
|
|
25
28
|
- watcher-tempest-gnocchi-2025-1
|
|
26
29
|
- watcher-tempest-prometheus-2025-1
|
|
27
|
-
- watcher-tempest-gnocchi-2024-2
|
|
28
30
|
experimental:
|
|
29
31
|
jobs:
|
|
30
32
|
- watcher-tempest-prometheus-realdata
|
|
31
33
|
- watcher-tempest-aetos-realdata
|
|
32
34
|
|
|
35
|
+
# stable/2026.1 jobs
|
|
36
|
+
- job:
|
|
37
|
+
name: watcher-tempest-aetos-2026-1
|
|
38
|
+
parent: watcher-tempest-aetos
|
|
39
|
+
override-checkout: stable/2026.1
|
|
40
|
+
|
|
41
|
+
- job:
|
|
42
|
+
name: watcher-tempest-gnocchi-2026-1
|
|
43
|
+
parent: watcher-tempest-gnocchi
|
|
44
|
+
override-checkout: stable/2026.1
|
|
45
|
+
|
|
33
46
|
# stable/2025.2 jobs
|
|
34
47
|
- job:
|
|
35
48
|
name: watcher-tempest-aetos-2025-2
|
|
@@ -51,9 +64,3 @@
|
|
|
51
64
|
name: watcher-tempest-prometheus-2025-1
|
|
52
65
|
parent: watcher-tempest-prometheus
|
|
53
66
|
override-checkout: stable/2025.1
|
|
54
|
-
|
|
55
|
-
# stable/2024.2 jobs
|
|
56
|
-
- job:
|
|
57
|
-
name: watcher-tempest-gnocchi-2024-2
|
|
58
|
-
parent: watcher-tempest-gnocchi
|
|
59
|
-
override-checkout: stable/2024.2
|
|
@@ -9,11 +9,13 @@ Dantali0n <info@dantalion.nl>
|
|
|
9
9
|
David TARDIVEL <David.TARDIVEL@b-com.com>
|
|
10
10
|
Douglas Viroel <viroel@gmail.com>
|
|
11
11
|
Drew Thorstensen <thorst@us.ibm.com>
|
|
12
|
+
Ghanshyam Maan <gmaan.os14@gmail.com>
|
|
12
13
|
Ghanshyam Maan <gmaan@ghanshyammann.com>
|
|
13
14
|
Ghanshyam Mann <gmann@ghanshyammann.com>
|
|
14
15
|
Gábor Antal <antal@inf.u-szeged.hu>
|
|
15
16
|
Hervé Beraud <hberaud@redhat.com>
|
|
16
17
|
Hidekazu Nakamura <hid-nakamura@vf.jp.nec.com>
|
|
18
|
+
Ivan Anfimov <lazekteam@gmail.com>
|
|
17
19
|
Jaewoo Park <jp655p@att.com>
|
|
18
20
|
Jaromir Wysoglad <jwysogla@redhat.com>
|
|
19
21
|
Ken'ichi Ohmichi <ken-oomichi@wx.jp.nec.com>
|
|
@@ -1,10 +1,32 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
3.9.0
|
|
5
|
+
-----
|
|
6
|
+
|
|
7
|
+
* Handle multi-cell deployments in live-migration scenario tests
|
|
8
|
+
* Fix test\_data\_model\_with\_instances for environments with extra compute nodes
|
|
9
|
+
* Make test polling intervals and timeouts configurable
|
|
10
|
+
* Drop python 3.10
|
|
11
|
+
* Add comprehensive tests for action precondition
|
|
12
|
+
* Replace ExtendPlacementClient with tempest lib
|
|
13
|
+
* Add disk constraint validation to workload\_balance
|
|
14
|
+
* Add scenario tests for boot from volume instances
|
|
15
|
+
|
|
16
|
+
3.8.0
|
|
17
|
+
-----
|
|
18
|
+
|
|
19
|
+
* Remove 2024.2 jobs from the zuul gates
|
|
20
|
+
* Add stable/2026.1 job
|
|
21
|
+
* Parametrize promtool write URL path
|
|
22
|
+
* Add extra checks to zone migration retype test
|
|
23
|
+
* Test zone migration volume and compute migrations
|
|
24
|
+
|
|
4
25
|
3.7.0
|
|
5
26
|
-----
|
|
6
27
|
|
|
7
28
|
* Add test for volume migrate with zone migration
|
|
29
|
+
* Add project badge
|
|
8
30
|
* Consolidate and improve Zuul CI jobs for stable branches
|
|
9
31
|
* Fix unsupported operand types in internal methods
|
|
10
32
|
* Refresh the state of the actionplan before asserting status
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: watcher-tempest-plugin
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.9.0
|
|
4
4
|
Summary: Tempest plugin watcher-tempest-plugin
|
|
5
5
|
Home-page: https://docs.openstack.org/watcher/latest/
|
|
6
6
|
Author: OpenStack
|
|
@@ -14,16 +14,15 @@ Classifier: Programming Language :: Python
|
|
|
14
14
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
15
15
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.11
|
|
22
21
|
License-File: LICENSE
|
|
23
22
|
Requires-Dist: pbr>=3.1.1
|
|
24
23
|
Requires-Dist: oslo.log>=3.36.0
|
|
25
24
|
Requires-Dist: oslo.utils>=3.33.0
|
|
26
|
-
Requires-Dist: tempest>=
|
|
25
|
+
Requires-Dist: tempest>=41.0.0
|
|
27
26
|
Requires-Dist: os-traits>=0.15.0
|
|
28
27
|
Dynamic: author
|
|
29
28
|
Dynamic: author-email
|
|
@@ -39,6 +38,10 @@ Dynamic: summary
|
|
|
39
38
|
watcher-tempest-plugin
|
|
40
39
|
======================
|
|
41
40
|
|
|
41
|
+
.. image:: https://governance.openstack.org/tc/badges/watcher-tempest-plugin.svg
|
|
42
|
+
|
|
43
|
+
.. Change things from this point on
|
|
44
|
+
|
|
42
45
|
This repository contains a `Tempest`_ `test plugin`_ to verify the
|
|
43
46
|
functionality of the `Watcher`_ service.
|
|
44
47
|
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
watcher-tempest-plugin
|
|
3
3
|
======================
|
|
4
4
|
|
|
5
|
+
.. image:: https://governance.openstack.org/tc/badges/watcher-tempest-plugin.svg
|
|
6
|
+
|
|
7
|
+
.. Change things from this point on
|
|
8
|
+
|
|
5
9
|
This repository contains a `Tempest`_ `test plugin`_ to verify the
|
|
6
10
|
functionality of the `Watcher`_ service.
|
|
7
11
|
|
watcher_tempest_plugin-3.9.0/releasenotes/notes/parametrize-promtool-write-url-path-3534f2b9.yaml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
features:
|
|
3
|
+
- |
|
|
4
|
+
Added a new ``prometheus_write_path`` configuration option under the
|
|
5
|
+
``[optimize]`` section to allow customizing the URL path appended to the
|
|
6
|
+
Prometheus base URL for remote write operations. The default value is
|
|
7
|
+
``/api/v1/write``, preserving the existing behavior. Set it to an empty
|
|
8
|
+
string if the base URL already includes the full write endpoint.
|
|
@@ -6,7 +6,7 @@ description_file =
|
|
|
6
6
|
author = OpenStack
|
|
7
7
|
author_email = openstack-discuss@lists.openstack.org
|
|
8
8
|
home_page = https://docs.openstack.org/watcher/latest/
|
|
9
|
-
python_requires = >=3.
|
|
9
|
+
python_requires = >=3.11
|
|
10
10
|
classifier =
|
|
11
11
|
Environment :: OpenStack
|
|
12
12
|
Intended Audience :: Information Technology
|
|
@@ -17,7 +17,6 @@ classifier =
|
|
|
17
17
|
Programming Language :: Python :: Implementation :: CPython
|
|
18
18
|
Programming Language :: Python :: 3 :: Only
|
|
19
19
|
Programming Language :: Python :: 3
|
|
20
|
-
Programming Language :: Python :: 3.10
|
|
21
20
|
Programming Language :: Python :: 3.11
|
|
22
21
|
Programming Language :: Python :: 3.12
|
|
23
22
|
Programming Language :: Python :: 3.13
|
{watcher_tempest_plugin-3.7.0 → watcher_tempest_plugin-3.9.0}/watcher_tempest_plugin/config.py
RENAMED
|
@@ -96,6 +96,13 @@ OptimizationGroup = [
|
|
|
96
96
|
help="The label that Prometheus uses to store the fqdn of "
|
|
97
97
|
"exporters.",
|
|
98
98
|
),
|
|
99
|
+
cfg.StrOpt(
|
|
100
|
+
"prometheus_write_path",
|
|
101
|
+
default="/api/v1/write",
|
|
102
|
+
help="The URL path to append to the Prometheus base URL for "
|
|
103
|
+
"remote write operations. Set to an empty string if the "
|
|
104
|
+
"base URL already includes the full write endpoint.",
|
|
105
|
+
),
|
|
99
106
|
# Podified control plane configuration
|
|
100
107
|
cfg.StrOpt(
|
|
101
108
|
"podified_kubeconfig_path",
|
|
@@ -115,6 +122,33 @@ OptimizationGroup = [
|
|
|
115
122
|
help="In real-data test cases, the period of time during which "
|
|
116
123
|
"the load will be executed in seconds."
|
|
117
124
|
),
|
|
125
|
+
cfg.FloatOpt(
|
|
126
|
+
"model_check_interval",
|
|
127
|
+
default=1.0,
|
|
128
|
+
help="Interval in seconds between polls when waiting for the "
|
|
129
|
+
"Watcher compute data model to reflect instance changes "
|
|
130
|
+
"(creation, attribute updates, deletion)."
|
|
131
|
+
),
|
|
132
|
+
cfg.FloatOpt(
|
|
133
|
+
"resource_check_interval",
|
|
134
|
+
default=1.0,
|
|
135
|
+
help="Interval in seconds between polls when waiting for Watcher "
|
|
136
|
+
"resources (audits, action plans, compute nodes) to reach "
|
|
137
|
+
"an expected state."
|
|
138
|
+
),
|
|
139
|
+
cfg.IntOpt(
|
|
140
|
+
"resource_timeout",
|
|
141
|
+
default=300,
|
|
142
|
+
help="Maximum time in seconds to wait for Watcher resources "
|
|
143
|
+
"(audits, action plans, compute nodes) to reach an expected "
|
|
144
|
+
"state."
|
|
145
|
+
),
|
|
146
|
+
cfg.IntOpt(
|
|
147
|
+
"model_timeout",
|
|
148
|
+
default=300,
|
|
149
|
+
help="Maximum time in seconds to wait for the Watcher compute "
|
|
150
|
+
"data model to reflect instance changes."
|
|
151
|
+
),
|
|
118
152
|
cfg.StrOpt(
|
|
119
153
|
"min_microversion",
|
|
120
154
|
default=None,
|
|
@@ -155,4 +189,18 @@ OptimizationGroup = [
|
|
|
155
189
|
default=False,
|
|
156
190
|
help="Whether or not to run storage zone migration tests."
|
|
157
191
|
),
|
|
192
|
+
cfg.BoolOpt(
|
|
193
|
+
"run_bfv_tests",
|
|
194
|
+
default=False,
|
|
195
|
+
help="Whether or not to run boot from volume tests."
|
|
196
|
+
),
|
|
197
|
+
cfg.BoolOpt(
|
|
198
|
+
"run_skipped_action_tests",
|
|
199
|
+
default=False,
|
|
200
|
+
help="Whether or not to run skipped action precondition "
|
|
201
|
+
"validation tests. These tests validate that Watcher "
|
|
202
|
+
"properly skips or fails actions when preconditions "
|
|
203
|
+
"are not met. Requires Watcher to support the action "
|
|
204
|
+
"skipping feature."
|
|
205
|
+
)
|
|
158
206
|
]
|
|
@@ -16,12 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
import abc
|
|
18
18
|
|
|
19
|
-
from oslo_serialization import jsonutils as json
|
|
20
19
|
from tempest import clients
|
|
21
20
|
from tempest.common import credentials_factory as creds_factory
|
|
22
21
|
from tempest import config
|
|
23
|
-
from tempest.lib.common import rest_client
|
|
24
|
-
from tempest.lib.services.placement import placement_client
|
|
25
22
|
|
|
26
23
|
from watcher_tempest_plugin.services.infra_optim.v1.json import client as ioc
|
|
27
24
|
from watcher_tempest_plugin.services.metric import prometheus_client as pc
|
|
@@ -38,8 +35,6 @@ class BaseManager(clients.Manager, metaclass=abc.ABCMeta):
|
|
|
38
35
|
self.auth_provider, 'infra-optim', CONF.identity.region)
|
|
39
36
|
self.gn_client = gc.GnocchiClientJSON(
|
|
40
37
|
self.auth_provider, 'metric', CONF.identity.region)
|
|
41
|
-
self.placement_client = ExtendPlacementClient(
|
|
42
|
-
self.auth_provider, 'placement', CONF.identity.region)
|
|
43
38
|
prom_ssl = "s" if CONF.optimize.prometheus_ssl_enabled else ""
|
|
44
39
|
self.prometheus_client = pc.PromtoolClient(
|
|
45
40
|
"http{}://{}:{}".format(prom_ssl,
|
|
@@ -55,6 +50,7 @@ class BaseManager(clients.Manager, metaclass=abc.ABCMeta):
|
|
|
55
50
|
podified_kubeconfig=CONF.optimize.podified_kubeconfig_path,
|
|
56
51
|
prometheus_ssl_cert=CONF.optimize.prometheus_ssl_cert_dir,
|
|
57
52
|
prometheus_fqdn_label=CONF.optimize.prometheus_fqdn_label,
|
|
53
|
+
write_url_path=CONF.optimize.prometheus_write_path,
|
|
58
54
|
)
|
|
59
55
|
|
|
60
56
|
|
|
@@ -63,20 +59,3 @@ class AdminManager(BaseManager):
|
|
|
63
59
|
super(AdminManager, self).__init__(
|
|
64
60
|
creds_factory.get_configured_admin_credentials(),
|
|
65
61
|
)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class ExtendPlacementClient(placement_client.PlacementClient):
|
|
69
|
-
|
|
70
|
-
def list_provider_traits(self, rp_uuid):
|
|
71
|
-
"""List resource provider traits.
|
|
72
|
-
|
|
73
|
-
For full list of available parameters, please refer to the official
|
|
74
|
-
API reference:
|
|
75
|
-
https://docs.openstack.org/api-ref/placement/#
|
|
76
|
-
list-resource-provider-traits-detail
|
|
77
|
-
"""
|
|
78
|
-
url = '/resource_providers/%s/traits' % rp_uuid
|
|
79
|
-
resp, body = self.get(url)
|
|
80
|
-
self.expected_success(200, resp.status)
|
|
81
|
-
body = json.loads(body)
|
|
82
|
-
return rest_client.ResponseBody(resp, body)
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
# under the License.
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
|
+
from urllib import parse
|
|
16
17
|
|
|
17
18
|
from oslo_log import log
|
|
18
|
-
from urllib.parse import quote
|
|
19
19
|
|
|
20
20
|
from watcher_tempest_plugin.services import base
|
|
21
21
|
|
|
@@ -31,8 +31,32 @@ class PromtoolClient:
|
|
|
31
31
|
proxy_host_pkey=None, proxy_host_pkey_type='rsa',
|
|
32
32
|
podified_ns=None, podified_kubeconfig=None,
|
|
33
33
|
prometheus_ssl_cert=None,
|
|
34
|
-
prometheus_fqdn_label="fqdn"
|
|
35
|
-
|
|
34
|
+
prometheus_fqdn_label="fqdn",
|
|
35
|
+
write_url_path=None):
|
|
36
|
+
"""Initialize PromtoolClient.
|
|
37
|
+
|
|
38
|
+
:param url: Base URL of the Prometheus server (e.g.
|
|
39
|
+
'http://host:9090').
|
|
40
|
+
:param promtool_path: Path to the promtool binary.
|
|
41
|
+
:param openstack_type: Deployment type; use 'podified' for
|
|
42
|
+
Podified Control Plane deployments, 'devstack' otherwise.
|
|
43
|
+
:param proxy_host_address: Optional SSH proxy host address. When
|
|
44
|
+
provided together with proxy_host_user, commands are executed
|
|
45
|
+
over SSH instead of locally.
|
|
46
|
+
:param proxy_host_user: SSH username for the proxy host.
|
|
47
|
+
:param proxy_host_pkey: Path to the SSH private key file.
|
|
48
|
+
:param proxy_host_pkey_type: Type of the SSH private key
|
|
49
|
+
(default: 'rsa').
|
|
50
|
+
:param podified_ns: Kubernetes namespace for podified deployments.
|
|
51
|
+
:param podified_kubeconfig: Path to the kubeconfig file for
|
|
52
|
+
podified deployments.
|
|
53
|
+
:param prometheus_ssl_cert: Directory containing SSL certificates
|
|
54
|
+
used when connecting to Prometheus over HTTPS.
|
|
55
|
+
:param prometheus_fqdn_label: Prometheus label used to identify
|
|
56
|
+
host FQDNs in target metadata (default: 'fqdn').
|
|
57
|
+
:param write_url_path: URL path for the remote-write endpoint
|
|
58
|
+
(default: '/api/v1/write').
|
|
59
|
+
"""
|
|
36
60
|
# Podified Control Plane
|
|
37
61
|
self.is_podified = ("podified" == openstack_type)
|
|
38
62
|
LOG.debug(f"Configuring PromtoolClient for {openstack_type} "
|
|
@@ -61,12 +85,23 @@ class PromtoolClient:
|
|
|
61
85
|
cmd_prefix = self.oc_cmd + ["rsh", self.prometheus_pod]
|
|
62
86
|
self.client.cmd_prefix = " ".join(cmd_prefix)
|
|
63
87
|
|
|
88
|
+
# We keep the raw URL for reference/labels
|
|
64
89
|
self.prometheus_url = url
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
90
|
+
|
|
91
|
+
# Internal base_url ensuring a trailing slash for reliable joining
|
|
92
|
+
base_url = url if url.endswith('/') else url + '/'
|
|
93
|
+
|
|
94
|
+
# Handle write_url_path: handles None/Empty and leading slash issues
|
|
95
|
+
clean_write_path = (write_url_path or "").lstrip('/')
|
|
96
|
+
self.prometheus_write_url = parse.urljoin(base_url, clean_write_path)
|
|
97
|
+
|
|
98
|
+
self.prometheus_delete_series_url = parse.urljoin(
|
|
99
|
+
base_url, "api/v1/admin/tsdb/delete_series"
|
|
100
|
+
)
|
|
68
101
|
# active targets
|
|
69
|
-
self.prometheus_targets_url =
|
|
102
|
+
self.prometheus_targets_url = parse.urljoin(
|
|
103
|
+
base_url, "api/v1/targets?state=active"
|
|
104
|
+
)
|
|
70
105
|
self.prometheus_fqdn_label = prometheus_fqdn_label
|
|
71
106
|
self.promtool_cmd = [promtool_path]
|
|
72
107
|
if prometheus_ssl_cert:
|
|
@@ -137,7 +172,7 @@ class PromtoolClient:
|
|
|
137
172
|
# with double quotes both on direct command and
|
|
138
173
|
# ssh command so using url encoding
|
|
139
174
|
|
|
140
|
-
quoted_expr = quote(expr)
|
|
175
|
+
quoted_expr = parse.quote(expr)
|
|
141
176
|
|
|
142
177
|
cmd = ['curl', '-s', '-k', '-X', 'POST', '-g',
|
|
143
178
|
self.prometheus_delete_series_url + '?match[]=' + quoted_expr]
|
|
@@ -91,8 +91,8 @@ class BaseInfraOptimTest(api_version_utils.BaseMicroversionTest,
|
|
|
91
91
|
def wait_for_all_action_plans_to_finish(self):
|
|
92
92
|
assert test_utils.call_until_true(
|
|
93
93
|
func=self._are_all_action_plans_finished,
|
|
94
|
-
duration=
|
|
95
|
-
sleep_for=
|
|
94
|
+
duration=CONF.optimize.resource_timeout,
|
|
95
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
96
96
|
)
|
|
97
97
|
|
|
98
98
|
def validate_self_link(self, resource, uuid, link):
|
|
@@ -17,11 +17,14 @@
|
|
|
17
17
|
import collections
|
|
18
18
|
import functools
|
|
19
19
|
|
|
20
|
+
from tempest import config
|
|
20
21
|
from tempest.lib.common.utils import test_utils
|
|
21
22
|
from tempest.lib import decorators
|
|
22
23
|
|
|
23
24
|
from watcher_tempest_plugin.tests.api.admin import base
|
|
24
25
|
|
|
26
|
+
CONF = config.CONF
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
class TestShowListAction(base.BaseInfraOptimTest):
|
|
27
30
|
"""Tests for actions"""
|
|
@@ -40,8 +43,8 @@ class TestShowListAction(base.BaseInfraOptimTest):
|
|
|
40
43
|
assert test_utils.call_until_true(
|
|
41
44
|
func=functools.partial(self.has_audit_finished,
|
|
42
45
|
self.audit['uuid']),
|
|
43
|
-
duration=
|
|
44
|
-
sleep_for
|
|
46
|
+
duration=CONF.optimize.resource_timeout,
|
|
47
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
45
48
|
), "Audit %s did not finish within expected time" % self.audit['uuid']
|
|
46
49
|
|
|
47
50
|
# Check if audit succeeded
|
|
@@ -148,8 +151,8 @@ class TestPatchAction(base.BaseInfraOptimTest):
|
|
|
148
151
|
assert test_utils.call_until_true(
|
|
149
152
|
func=functools.partial(self.has_audit_finished,
|
|
150
153
|
self.audit['uuid']),
|
|
151
|
-
duration=
|
|
152
|
-
sleep_for
|
|
154
|
+
duration=CONF.optimize.resource_timeout,
|
|
155
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
153
156
|
), "Audit %s did not finish within expected time" % self.audit['uuid']
|
|
154
157
|
|
|
155
158
|
# Check if audit succeeded
|
|
@@ -16,12 +16,15 @@
|
|
|
16
16
|
|
|
17
17
|
import functools
|
|
18
18
|
|
|
19
|
+
from tempest import config
|
|
19
20
|
from tempest.lib.common.utils import test_utils
|
|
20
21
|
from tempest.lib import decorators
|
|
21
22
|
from tempest.lib import exceptions
|
|
22
23
|
|
|
23
24
|
from watcher_tempest_plugin.tests.api.admin import base
|
|
24
25
|
|
|
26
|
+
CONF = config.CONF
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
class TestCreateDeleteExecuteActionPlan(base.BaseInfraOptimTest):
|
|
27
30
|
"""Tests for action plans"""
|
|
@@ -35,8 +38,8 @@ class TestCreateDeleteExecuteActionPlan(base.BaseInfraOptimTest):
|
|
|
35
38
|
|
|
36
39
|
self.assertTrue(test_utils.call_until_true(
|
|
37
40
|
func=functools.partial(self.has_audit_finished, audit['uuid']),
|
|
38
|
-
duration=
|
|
39
|
-
sleep_for
|
|
41
|
+
duration=CONF.optimize.resource_timeout,
|
|
42
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
40
43
|
))
|
|
41
44
|
_, action_plans = self.client.list_action_plans(
|
|
42
45
|
audit_uuid=audit['uuid'])
|
|
@@ -60,8 +63,8 @@ class TestCreateDeleteExecuteActionPlan(base.BaseInfraOptimTest):
|
|
|
60
63
|
|
|
61
64
|
self.assertTrue(test_utils.call_until_true(
|
|
62
65
|
func=functools.partial(self.has_audit_finished, audit['uuid']),
|
|
63
|
-
duration=
|
|
64
|
-
sleep_for
|
|
66
|
+
duration=CONF.optimize.resource_timeout,
|
|
67
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
65
68
|
))
|
|
66
69
|
|
|
67
70
|
_, action_plans = self.client.list_action_plans(
|
|
@@ -89,8 +92,8 @@ class TestCreateDeleteExecuteActionPlan(base.BaseInfraOptimTest):
|
|
|
89
92
|
|
|
90
93
|
self.assertTrue(test_utils.call_until_true(
|
|
91
94
|
func=functools.partial(self.has_audit_finished, audit['uuid']),
|
|
92
|
-
duration=
|
|
93
|
-
sleep_for
|
|
95
|
+
duration=CONF.optimize.resource_timeout,
|
|
96
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
94
97
|
))
|
|
95
98
|
|
|
96
99
|
_, action_plans = self.client.list_action_plans(
|
|
@@ -121,8 +124,8 @@ class TestShowListActionPlan(base.BaseInfraOptimTest):
|
|
|
121
124
|
assert test_utils.call_until_true(
|
|
122
125
|
func=functools.partial(
|
|
123
126
|
self.has_audit_finished, self.audit['uuid']),
|
|
124
|
-
duration=
|
|
125
|
-
sleep_for
|
|
127
|
+
duration=CONF.optimize.resource_timeout,
|
|
128
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
126
129
|
)
|
|
127
130
|
|
|
128
131
|
_, action_plans = self.client.list_action_plans(
|
|
@@ -20,6 +20,7 @@ from datetime import datetime
|
|
|
20
20
|
from datetime import timedelta
|
|
21
21
|
from datetime import timezone
|
|
22
22
|
|
|
23
|
+
from tempest import config
|
|
23
24
|
from tempest.lib.common.utils import test_utils
|
|
24
25
|
from tempest.lib import decorators
|
|
25
26
|
from tempest.lib import exceptions
|
|
@@ -27,6 +28,8 @@ from tempest.lib import exceptions
|
|
|
27
28
|
from watcher_tempest_plugin.tests.api.admin import base
|
|
28
29
|
from watcher_tempest_plugin.tests.common import base as common_base
|
|
29
30
|
|
|
31
|
+
CONF = config.CONF
|
|
32
|
+
|
|
30
33
|
|
|
31
34
|
class TestCreateUpdateDeleteAudit(base.BaseInfraOptimTest):
|
|
32
35
|
"""Tests for audit."""
|
|
@@ -149,8 +152,8 @@ class TestCreateUpdateDeleteAudit(base.BaseInfraOptimTest):
|
|
|
149
152
|
test_utils.call_until_true(
|
|
150
153
|
func=functools.partial(
|
|
151
154
|
self.is_audit_ongoing, audit_uuid),
|
|
152
|
-
duration=
|
|
153
|
-
sleep_for
|
|
155
|
+
duration=CONF.optimize.resource_timeout,
|
|
156
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
154
157
|
)
|
|
155
158
|
|
|
156
159
|
self.cancel_audit(audit_uuid)
|
|
@@ -166,8 +169,8 @@ class TestCreateUpdateDeleteAudit(base.BaseInfraOptimTest):
|
|
|
166
169
|
test_utils.call_until_true(
|
|
167
170
|
func=functools.partial(
|
|
168
171
|
self.is_audit_idle, audit_uuid),
|
|
169
|
-
duration=
|
|
170
|
-
sleep_for
|
|
172
|
+
duration=CONF.optimize.resource_timeout,
|
|
173
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
171
174
|
)
|
|
172
175
|
|
|
173
176
|
def is_audit_deleted(uuid):
|
|
@@ -180,8 +183,8 @@ class TestCreateUpdateDeleteAudit(base.BaseInfraOptimTest):
|
|
|
180
183
|
|
|
181
184
|
test_utils.call_until_true(
|
|
182
185
|
func=functools.partial(is_audit_deleted, audit_uuid),
|
|
183
|
-
duration=
|
|
184
|
-
sleep_for=
|
|
186
|
+
duration=CONF.optimize.resource_timeout,
|
|
187
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
185
188
|
)
|
|
186
189
|
|
|
187
190
|
self.assertTrue(is_audit_deleted(audit_uuid))
|
|
@@ -291,13 +294,15 @@ class TestCreateUpdateDeleteAuditV11(base.BaseInfraOptimTest):
|
|
|
291
294
|
# Wait for first action plan
|
|
292
295
|
self.assertTrue(test_utils.call_until_true(
|
|
293
296
|
func=functools.partial(self.has_action_plans, audit_uuid),
|
|
294
|
-
duration=
|
|
297
|
+
duration=CONF.optimize.resource_timeout,
|
|
298
|
+
sleep_for=CONF.optimize.resource_check_interval))
|
|
295
299
|
|
|
296
300
|
# Wait for multiple action plans (superseding behavior)
|
|
297
301
|
self.assertTrue(test_utils.call_until_true(
|
|
298
302
|
func=functools.partial(self._has_multiple_action_plans,
|
|
299
303
|
audit_uuid),
|
|
300
|
-
duration=
|
|
304
|
+
duration=CONF.optimize.resource_timeout,
|
|
305
|
+
sleep_for=CONF.optimize.resource_check_interval),
|
|
301
306
|
"Failed to generate multiple action plans for superseding test")
|
|
302
307
|
|
|
303
308
|
# Verify superseding: latest RECOMMENDED, previous CANCELLED
|
|
@@ -432,8 +437,8 @@ class TestShowListAudit(base.BaseInfraOptimTest):
|
|
|
432
437
|
self.assertTrue(test_utils.call_until_true(
|
|
433
438
|
func=functools.partial(
|
|
434
439
|
self.has_audit_finished, self.audit['uuid']),
|
|
435
|
-
duration=
|
|
436
|
-
sleep_for
|
|
440
|
+
duration=CONF.optimize.resource_timeout,
|
|
441
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
437
442
|
))
|
|
438
443
|
|
|
439
444
|
def assert_expected(self, expected, actual,
|
|
@@ -17,11 +17,14 @@ from oslo_utils import uuidutils
|
|
|
17
17
|
|
|
18
18
|
import functools
|
|
19
19
|
|
|
20
|
+
from tempest import config
|
|
20
21
|
from tempest.lib.common.utils import test_utils
|
|
21
22
|
from tempest.lib import decorators
|
|
22
23
|
|
|
23
24
|
from watcher_tempest_plugin.tests.client_functional.v1 import base
|
|
24
25
|
|
|
26
|
+
CONF = config.CONF
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
class ActionTests(base.TestCase):
|
|
27
30
|
"""Functional tests for action."""
|
|
@@ -43,8 +46,8 @@ class ActionTests(base.TestCase):
|
|
|
43
46
|
cls.audit_uuid = audit_output['UUID']
|
|
44
47
|
audit_created = test_utils.call_until_true(
|
|
45
48
|
func=functools.partial(cls.has_audit_created, cls.audit_uuid),
|
|
46
|
-
duration=
|
|
47
|
-
sleep_for=
|
|
49
|
+
duration=CONF.optimize.resource_timeout,
|
|
50
|
+
sleep_for=CONF.optimize.resource_check_interval)
|
|
48
51
|
if not audit_created:
|
|
49
52
|
raise Exception('Audit has not been succeeded')
|
|
50
53
|
|
|
@@ -17,11 +17,14 @@ from oslo_utils import uuidutils
|
|
|
17
17
|
|
|
18
18
|
import functools
|
|
19
19
|
|
|
20
|
+
from tempest import config
|
|
20
21
|
from tempest.lib.common.utils import test_utils
|
|
21
22
|
from tempest.lib import decorators
|
|
22
23
|
|
|
23
24
|
from watcher_tempest_plugin.tests.client_functional.v1 import base
|
|
24
25
|
|
|
26
|
+
CONF = config.CONF
|
|
27
|
+
|
|
25
28
|
|
|
26
29
|
class ActionPlanTests(base.TestCase):
|
|
27
30
|
"""Functional tests for action plan."""
|
|
@@ -45,8 +48,8 @@ class ActionPlanTests(base.TestCase):
|
|
|
45
48
|
cls.audit_uuid = audit_output['UUID']
|
|
46
49
|
audit_created = test_utils.call_until_true(
|
|
47
50
|
func=functools.partial(cls.has_audit_created, cls.audit_uuid),
|
|
48
|
-
duration=
|
|
49
|
-
sleep_for=
|
|
51
|
+
duration=CONF.optimize.resource_timeout,
|
|
52
|
+
sleep_for=CONF.optimize.resource_check_interval)
|
|
50
53
|
if not audit_created:
|
|
51
54
|
raise Exception('Audit has not been succeeded')
|
|
52
55
|
|
|
@@ -97,6 +100,6 @@ class ActionPlanTests(base.TestCase):
|
|
|
97
100
|
self.assertTrue(test_utils.call_until_true(
|
|
98
101
|
func=functools.partial(
|
|
99
102
|
self.has_actionplan_succeeded, action_plan_uuid),
|
|
100
|
-
duration=
|
|
101
|
-
sleep_for=
|
|
103
|
+
duration=CONF.optimize.resource_timeout,
|
|
104
|
+
sleep_for=CONF.optimize.resource_check_interval
|
|
102
105
|
))
|