Skip to content

Commit 6b6d83c

Browse files
authored
Merge pull request #184 from chaostoolkit/issue187
Pass all secrets to all control points
2 parents 527e1fd + 0c2145c commit 6b6d83c

File tree

5 files changed

+88
-10
lines changed

5 files changed

+88
-10
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44

55
[Unreleased]: https://github.com/chaostoolkit/chaostoolkit-lib/compare/1.12.0...HEAD
66

7+
### Changed
8+
9+
- Always pass all secrets to control hookpoints [#187][187]
10+
11+
[187]: https://github.com/chaostoolkit/chaostoolkit/issues/187
12+
713
## [1.12.0][] - 2020-08-17
814

915
[1.12.0]: https://github.com/chaostoolkit/chaostoolkit-lib/compare/1.11.1...1.12.0

chaoslib/control/python.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,9 @@ def apply_python_control(level: str, control: Control, # noqa: C901
124124
arguments = substitute(arguments, configuration, secrets)
125125

126126
sig = inspect.signature(func)
127-
if "secrets" in provider and "secrets" in sig.parameters:
128-
arguments["secrets"] = {}
129-
for s in provider["secrets"]:
130-
arguments["secrets"].update(secrets.get(s, {}))
127+
128+
if "secrets" in sig.parameters:
129+
arguments["secrets"] = secrets
131130

132131
if "configuration" in sig.parameters:
133132
arguments["configuration"] = configuration
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from typing import Any, Dict, List
2+
3+
from chaoslib.types import Activity, Configuration, \
4+
Experiment, Hypothesis, Journal, Run, Secrets, Settings
5+
6+
7+
def configure_control(experiment: Experiment, configuration: Configuration,
8+
secrets: Secrets, settings: Settings):
9+
experiment["configure_control_secrets"] = secrets
10+
11+
12+
def cleanup_control():
13+
pass
14+
15+
16+
def before_experiment_control(context: Experiment, secrets: Secrets, **kwargs):
17+
context["before_experiment_control_secrets"] = secrets
18+
19+
20+
def after_experiment_control(context: Experiment, state: Journal, secrets: Secrets, **kwargs):
21+
context["after_experiment_control_secrets"] = secrets
22+
23+
24+
def before_hypothesis_control(context: Hypothesis, experiment: Experiment, secrets: Secrets, **kwargs):
25+
experiment["before_hypothesis_control_secrets"] = secrets
26+
27+
28+
def after_hypothesis_control(context: Hypothesis, experiment: Experiment,
29+
state: Dict[str, Any], secrets: Secrets, **kwargs):
30+
experiment["after_hypothesis_control_secrets"] = secrets
31+
32+
33+
def before_method_control(context: Experiment, secrets: Secrets, **kwargs):
34+
context["before_method_control_secrets"] = secrets
35+
36+
37+
def after_method_control(context: Experiment, state: List[Run], secrets: Secrets, **kwargs):
38+
context["after_method_control_secrets"] = secrets
39+
40+
41+
def before_rollback_control(context: Experiment, secrets: Secrets, **kwargs):
42+
context["before_rollback_control_secrets"] = secrets
43+
44+
45+
def after_rollback_control(context: Experiment, state: List[Run], secrets: Secrets, **kwargs):
46+
context["after_rollback_control_secrets"] = secrets
47+
48+
49+
def before_activity_control(context: Activity, experiment: Experiment, secrets: Secrets, **kwargs):
50+
experiment["before_activity_control_secrets"] = secrets
51+
52+
53+
def after_activity_control(context: Activity, experiment: Experiment, state: Run, secrets: Secrets, **kwargs):
54+
experiment["after_activity_control_secrets"] = secrets

tests/fixtures/experiments.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,15 @@
310310
}
311311
]
312312

313+
ExperimentWithControlsRequiringSecrets = deepcopy(ExperimentWithControls)
314+
ExperimentWithControlsRequiringSecrets["secrets"] = {
315+
"mystuff": {
316+
"somesecret": "somevalue"
317+
}
318+
}
319+
ExperimentWithControlsRequiringSecrets["controls"][0]["provider"]["module"] = "fixtures.controls.dummy_with_secrets"
320+
ExperimentWithControlsRequiringSecrets["controls"][0]["provider"]["secrets"] = ["mystuff"]
321+
313322
ExperimentWithControlsThatUpdatedConfiguration = deepcopy(ExperimentNoControls)
314323
ExperimentWithControlsThatUpdatedConfiguration["configuration"] = {
315324
"my_token": "UNSET"

tests/test_control.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -558,15 +558,25 @@ def test_controls_on_loaded_experiment():
558558

559559
def test_control_can_update_configuration():
560560
exp = deepcopy(experiments.ExperimentWithControlsThatUpdatedConfiguration)
561-
with controls("experiment", exp, context=exp):
562-
state = run_experiment(exp)
563-
561+
state = run_experiment(exp)
564562
assert state["run"][0]["output"] != "UNSET"
565563

566564

567565
def test_control_can_update_secrets():
568566
exp = deepcopy(experiments.ExperimentWithControlsThatUpdatedSecrets)
569-
with controls("experiment", exp, context=exp):
570-
state = run_experiment(exp)
571-
567+
state = run_experiment(exp)
572568
assert state["run"][0]["output"] != "UNSET"
569+
570+
571+
def test_secrets_are_passed_to_all_control_hookpoints():
572+
exp = deepcopy(experiments.ExperimentWithControlsRequiringSecrets)
573+
run_experiment(exp)
574+
575+
secrets = exp["secrets"]
576+
for hookpoint in ("configure_control", "before_experiment_control",
577+
"after_experiment_control", "before_method_control",
578+
"after_method_control", "before_rollback_control",
579+
"after_rollback_control", "before_hypothesis_control",
580+
"after_hypothesis_control", "before_activity_control",
581+
"after_activity_control"):
582+
assert exp["{}_secrets".format(hookpoint)] == secrets, "{} was not provided the secrets".format(hookpoint)

0 commit comments

Comments
 (0)