Mercurial > piecrust2
annotate tests/conftest.py @ 1142:952f3c24a99d
tests: Improve servings tests' error reporting.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 05 Jun 2018 21:58:53 -0700 |
parents | be550e1f6423 |
children | cf6b2bf042fb |
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 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
11 from piecrust.app import PieCrustFactory, apply_variants_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( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
22 '--pc-log-debug', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
23 action='store_true', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
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( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
26 '--pc-log-file', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
27 help="Sets the PieCrust logger to write to a file.") |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
28 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
29 '--pc-mock-debug', |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
30 action='store_true', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
31 help="Prints contents of the mock file-system.") |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
32 parser.addoption( |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
33 '--pc-leave-mockfs', |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
34 action='store_true', |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
35 help="Leave the contents of the mock file-system on disk.") |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
37 |
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
38 def pytest_configure(config): |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
39 if config.getoption('--pc-log-debug'): |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
40 root_logger = logging.getLogger() |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
41 hdl = logging.StreamHandler(stream=sys.stdout) |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
42 root_logger.addHandler(hdl) |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
43 root_logger.setLevel(logging.DEBUG) |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
44 |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
45 from .basefs import TestFileSystemBase |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
46 TestFileSystemBase._use_chef_debug = True |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
47 TestFileSystemBase._pytest_log_handler = hdl |
86
1cd67680c38c
Ability to output debug logging to `stdout` when running unit-tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
49 log_file = config.getoption('--pc-log-file') |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
50 if log_file: |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
51 hdl = logging.StreamHandler( |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
52 stream=open(log_file, 'w', encoding='utf8')) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
53 logging.getLogger().addHandler(hdl) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
54 |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
55 if config.getoption('--pc-leave-mockfs'): |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
56 from .basefs import TestFileSystemBase |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
57 TestFileSystemBase._leave_mockfs = True |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
58 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
59 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
60 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
|
61 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
|
62 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
|
63 if category == 'bakes': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
64 return BakeTestFile(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
|
65 elif category == 'cli': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
66 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
|
67 elif category == 'servings': |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
68 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
|
69 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
70 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
71 def repr_nested_failure(excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
72 # 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
|
73 # 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
|
74 if excinfo.value.__cause__: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
75 import traceback |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
76 ex = excinfo.value |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
77 return '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
78 traceback.format_exception( |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
79 type(ex), ex, ex.__traceback__)) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
80 return '' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
81 |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
82 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
83 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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
92 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 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
|
97 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
98 @property |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
99 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
|
100 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
|
101 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
102 @property |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
103 def mock_debug(self): |
1028
63f118c773ee
tests: Prevent conflicts in later `pytest` versions.
Ludovic Chabant <ludovic@chabant.com>
parents:
979
diff
changeset
|
104 return bool(self.config.getoption('--pc-mock-debug')) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
105 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
106 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
|
107 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
|
108 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
109 if self.spec.get('no_kitchen', False): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
110 fs.withDir('/') |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
111 return fs |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
112 |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
113 # 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
|
114 # 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
|
115 config = { |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
116 'site': { |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
117 'default_format': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
118 'default_page_layout': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
119 'default_post_layout': 'none'} |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
120 } |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
121 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
122 # Website or theme config. |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
123 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
|
124 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
|
125 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
|
126 fs.withThemeConfig(config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
127 else: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
128 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
|
129 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
|
130 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
|
131 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
|
132 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
133 # 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
|
134 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
|
135 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
|
136 _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
|
137 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
138 if self.mock_debug: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
139 res = '\nMock File-System:\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
140 res += 'At: %s\n' % fs.path('') |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
141 res += '\n'.join(print_fs_tree(fs.path(''))) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
142 res += '\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
143 print(res) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
144 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
145 return fs |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
146 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
147 def repr_failure(self, excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
148 res = super(YamlTestItemBase, self).repr_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
149 nested_res = repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
150 if nested_res: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
151 res = str(res) + '\n' + nested_res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
152 return res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
153 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
154 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
155 def check_expected_outputs(spec, fs, error_type): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
156 cctx = CompareContext() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
157 expected_output_files = spec.get('out') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
158 if expected_output_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
159 actual = fs.getStructure('kitchen/_counter') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
160 error = _compare_dicts(expected_output_files, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
161 if error: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
162 raise error_type(error) |
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 expected_partial_files = spec.get('outfiles') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
165 if expected_partial_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
166 keys = list(sorted(expected_partial_files.keys())) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
167 for key in keys: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
168 try: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
169 actual = fs.getFileEntry('kitchen/_counter/' + |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
170 key.lstrip('/')) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
171 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
|
172 lines = print_fs_tree(fs.path('kitchen/_counter')) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
173 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
|
174 "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
|
175 "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
|
176 lines) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
177 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
178 expected = expected_partial_files[key] |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
179 # 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
|
180 # those and I have no idea why. |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
181 actual = actual.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
182 expected = expected.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
183 cctx.path = key |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
184 cmpres = _compare_str(expected, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
185 if cmpres: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
186 raise error_type(cmpres) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
187 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
188 |
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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 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
|
198 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
|
199 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
|
200 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
|
201 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
|
202 |
b95977d97652
tests: Print more information when a bake test fails to find an output file.
Ludovic Chabant <ludovic@chabant.com>
parents:
553
diff
changeset
|
203 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
204 class ChefTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
205 __initialized_logging__ = False |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
206 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
207 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
208 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
|
209 colorama.init() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
210 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
|
211 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
|
212 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
|
213 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
|
214 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
215 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
216 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
217 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
|
218 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
|
219 argv = argv.split(' ') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
220 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
|
221 argv.insert(0, '--theme') |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
222 if not self.spec.get('no_kitchen', False): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
223 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
|
224 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
225 with mock_fs_scope(fs, keep=self.mock_debug): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
226 cwd = os.getcwd() |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
227 memstream = io.StringIO() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
228 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
|
229 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
|
230 try: |
583
1eda551ee681
cli: More proper argument parsing for the main/root arguments.
Ludovic Chabant <ludovic@chabant.com>
parents:
582
diff
changeset
|
231 from piecrust.main import _pre_parse_chef_args, _run_chef |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
232 os.chdir(fs.path('/')) |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
233 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
|
234 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
|
235 finally: |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
236 logging.getLogger().removeHandler(hdl) |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
237 os.chdir(cwd) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
238 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
239 expected_code = self.spec.get('code', 0) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
240 if expected_code != exit_code: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
241 raise UnexpectedChefExitCodeError("Got '%d', expected '%d'." % |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
242 (exit_code, expected_code)) |
493
95b77239c3b7
tests: Fix `find` tests on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
466
diff
changeset
|
243 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
244 expected_out = self.spec.get('out', None) |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
245 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
|
246 actual_out = memstream.getvalue() |
779
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
247 if not self.spec.get('no_strip'): |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
248 actual_out = actual_out.rstrip(' \n') |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
249 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
|
250 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
|
251 expected_out = expected_out.replace('/', os.sep) |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
252 if expected_out != actual_out: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
253 raise UnexpectedChefOutputError(expected_out, actual_out) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
254 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
255 expected_files = self.spec.get('files', None) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
256 if expected_files is not None: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
257 for path in expected_files: |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
258 path = '/' + path.lstrip('/') |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
259 if not os.path.exists(fs.path(path)): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
260 raise MissingChefOutputFileError(fs, path) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
261 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
262 def reportinfo(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
263 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
|
264 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
265 def repr_failure(self, excinfo): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
266 if isinstance(excinfo.value, UnexpectedChefExitCodeError): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
267 return str(excinfo.value) |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
268 if isinstance(excinfo.value, UnexpectedChefOutputError): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
269 return ('\n'.join( |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
270 ['Unexpected command output. Expected:', |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
271 excinfo.value.args[0], |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
272 "Got:", |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
273 excinfo.value.args[1]])) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
274 if isinstance(excinfo.value, MissingChefOutputFileError): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
275 lines = print_fs_tree(excinfo.value.args[0].path('')) |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
276 return ('\n'.join( |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
277 ["Missing file: %s" % excinfo.value.args[1], |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
278 "Got output directory:"] + |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
279 lines)) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
280 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
|
281 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
282 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
283 class UnexpectedChefExitCodeError(Exception): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
284 pass |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
285 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
286 |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
287 class UnexpectedChefOutputError(Exception): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
288 pass |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
289 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
290 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
291 class MissingChefOutputFileError(Exception): |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
292 pass |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
293 |
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
294 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
295 class ChefTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
296 __item_class__ = ChefTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
297 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
298 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
299 class BakeTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
300 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
301 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
302 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
303 from piecrust.baking.baker import Baker |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
304 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
|
305 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
|
306 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
|
307 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
308 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
|
309 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
|
310 values = list(values.items()) |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
311 variants = self.spec.get('config_variants') |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
312 apply_variants_and_values(app, variants, values) |
466
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
313 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
314 appfactory = PieCrustFactory(app.root_dir, |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
315 theme_site=self.is_theme_site, |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
316 config_variants=variants, |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
317 config_values=values) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
318 baker = Baker(appfactory, app, out_dir) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
319 records = baker.bake() |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
320 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
321 if not records.success: |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
322 errors = [] |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
323 for r in records.records: |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
324 for e in r.getEntries(): |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
325 errors += e.getAllErrors() |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
326 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
|
327 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
328 check_expected_outputs(self.spec, fs, UnexpectedBakeOutputError) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
329 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
330 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
|
331 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
|
332 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
333 def repr_failure(self, excinfo): |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
334 if isinstance(excinfo.value, UnexpectedBakeOutputError): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
335 return ('\n'.join( |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
336 ['Unexpected bake output. Left is expected output, ' |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
337 'right is actual output.'] + |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
338 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
|
339 elif isinstance(excinfo.value, BakeError): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
340 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
|
341 ['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
|
342 excinfo.value.args[0])) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
343 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
344 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
|
345 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
|
346 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
347 |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
348 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
|
349 pass |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
350 |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
351 |
1126
be550e1f6423
tests: Improve failure reporting, improve CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1096
diff
changeset
|
352 class UnexpectedBakeOutputError(Exception): |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
353 pass |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
354 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
355 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
356 class BakeTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
357 __item_class__ = BakeTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
358 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
359 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
360 class ServeTestItem(YamlTestItemBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
361 def runtest(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
362 fs = self._prepareMockFs() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
363 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
364 url = self.spec.get('url') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
365 if url is None: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
366 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
|
367 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
368 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
|
369 expected_headers = self.spec.get('headers') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
370 expected_output = self.spec.get('out') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
371 expected_contains = self.spec.get('out_contains') |
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 from werkzeug.test import Client |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
374 from werkzeug.wrappers import BaseResponse |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
375 from piecrust.app import PieCrustFactory |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
376 from piecrust.serving.server import PieCrustServer |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
377 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
378 with mock_fs_scope(fs, keep=self.mock_debug): |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
379 appfactory = PieCrustFactory( |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
380 fs.path('/kitchen'), |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
381 theme_site=self.is_theme_site) |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
382 server = PieCrustServer(appfactory) |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
383 |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
384 client = Client(server, BaseResponse) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
385 resp = client.get(url) |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
386 if expected_status != resp.status_code: |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
387 raise UnexpectedChefServingError( |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
388 url, |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
389 "Expected HTTP status '%s', got '%s'" % |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
390 (expected_status, resp.status_code), |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
391 resp) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
392 |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
393 cctx = CompareContext() |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
394 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
395 if expected_headers: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
396 for k, v in expected_headers.items(): |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
397 cmpres = _compare_str(v, resp.headers.get(k), cctx) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
398 if cmpres: |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
399 raise UnexpectedChefServingOutput(cmpres) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
400 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
401 actual = resp.data.decode('utf8').rstrip() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
402 if expected_output: |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
403 cmpres = _compare_str(expected_output.rstrip(), actual, cctx) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
404 if cmpres: |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
405 raise UnexpectedChefServingOutput(cmpres) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
406 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
407 if expected_contains: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
408 assert expected_contains.rstrip() in 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 def reportinfo(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
411 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
|
412 |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
413 def repr_failure(self, excinfo): |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
414 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
|
415 if isinstance(excinfo.value, MultipleNotFound): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
416 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
417 ["HTTP error 404 returned:", |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
418 str(excinfo.value)] + |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
419 [str(e) for e in excinfo.value._nfes]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
420 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
421 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
422 elif isinstance(excinfo.value, HTTPException): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
423 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
424 ["HTTP error %s returned:" % excinfo.value.code, |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
425 excinfo.value.description]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
426 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
427 return res |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
428 elif isinstance(excinfo.value, UnexpectedChefServingError): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
429 res = str(excinfo.value) |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
430 res += '\nWhile requesting URL: %s' % excinfo.value.url |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
431 res += '\nBody:\n%s' % excinfo.value.resp.data.decode('utf8') |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
432 return res |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
433 elif isinstance(excinfo.value, UnexpectedChefServingOutput): |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
434 res = '\n'.join( |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
435 ["Unexpected serving output. Left is expected output, " |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
436 "right is actual output."] + |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
437 excinfo.value.args[0]) |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
438 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
439 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
|
440 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
441 |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
442 class UnexpectedChefServingError(Exception): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
443 def __init__(self, url, msg, resp): |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
444 super().__init__(msg) |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
445 self.url = url |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
446 self.resp = resp |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
447 |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
448 |
1142
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
449 class UnexpectedChefServingOutput(Exception): |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
450 pass |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
451 |
952f3c24a99d
tests: Improve servings tests' error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
1126
diff
changeset
|
452 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
453 class ServeTestFile(YamlTestFileBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
454 __item_class__ = ServeTestItem |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
455 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
456 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
457 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
|
458 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
|
459 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
|
460 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
|
461 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
|
462 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
|
463 _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
|
464 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
465 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
466 class CompareContext(object): |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
467 def __init__(self, path=None, t=None): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
468 self.path = path or '' |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
469 self.time = t or time.time() |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
470 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
471 def createChildContext(self, name): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
472 ctx = CompareContext( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
473 path='%s/%s' % (self.path, name), |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
474 t=self.time) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
475 return ctx |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
476 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
477 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
478 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
|
479 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
|
480 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
481 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
482 "%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
|
483 if isinstance(left, str): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
484 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
|
485 elif isinstance(left, dict): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
486 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
|
487 elif isinstance(left, list): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
488 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
|
489 elif left != right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
490 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
491 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
492 "%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
|
493 |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
494 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
495 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
|
496 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
|
497 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
|
498 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
|
499 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
|
500 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
|
501 ['- %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
|
502 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
503 ['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
|
504 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
|
505 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
|
506 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
|
507 ['- %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
|
508 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
509 ['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
|
510 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
|
511 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
512 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
|
513 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
|
514 rv = right[key] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
515 child_ctx = ctx.createChildContext(key) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
516 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
|
517 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
518 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
519 return None |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
520 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
521 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
522 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
|
523 for i in range(min(len(left), len(right))): |
1096
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
524 lc = left[i] |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
525 rc = right[i] |
2aa6174453c8
tests: Better error reporting for serving tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
1028
diff
changeset
|
526 cmpres = _compare(lc, rc, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
527 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
528 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
529 if len(left) > len(right): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
530 return (["Left '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
531 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
|
532 if len(right) > len(left): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
533 return (["Right '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
534 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
|
535 return None |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
536 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
537 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
538 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
|
539 if left == right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
540 return None |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
541 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
542 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
|
543 time.gmtime(ctx.time)) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
544 test_time_iso8601_pattern = '%test_time_iso8601%' |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
545 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
546 left_time_indices = [] |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
547 i = -1 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
548 while True: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
549 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
|
550 if i >= 0: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
551 left_time_indices.append(i) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
552 left = (left[:i] + test_time_iso8601 + |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
553 left[i + len(test_time_iso8601_pattern):]) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
554 else: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
555 break |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
556 |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
557 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
|
558 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
|
559 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
|
560 skip_for -= 1 |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
561 continue |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
562 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
563 if i in left_time_indices: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
564 # 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
|
565 # 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
|
566 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
|
567 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
|
568 left_time = time.gmtime(ctx.time) |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
569 # Need to patch the daylist-savings-time flag because it can |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
570 # mess up the computation of the time difference. |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
571 right_time = (right_time[0], right_time[1], right_time[2], |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
572 right_time[3], right_time[4], right_time[5], |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
573 right_time[6], right_time[7], |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
574 left_time.tm_isdst) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
575 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
|
576 print("Got time difference: %d" % difference) |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
577 if abs(difference) <= 1: |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
578 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
|
579 skip_for = len(test_time_iso8601) - 1 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
580 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
581 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
|
582 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
|
583 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
|
584 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
|
585 |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
586 l_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
587 l_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
588 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
|
589 c = repr(left[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
590 l_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
591 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
592 l_offset += len(c) |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
593 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
594 r_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
595 r_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
596 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
|
597 c = repr(right[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
598 r_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
599 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
600 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
|
601 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
602 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
|
603 "Left:", left, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
604 "Right:", right, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
605 "Difference:", |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
606 l_str, (' ' * l_offset + '^'), |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
607 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
|
608 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
609 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
|
610 return ["Left is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
611 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
612 "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
|
613 "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
|
614 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
615 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
|
616 return ["Right is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
617 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
618 "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
|
619 "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
|
620 |