OLD | NEW |
| (Empty) |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | |
2 # Use of this source code is governed by a BSD-style license that can be | |
3 # found in the LICENSE file. | |
4 | |
5 DEPS = [ | |
6 'properties', | |
7 'step', | |
8 ] | |
9 | |
10 from recipe_engine import recipe_api | |
11 | |
12 def RunSteps(api): | |
13 # TODO(martinis) change this | |
14 # The api.step object is directly callable. | |
15 api.step('hello', ['echo', 'Hello World']) | |
16 api.step('hello', ['echo', 'Why hello, there.']) | |
17 | |
18 # You can also manipulate various aspects of the step, such as env. | |
19 # These are passed straight through to subprocess.Popen. | |
20 # Also, abusing bash -c in this way is a TERRIBLE IDEA DON'T DO IT. | |
21 api.step('goodbye', ['bash', '-c', 'echo Good bye, $friend.'], | |
22 env={'friend': 'Darth Vader'}) | |
23 | |
24 # Finally, you can make your step accept any return code | |
25 api.step('anything is cool', ['bash', '-c', 'exit 3'], | |
26 ok_ret='any') | |
27 | |
28 # We can manipulate the step presentation arbitrarily until we run | |
29 # the next step. | |
30 step_result = api.step('hello', ['echo', 'hello']) | |
31 step_result.presentation.status = api.step.EXCEPTION | |
32 step_result.presentation.logs['the reason'] = ['The reason\nit failed'] | |
33 | |
34 try: | |
35 api.step('goodbye', ['echo', 'goodbye']) | |
36 # Modifying step_result now would raise an AssertionError. | |
37 except api.step.StepFailure: | |
38 # Raising anything besides StepFailure causes the build to go purple. | |
39 raise ValueError('goodbye must exit 0!') | |
40 | |
41 # Aggregate failures from tests! | |
42 try: | |
43 with recipe_api.defer_results(): | |
44 api.step('testa', ['echo', 'testa']) | |
45 api.step('testb', ['echo', 'testb']) | |
46 except recipe_api.AggregatedStepFailure as f: | |
47 raise api.step.StepFailure("You can catch step failures.") | |
48 | |
49 # Some steps are needed from an infrastructure point of view. If these | |
50 # steps fail, the build stops, but doesn't get turned red because it's | |
51 # not the developers' fault. | |
52 try: | |
53 api.step('cleanup', ['echo', 'cleaning', 'up', 'build'], infra_step=True) | |
54 except api.step.InfraFailure as f: | |
55 assert f.result.presentation.status == api.step.EXCEPTION | |
56 | |
57 # Run a step through a made-up wrapper program. | |
58 api.step('application', ['echo', 'main', 'application'], | |
59 wrapper=['python', 'test-wrapper.py', '-v', '--']) | |
60 | |
61 if api.properties.get('access_invalid_data'): | |
62 result = api.step('no-op', ['echo', 'I', 'do', 'nothing']) | |
63 # Trying to access non-existent attributes on the result should raise. | |
64 _ = result.json.output | |
65 | |
66 # You can also raise a warning, which will act like a step failure, but | |
67 # will turn the build yellow, and stop the build. | |
68 raise api.step.StepWarning("Warning, robots approaching!") | |
69 | |
70 | |
71 def GenTests(api): | |
72 yield ( | |
73 api.test('basic') + | |
74 api.step_data('anything is cool', retcode=3) | |
75 ) | |
76 | |
77 # If you don't have the expect_exception in this test, you will get something | |
78 # like this output. | |
79 # ====================================================================== | |
80 # ERROR: step:example.exceptional (..../exceptional.json) | |
81 # ---------------------------------------------------------------------- | |
82 # Traceback (most recent call last): | |
83 # <full stack trace ommitted> | |
84 # File "annotated_run.py", line 537, in run | |
85 # retcode = steps_function(api) | |
86 # File "recipe_modules/step/example.py", line 39, in RunSteps | |
87 # raise ValueError('goodbye must exit 0!') | |
88 # ValueError: goodbye must exit 0! | |
89 | |
90 yield ( | |
91 api.test('exceptional') + | |
92 api.step_data('goodbye (2)', retcode=1) + | |
93 api.expect_exception('ValueError') | |
94 ) | |
95 | |
96 yield ( | |
97 api.test('defer_results') + | |
98 api.step_data('testa', retcode=1) | |
99 ) | |
100 | |
101 yield ( | |
102 api.test('invalid_access') + | |
103 api.properties(access_invalid_data=True) + | |
104 api.expect_exception('StepDataAttributeError') | |
105 ) | |
106 | |
107 yield ( | |
108 api.test('infra_failure') + | |
109 api.properties(raise_infra_failure=True) + | |
110 api.step_data('cleanup', retcode=1) | |
111 ) | |
OLD | NEW |