Mercurial > piecrust2
annotate tests/conftest.py @ 891:f13d618cfec6
themes: Allow keeping local overrides when copying a theme locally.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 02 Jul 2017 22:19:58 -0700 |
parents | 8ac2d6045d1d |
children | 72f17534d58e |
rev | line source |
---|---|
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
1 import io |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import sys |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
3 import time |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
4 import pprint |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
5 import os.path |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 import logging |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
7 import pytest |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
8 import yaml |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
9 import colorama |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
10 from werkzeug.exceptions import HTTPException |
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
11 from piecrust.app import apply_variant_and_values |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
12 from piecrust.configuration import merge_dicts |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
13 from .mockutil import mock_fs, mock_fs_scope |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 def pytest_runtest_setup(item): |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
17 pass |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
18 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
20 def pytest_addoption(parser): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
21 parser.addoption( |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
22 '--log-debug', |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
23 action='store_true', |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
24 help="Sets the PieCrust logger to output debug info to stdout.") |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
25 parser.addoption( |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
26 '--mock-debug', |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
27 action='store_true', |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
28 help="Prints contents of the mock file-system.") |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
29 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
30 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
31 def pytest_configure(config): |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
32 if config.getoption('--log-debug'): |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
33 hdl = logging.StreamHandler(stream=sys.stdout) |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
34 logging.getLogger('piecrust').addHandler(hdl) |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
35 logging.getLogger('piecrust').setLevel(logging.DEBUG) |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
37 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
38 def pytest_collect_file(parent, path): |
397
879b6b5647a8
tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents:
391
diff
changeset
|
39 if path.ext == '.yaml' and path.basename.startswith("test"): |
879b6b5647a8
tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents:
391
diff
changeset
|
40 category = os.path.basename(path.dirname) |
879b6b5647a8
tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents:
391
diff
changeset
|
41 if category == 'bakes': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
42 return BakeTestFile(path, parent) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
43 elif category == 'procs': |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
44 return PipelineTestFile(path, parent) |
397
879b6b5647a8
tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents:
391
diff
changeset
|
45 elif category == 'cli': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
46 return ChefTestFile(path, parent) |
397
879b6b5647a8
tests: Move all bakes/cli/servings tests files to have a YAML extension.
Ludovic Chabant <ludovic@chabant.com>
parents:
391
diff
changeset
|
47 elif category == 'servings': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
48 return ServeTestFile(path, parent) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
49 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
50 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
51 def repr_nested_failure(excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
52 # PyTest sadly doesn't show nested exceptions so we have to do it |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
53 # ourselves... it's not pretty, but at least it's more useful. |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
54 if excinfo.value.__cause__: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
55 import traceback |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
56 ex = excinfo.value |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
57 return '\n'.join( |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
58 traceback.format_exception( |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
59 type(ex), ex, ex.__traceback__)) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
60 return '' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
61 |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
62 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
63 class YamlTestFileBase(pytest.File): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
64 def collect(self): |
530
1f37f66204b8
tests: Help the Yaml loader figure out the encoding on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
520
diff
changeset
|
65 spec = yaml.load_all(self.fspath.open(encoding='utf8')) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
66 for i, item in enumerate(spec): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
67 name = '%s_%d' % (self.fspath.basename, i) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
68 if 'test_name' in item: |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
69 name += '_%s' % item['test_name'] |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
70 yield self.__item_class__(name, self, item) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
71 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
72 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
73 class YamlTestItemBase(pytest.Item): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
74 def __init__(self, name, parent, spec): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
75 super(YamlTestItemBase, self).__init__(name, parent) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
76 self.spec = spec |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
77 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
78 @property |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
79 def is_theme_site(self): |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
80 return self.spec.get('theme_config') is not None |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
81 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
82 @property |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
83 def mock_debug(self): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
84 return bool(self.config.getoption('--mock-debug')) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
85 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
86 def _prepareMockFs(self): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
87 fs = mock_fs() |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
88 |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
89 # Suppress any formatting or layout so we can compare |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
90 # much simpler strings. |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
91 config = { |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
92 'site': { |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
93 'default_format': 'none', |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
94 'default_page_layout': 'none', |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
95 'default_post_layout': 'none'} |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
96 } |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
97 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
98 # Website or theme config. |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
99 test_theme_config = self.spec.get('theme_config') |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
100 if test_theme_config is not None: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
101 merge_dicts(config, test_theme_config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
102 fs.withThemeConfig(config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
103 else: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
104 test_config = self.spec.get('config') |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
105 if test_config is not None: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
106 merge_dicts(config, test_config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
107 fs.withConfig(config) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
108 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
109 # Input file-system. |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
110 input_files = self.spec.get('in') |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
111 if input_files is not None: |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
112 _add_mock_files(fs, '/kitchen', input_files) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
113 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
114 if self.mock_debug: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
115 res = '\nMock File-System:\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
116 res += 'At: %s\n' % fs.path('') |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
117 res += '\n'.join(print_fs_tree(fs.path(''))) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
118 res += '\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
119 print(res) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
120 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
121 return fs |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
122 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
123 def repr_failure(self, excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
124 res = super(YamlTestItemBase, self).repr_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
125 nested_res = repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
126 if nested_res: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
127 res = str(res) + '\n' + nested_res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
128 return res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
129 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
130 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
131 def check_expected_outputs(spec, fs, error_type): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
132 cctx = CompareContext() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
133 expected_output_files = spec.get('out') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
134 if expected_output_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
135 actual = fs.getStructure('kitchen/_counter') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
136 error = _compare_dicts(expected_output_files, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
137 if error: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
138 raise error_type(error) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
139 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
140 expected_partial_files = spec.get('outfiles') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
141 if expected_partial_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
142 keys = list(sorted(expected_partial_files.keys())) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
143 for key in keys: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
144 try: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
145 actual = fs.getFileEntry('kitchen/_counter/' + |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
146 key.lstrip('/')) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
147 except Exception as e: |
559
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
148 lines = print_fs_tree(fs.path('kitchen/_counter')) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
149 raise error_type([ |
559
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
150 "Can't access output file %s: %s" % (key, e), |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
151 "Got output directory:"] + |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
152 lines) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
153 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
154 expected = expected_partial_files[key] |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
155 # HACK because for some reason PyYAML adds a new line for |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
156 # those and I have no idea why. |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
157 actual = actual.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
158 expected = expected.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
159 cctx.path = key |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
160 cmpres = _compare_str(expected, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
161 if cmpres: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
162 raise error_type(cmpres) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
163 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
164 |
559
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
165 def print_fs_tree(rootpath): |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
166 import os |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
167 import os.path |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
168 lines = [] |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
169 offset = len(rootpath) |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
170 for pathname, dirnames, filenames in os.walk(rootpath): |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
171 level = pathname[offset:].count(os.sep) |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
172 indent = ' ' * 4 * (level) |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
173 lines.append(indent + os.path.basename(pathname) + '/') |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
174 indent2 = ' ' * 4 * (level + 1) |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
175 for f in filenames: |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
176 lines.append(indent2 + f) |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
177 return lines |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
178 |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
179 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
180 class ChefTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
181 __initialized_logging__ = False |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
182 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
183 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
184 if not ChefTestItem.__initialized_logging__: |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
185 colorama.init() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
186 hdl = logging.StreamHandler(stream=sys.stdout) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
187 logging.getLogger().addHandler(hdl) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
188 logging.getLogger().setLevel(logging.INFO) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
189 ChefTestItem.__initialized_logging__ = True |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
190 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
191 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
192 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
193 argv = self.spec['args'] |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
194 if isinstance(argv, str): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
195 argv = argv.split(' ') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
196 if self.is_theme_site: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
197 argv.insert(0, '--theme') |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
198 argv = ['--root', fs.path('/kitchen')] + argv |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
199 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
200 expected_code = self.spec.get('code', 0) |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
201 expected_out = self.spec.get('out', None) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
202 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
203 with mock_fs_scope(fs, keep=self.mock_debug): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
204 memstream = io.StringIO() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
205 hdl = logging.StreamHandler(stream=memstream) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
206 logging.getLogger().addHandler(hdl) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
207 try: |
583
1eda551ee681
cli: More proper argument parsing for the main/root arguments.
Ludovic Chabant <ludovic@chabant.com>
parents:
582
diff
changeset
|
208 from piecrust.main import _pre_parse_chef_args, _run_chef |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
209 pre_args = _pre_parse_chef_args(argv) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
210 exit_code = _run_chef(pre_args, argv) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
211 finally: |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
212 logging.getLogger().removeHandler(hdl) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
213 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
214 assert expected_code == exit_code |
493
95b77239c3b7
tests: Fix `find` tests on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
466
diff
changeset
|
215 |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
216 if expected_out is not None: |
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
217 actual_out = memstream.getvalue() |
779
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
218 if not self.spec.get('no_strip'): |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
219 actual_out = actual_out.rstrip(' \n') |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
220 expected_out = expected_out.rstrip(' \n') |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
221 if self.spec.get('replace_out_path_sep'): |
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
222 expected_out = expected_out.replace('/', os.sep) |
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
223 assert expected_out == actual_out |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
224 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
225 def reportinfo(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
226 return self.fspath, 0, "bake: %s" % self.name |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
227 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
228 def repr_failure(self, excinfo): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
229 if isinstance(excinfo.value, ExpectedChefOutputError): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
230 return ('\n'.join( |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
231 ['Unexpected command output. Left is expected output, ' |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
232 'right is actual output'] + |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
233 excinfo.value.args[0])) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
234 return super(ChefTestItem, self).repr_failure(excinfo) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
235 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
236 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
237 class ExpectedChefOutputError(Exception): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
238 pass |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
239 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
240 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
241 class ChefTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
242 __item_class__ = ChefTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
243 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
244 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
245 class BakeTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
246 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
247 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
248 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
249 from piecrust.baking.baker import Baker |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
250 with mock_fs_scope(fs, keep=self.mock_debug): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
251 out_dir = fs.path('kitchen/_counter') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
252 app = fs.getApp(theme_site=self.is_theme_site) |
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
253 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
254 variant = self.spec.get('config_variant') |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
255 values = self.spec.get('config_values') |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
256 if values is not None: |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
257 values = list(values.items()) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
258 apply_variant_and_values(app, variant, values) |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
259 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
260 baker = Baker(app, out_dir, |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
261 applied_config_variant=variant, |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
262 applied_config_values=values) |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
263 record = baker.bake() |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
264 |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
265 if not record.success: |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
266 errors = [] |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
267 for e in record.entries: |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
268 errors += e.getAllErrors() |
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
269 raise BakeError(errors) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
270 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
271 check_expected_outputs(self.spec, fs, ExpectedBakeOutputError) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
272 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
273 def reportinfo(self): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
274 return self.fspath, 0, "bake: %s" % self.name |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
275 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
276 def repr_failure(self, excinfo): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
277 if isinstance(excinfo.value, ExpectedBakeOutputError): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
278 return ('\n'.join( |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
279 ['Unexpected bake output. Left is expected output, ' |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
280 'right is actual output'] + |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
281 excinfo.value.args[0])) |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
282 elif isinstance(excinfo.value, BakeError): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
283 res = ('\n'.join( |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
284 ['Errors occured during bake:'] + |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
285 excinfo.value.args[0])) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
286 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
287 return res |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
288 return super(BakeTestItem, self).repr_failure(excinfo) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
289 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
290 |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
291 class BakeError(Exception): |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
292 pass |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
293 |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
294 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
295 class ExpectedBakeOutputError(Exception): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
296 pass |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
297 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
298 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
299 class BakeTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
300 __item_class__ = BakeTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
301 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
302 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
303 class PipelineTestItem(YamlTestItemBase): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
304 def runtest(self): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
305 fs = self._prepareMockFs() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
306 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
307 from piecrust.processing.pipeline import ProcessorPipeline |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
308 with mock_fs_scope(fs, keep=self.mock_debug): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
309 out_dir = fs.path('kitchen/_counter') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
310 app = fs.getApp(theme_site=self.is_theme_site) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
311 pipeline = ProcessorPipeline(app, out_dir) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
312 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
313 proc_names = self.spec.get('processors') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
314 if proc_names: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
315 pipeline.enabled_processors = proc_names |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
316 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
317 record = pipeline.run() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
318 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
319 if not record.success: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
320 errors = [] |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
321 for e in record.entries: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
322 errors += e.errors |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
323 raise PipelineError(errors) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
324 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
325 check_expected_outputs(self.spec, fs, ExpectedPipelineOutputError) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
326 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
327 def reportinfo(self): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
328 return self.fspath, 0, "pipeline: %s" % self.name |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
329 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
330 def repr_failure(self, excinfo): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
331 if isinstance(excinfo.value, ExpectedPipelineOutputError): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
332 return ('\n'.join( |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
333 ['Unexpected pipeline output. Left is expected output, ' |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
334 'right is actual output'] + |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
335 excinfo.value.args[0])) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
336 elif isinstance(excinfo.value, PipelineError): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
337 res = ('\n'.join( |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
338 ['Errors occured during processing:'] + |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
339 excinfo.value.args[0])) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
340 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
341 return res |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
342 return super(PipelineTestItem, self).repr_failure(excinfo) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
343 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
344 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
345 class PipelineError(Exception): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
346 pass |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
347 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
348 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
349 class ExpectedPipelineOutputError(Exception): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
350 pass |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
351 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
352 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
353 class PipelineTestFile(YamlTestFileBase): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
354 __item_class__ = PipelineTestItem |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
355 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
356 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
357 class ServeTestItem(YamlTestItemBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
358 class _TestApp(object): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
359 def __init__(self, server): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
360 self.server = server |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
361 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
362 def __call__(self, environ, start_response): |
553
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
530
diff
changeset
|
363 response = self.server._try_run_request(environ) |
cc6f3dbe3048
serve: Extract some of the server's functionality into WSGI middlewares.
Ludovic Chabant <ludovic@chabant.com>
parents:
530
diff
changeset
|
364 return response(environ, start_response) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
365 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
366 def runtest(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
367 fs = self._prepareMockFs() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
368 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
369 url = self.spec.get('url') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
370 if url is None: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
371 raise Exception("Missing URL in test spec.") |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
372 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
373 expected_status = self.spec.get('status', 200) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
374 expected_headers = self.spec.get('headers') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
375 expected_output = self.spec.get('out') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
376 expected_contains = self.spec.get('out_contains') |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
377 is_admin_test = self.spec.get('admin') is True |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
378 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
379 from werkzeug.test import Client |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
380 from werkzeug.wrappers import BaseResponse |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
381 with mock_fs_scope(fs, keep=self.mock_debug): |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
382 if is_admin_test: |
778
5e91bc0e3b4d
internal: Move admin panel code into the piecrust package.
Ludovic Chabant <ludovic@chabant.com>
parents:
775
diff
changeset
|
383 from piecrust.admin.web import create_foodtruck_app |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
384 s = { |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
385 'FOODTRUCK_CMDLINE_MODE': True, |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
386 'FOODTRUCK_ROOT': fs.path('/kitchen') |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
387 } |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
388 test_app = create_foodtruck_app(s) |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
389 else: |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
390 from piecrust.app import PieCrustFactory |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
391 from piecrust.serving.server import Server |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
392 appfactory = PieCrustFactory( |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
393 fs.path('/kitchen'), |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
394 theme_site=self.is_theme_site) |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
395 server = Server(appfactory) |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
396 test_app = self._TestApp(server) |
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
397 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
398 client = Client(test_app, BaseResponse) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
399 resp = client.get(url) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
400 assert expected_status == resp.status_code |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
401 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
402 if expected_headers: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
403 for k, v in expected_headers.items(): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
404 assert v == resp.headers.get(k) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
405 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
406 actual = resp.data.decode('utf8').rstrip() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
407 if expected_output: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
408 assert expected_output.rstrip() == actual |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
409 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
410 if expected_contains: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
411 assert expected_contains.rstrip() in actual |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
412 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
413 def reportinfo(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
414 return self.fspath, 0, "serve: %s" % self.name |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
415 |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
416 def repr_failure(self, excinfo): |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
417 from piecrust.serving.server import MultipleNotFound |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
418 if isinstance(excinfo.value, MultipleNotFound): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
419 res = '\n'.join( |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
420 ["HTTP error 404 returned:", |
786
97c1dc568810
tests: Fix crash when reporting 404 errors during server tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
779
diff
changeset
|
421 str(excinfo.value)] + |
97c1dc568810
tests: Fix crash when reporting 404 errors during server tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
779
diff
changeset
|
422 [str(e) for e in excinfo.value._nfes]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
423 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
424 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
425 elif isinstance(excinfo.value, HTTPException): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
426 res = '\n'.join( |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
427 ["HTTP error %s returned:" % excinfo.value.code, |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
428 excinfo.value.description]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
429 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
430 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
431 return super(ServeTestItem, self).repr_failure(excinfo) |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
432 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
433 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
434 class ServeTestFile(YamlTestFileBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
435 __item_class__ = ServeTestItem |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
436 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
437 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
438 def _add_mock_files(fs, parent_path, spec): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
439 for name, subspec in spec.items(): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
440 path = os.path.join(parent_path, name) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
441 if isinstance(subspec, str): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
442 fs.withFile(path, subspec) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
443 elif isinstance(subspec, dict): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
444 _add_mock_files(fs, path, subspec) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
445 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
446 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
447 class CompareContext(object): |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
448 def __init__(self, path=None, t=None): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
449 self.path = path or '' |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
450 self.time = t or time.time() |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
451 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
452 def createChildContext(self, name): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
453 ctx = CompareContext( |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
454 path='%s/%s' % (self.path, name), |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
455 t=self.time) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
456 return ctx |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
457 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
458 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
459 def _compare(left, right, ctx): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
460 if type(left) != type(right): |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
461 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
462 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
463 "%s: %s" % (ctx.path, pprint.pformat(right))]) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
464 if isinstance(left, str): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
465 return _compare_str(left, right, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
466 elif isinstance(left, dict): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
467 return _compare_dicts(left, right, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
468 elif isinstance(left, list): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
469 return _compare_lists(left, right, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
470 elif left != right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
471 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
472 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
473 "%s: %s" % (ctx.path, pprint.pformat(right))]) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
474 |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
475 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
476 def _compare_dicts(left, right, ctx): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
477 key_diff = set(left.keys()) ^ set(right.keys()) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
478 if key_diff: |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
479 extra_left = set(left.keys()) - set(right.keys()) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
480 if extra_left: |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
481 return (["Left contains more items: "] + |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
482 ['- %s/%s' % (ctx.path, k) for k in extra_left] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
483 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
484 ['Right:', ', '.join(right.keys())]) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
485 extra_right = set(right.keys()) - set(left.keys()) |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
486 if extra_right: |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
487 return (["Right contains more items: "] + |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
488 ['- %s/%s' % (ctx.path, k) for k in extra_right] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
489 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
490 ['Right:', ', '.join(right.keys())]) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
491 return ["Unknown difference"] |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
492 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
493 for key in left.keys(): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
494 lv = left[key] |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
495 rv = right[key] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
496 child_ctx = ctx.createChildContext(key) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
497 cmpres = _compare(lv, rv, child_ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
498 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
499 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
500 return None |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
501 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
502 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
503 def _compare_lists(left, right, ctx): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
504 for i in range(min(len(left), len(right))): |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
505 l = left[i] |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
506 r = right[i] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
507 cmpres = _compare(l, r, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
508 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
509 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
510 if len(left) > len(right): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
511 return (["Left '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
512 ctx.path, left[len(right)]]) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
513 if len(right) > len(left): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
514 return (["Right '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
515 ctx.path, right[len(left)]]) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
516 return None |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
517 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
518 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
519 def _compare_str(left, right, ctx): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
520 if left == right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
521 return None |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
522 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
523 test_time_iso8601 = time.strftime('%Y-%m-%dT%H:%M:%SZ', |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
524 time.gmtime(ctx.time)) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
525 test_time_iso8601_pattern = '%test_time_iso8601%' |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
526 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
527 left_time_indices = [] |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
528 i = -1 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
529 while True: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
530 i = left.find(test_time_iso8601_pattern, i + 1) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
531 if i >= 0: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
532 left_time_indices.append(i) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
533 left = (left[:i] + test_time_iso8601 + |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
534 left[i + len(test_time_iso8601_pattern):]) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
535 else: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
536 break |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
537 |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
538 skip_for = -1 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
539 for i in range(min(len(left), len(right))): |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
540 if skip_for > 0: |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
541 skip_for -= 1 |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
542 continue |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
543 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
544 if i in left_time_indices: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
545 # This is where the time starts. Let's compare that the time |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
546 # values are within a few seconds of each other (usually 0 or 1). |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
547 right_time_str = right[i:i + len(test_time_iso8601)] |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
548 right_time = time.strptime(right_time_str, '%Y-%m-%dT%H:%M:%SZ') |
806
8ac2d6045d1d
tests: Fix for time comparisons.
Ludovic Chabant <ludovic@chabant.com>
parents:
788
diff
changeset
|
549 left_time = time.gmtime(ctx.time) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
550 difference = time.mktime(left_time) - time.mktime(right_time) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
551 print("Got time difference: %d" % difference) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
552 if abs(difference) <= 2: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
553 print("(good enough, moving to end of timestamp)") |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
554 skip_for = len(test_time_iso8601) - 1 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
555 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
556 if left[i] != right[i]: |
365
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
557 start = max(0, i - 15) |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
558 l_end = min(len(left), i + 15) |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
559 r_end = min(len(right), i + 15) |
365
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
560 |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
561 l_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
562 l_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
563 for j in range(start, l_end): |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
564 c = repr(left[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
565 l_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
566 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
567 l_offset += len(c) |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
568 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
569 r_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
570 r_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
571 for j in range(start, r_end): |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
572 c = repr(right[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
573 r_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
574 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
575 r_offset += len(c) |
365
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
576 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
577 return ["Items '%s' differ at index %d:" % (ctx.path, i), '', |
365
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
578 "Left:", left, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
579 "Right:", right, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
580 "Difference:", |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
581 l_str, (' ' * l_offset + '^'), |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
582 r_str, (' ' * r_offset + '^')] |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
583 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
584 if len(left) > len(right): |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
585 return ["Left is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
586 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
587 "Right '%s': " % ctx.path, right, |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
588 "Extra items: %r" % left[len(right):]] |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
589 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
590 if len(right) > len(left): |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
591 return ["Right is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
592 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
593 "Right '%s': " % ctx.path, right, |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
594 "Extra items: %r" % right[len(left):]] |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
595 |