Mercurial > piecrust2
annotate tests/conftest.py @ 1051:971b4d67e82a
serve: Fix problems with assets disappearing between servings.
When an asset file changes, its source's pipeline is re-run. But that created
a bake record that only had that pipeline's output, so the other outputs were
incorrectly considered empty and therefore any stray files were removed. Now we
copy over bake records for the pipelines we don't run.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 26 Jan 2018 18:05:02 -0800 |
parents | 63f118c773ee |
children | 2aa6174453c8 |
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 |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
109 # 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
|
110 # 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
|
111 config = { |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
112 'site': { |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
113 'default_format': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
114 'default_page_layout': 'none', |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
115 'default_post_layout': 'none'} |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
116 } |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
117 |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
118 # Website or theme config. |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
119 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
|
120 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
|
121 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
|
122 fs.withThemeConfig(config) |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
123 else: |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 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
|
128 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
129 # 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
|
130 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
|
131 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
|
132 _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
|
133 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
134 if self.mock_debug: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
135 res = '\nMock File-System:\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
136 res += 'At: %s\n' % fs.path('') |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
137 res += '\n'.join(print_fs_tree(fs.path(''))) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
138 res += '\n' |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
139 print(res) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
140 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
141 return fs |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
142 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
143 def repr_failure(self, excinfo): |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
144 res = super(YamlTestItemBase, self).repr_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
145 nested_res = repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
146 if nested_res: |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
147 res = str(res) + '\n' + nested_res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
148 return res |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
149 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
150 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
151 def check_expected_outputs(spec, fs, error_type): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
152 cctx = CompareContext() |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
153 expected_output_files = spec.get('out') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
154 if expected_output_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
155 actual = fs.getStructure('kitchen/_counter') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
156 error = _compare_dicts(expected_output_files, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
157 if error: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
158 raise error_type(error) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
159 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
160 expected_partial_files = spec.get('outfiles') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
161 if expected_partial_files: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
162 keys = list(sorted(expected_partial_files.keys())) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
163 for key in keys: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
164 try: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
165 actual = fs.getFileEntry('kitchen/_counter/' + |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
166 key.lstrip('/')) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
167 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
|
168 lines = print_fs_tree(fs.path('kitchen/_counter')) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
169 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
|
170 "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
|
171 "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
|
172 lines) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
173 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
174 expected = expected_partial_files[key] |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
175 # 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
|
176 # those and I have no idea why. |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
177 actual = actual.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
178 expected = expected.rstrip('\n') |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
179 cctx.path = key |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
180 cmpres = _compare_str(expected, actual, cctx) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
181 if cmpres: |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
182 raise error_type(cmpres) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
183 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
184 |
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
|
185 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
|
186 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
|
187 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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 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
|
198 |
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 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
200 class ChefTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
201 __initialized_logging__ = False |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
202 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
203 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
204 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
|
205 colorama.init() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
206 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
|
207 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
|
208 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
|
209 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
|
210 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
211 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
212 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
213 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
|
214 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
|
215 argv = argv.split(' ') |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
216 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
|
217 argv.insert(0, '--theme') |
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
218 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
|
219 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
220 expected_code = self.spec.get('code', 0) |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
221 expected_out = self.spec.get('out', None) |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
222 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
223 with mock_fs_scope(fs, keep=self.mock_debug): |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
224 memstream = io.StringIO() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
225 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
|
226 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
|
227 try: |
583
1eda551ee681
cli: More proper argument parsing for the main/root arguments.
Ludovic Chabant <ludovic@chabant.com>
parents:
582
diff
changeset
|
228 from piecrust.main import _pre_parse_chef_args, _run_chef |
674
f987b29d6fab
tests: Add ability to run tests with a theme site.
Ludovic Chabant <ludovic@chabant.com>
parents:
673
diff
changeset
|
229 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
|
230 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
|
231 finally: |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
232 logging.getLogger().removeHandler(hdl) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
233 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
234 assert expected_code == exit_code |
493
95b77239c3b7
tests: Fix `find` tests on Windows.
Ludovic Chabant <ludovic@chabant.com>
parents:
466
diff
changeset
|
235 |
567
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
236 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
|
237 actual_out = memstream.getvalue() |
779
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
238 if not self.spec.get('no_strip'): |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
239 actual_out = actual_out.rstrip(' \n') |
982de61e7da9
tests: Fix some CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
778
diff
changeset
|
240 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
|
241 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
|
242 expected_out = expected_out.replace('/', os.sep) |
a65f04ddbea2
showconfig: Don't crash when the whole config should be shown.
Ludovic Chabant <ludovic@chabant.com>
parents:
559
diff
changeset
|
243 assert expected_out == actual_out |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
244 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
245 def reportinfo(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
246 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
|
247 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
248 def repr_failure(self, excinfo): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
249 if isinstance(excinfo.value, ExpectedChefOutputError): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
250 return ('\n'.join( |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
251 ['Unexpected command output. Left is expected output, ' |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
252 'right is actual output'] + |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
253 excinfo.value.args[0])) |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
254 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
|
255 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
256 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
257 class ExpectedChefOutputError(Exception): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
258 pass |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
259 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
260 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
261 class ChefTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
262 __item_class__ = ChefTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
263 |
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 class BakeTestItem(YamlTestItemBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
266 def runtest(self): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
267 fs = self._prepareMockFs() |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
268 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
269 from piecrust.baking.baker import Baker |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
270 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
|
271 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
|
272 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
|
273 |
456db44dcc53
bake: Pass the config variants and values from the CLI to the baker.
Ludovic Chabant <ludovic@chabant.com>
parents:
439
diff
changeset
|
274 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
|
275 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
|
276 values = list(values.items()) |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
277 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
|
278 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
|
279 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
280 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
|
281 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
|
282 config_variants=variants, |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
283 config_values=values) |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
284 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
|
285 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
|
286 |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
287 if not records.success: |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
288 errors = [] |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
289 for r in records.records: |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
290 for e in r.getEntries(): |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
291 errors += e.getAllErrors() |
411
e7b865f8f335
bake: Enable multiprocess baking.
Ludovic Chabant <ludovic@chabant.com>
parents:
399
diff
changeset
|
292 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
|
293 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
294 check_expected_outputs(self.spec, fs, ExpectedBakeOutputError) |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
295 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
296 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
|
297 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
|
298 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
299 def repr_failure(self, excinfo): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
300 if isinstance(excinfo.value, ExpectedBakeOutputError): |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
301 return ('\n'.join( |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
302 ['Unexpected bake output. Left is expected output, ' |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
303 'right is actual output'] + |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
304 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
|
305 elif isinstance(excinfo.value, BakeError): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
306 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
|
307 ['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
|
308 excinfo.value.args[0])) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
309 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
310 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
|
311 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
|
312 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
313 |
398
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
314 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
|
315 pass |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
316 |
af17c143b9ab
tests: Fail bake tests with a proper error message when bake fails.
Ludovic Chabant <ludovic@chabant.com>
parents:
397
diff
changeset
|
317 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
318 class ExpectedBakeOutputError(Exception): |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
319 pass |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
320 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
321 |
385
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
322 class BakeTestFile(YamlTestFileBase): |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
323 __item_class__ = BakeTestItem |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
324 |
2d5f2289885a
tests: Add support for "Chef tests", which are direct CLI tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
365
diff
changeset
|
325 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
326 class ServeTestItem(YamlTestItemBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
327 def runtest(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
328 fs = self._prepareMockFs() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
329 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
330 url = self.spec.get('url') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
331 if url is None: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
332 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
|
333 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
334 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
|
335 expected_headers = self.spec.get('headers') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
336 expected_output = self.spec.get('out') |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
337 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
|
338 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
339 from werkzeug.test import Client |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
340 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
|
341 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
|
342 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
|
343 |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
344 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
|
345 appfactory = PieCrustFactory( |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
346 fs.path('/kitchen'), |
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
347 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
|
348 server = PieCrustServer(appfactory) |
775
ba0a6bd5e913
tests: Make it possible to run FoodTruck tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
674
diff
changeset
|
349 |
979
45ad976712ec
tests: Big push to get the tests to pass again.
Ludovic Chabant <ludovic@chabant.com>
parents:
974
diff
changeset
|
350 client = Client(server, BaseResponse) |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
351 resp = client.get(url) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
352 assert expected_status == resp.status_code |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
353 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
354 if expected_headers: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
355 for k, v in expected_headers.items(): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
356 assert v == resp.headers.get(k) |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
357 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
358 actual = resp.data.decode('utf8').rstrip() |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
359 if expected_output: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
360 assert expected_output.rstrip() == actual |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
361 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
362 if expected_contains: |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
363 assert expected_contains.rstrip() in actual |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
364 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
365 def reportinfo(self): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
366 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
|
367 |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
368 def repr_failure(self, excinfo): |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
369 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
|
370 if isinstance(excinfo.value, MultipleNotFound): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
371 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
372 ["HTTP error 404 returned:", |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
373 str(excinfo.value)] + |
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
374 [str(e) for e in excinfo.value._nfes]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
375 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
376 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
377 elif isinstance(excinfo.value, HTTPException): |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
378 res = '\n'.join( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
379 ["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
|
380 excinfo.value.description]) |
673
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
381 res += repr_nested_failure(excinfo) |
d6403c21bdea
tests: Improve failure reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
666
diff
changeset
|
382 return res |
520
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
383 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
|
384 |
391
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
385 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
386 class ServeTestFile(YamlTestFileBase): |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
387 __item_class__ = ServeTestItem |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
388 |
3e4bb57d8506
tests: Add support for testing the Chef server.
Ludovic Chabant <ludovic@chabant.com>
parents:
385
diff
changeset
|
389 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
390 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
|
391 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
|
392 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
|
393 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
|
394 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
|
395 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
|
396 _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
|
397 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
398 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
399 class CompareContext(object): |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
400 def __init__(self, path=None, t=None): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
401 self.path = path or '' |
439
c0700c6d9545
tests: Fix crash in processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
436
diff
changeset
|
402 self.time = t or time.time() |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
403 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
404 def createChildContext(self, name): |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
405 ctx = CompareContext( |
974
72f17534d58e
tests: First pass on making unit tests work again.
Ludovic Chabant <ludovic@chabant.com>
parents:
806
diff
changeset
|
406 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
|
407 t=self.time) |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
408 return ctx |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
409 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
410 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
411 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
|
412 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
|
413 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
414 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
415 "%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
|
416 if isinstance(left, str): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
417 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
|
418 elif isinstance(left, dict): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
419 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
|
420 elif isinstance(left, list): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
421 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
|
422 elif left != right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
423 return (["Different items: ", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
424 "%s: %s" % (ctx.path, pprint.pformat(left)), |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
425 "%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
|
426 |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
427 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
428 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
|
429 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
|
430 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
|
431 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
|
432 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
|
433 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
|
434 ['- %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
|
435 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
436 ['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
|
437 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
|
438 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
|
439 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
|
440 ['- %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
|
441 ['Left:', ', '.join(left.keys())] + |
bab91fcef741
bake/serve: Improve support for unicode, add slugification options.
Ludovic Chabant <ludovic@chabant.com>
parents:
493
diff
changeset
|
442 ['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
|
443 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
|
444 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
445 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
|
446 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
|
447 rv = right[key] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
448 child_ctx = ctx.createChildContext(key) |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
449 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
|
450 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
451 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
452 return None |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
453 |
347
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
454 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
455 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
|
456 for i in range(min(len(left), len(right))): |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
457 l = left[i] |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
458 r = right[i] |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
459 cmpres = _compare(l, r, ctx) |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
460 if cmpres: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
461 return cmpres |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
462 if len(left) > len(right): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
463 return (["Left '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
464 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
|
465 if len(right) > len(left): |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
466 return (["Right '%s' contains more items. First extra item: " % |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
467 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
|
468 return None |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
469 |
76c838453dbe
tests: Support for YAML-based baking tests. Convert old code-based ones.
Ludovic Chabant <ludovic@chabant.com>
parents:
86
diff
changeset
|
470 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
471 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
|
472 if left == right: |
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
473 return None |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
474 |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
475 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
|
476 time.gmtime(ctx.time)) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
477 test_time_iso8601_pattern = '%test_time_iso8601%' |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
478 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
479 left_time_indices = [] |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
480 i = -1 |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
481 while True: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
482 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
|
483 if i >= 0: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
484 left_time_indices.append(i) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
485 left = (left[:i] + test_time_iso8601 + |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
486 left[i + len(test_time_iso8601_pattern):]) |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
487 else: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
488 break |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
489 |
665
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
490 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
|
491 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
|
492 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
|
493 skip_for -= 1 |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
494 continue |
5dc13c816045
tests: Fix logic for making time-based tests not fail randomly.
Ludovic Chabant <ludovic@chabant.com>
parents:
583
diff
changeset
|
495 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
496 if i in left_time_indices: |
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
497 # 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
|
498 # 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
|
499 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
|
500 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
|
501 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
|
502 # 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
|
503 # 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
|
504 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
|
505 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
|
506 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
|
507 left_time.tm_isdst) |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
508 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
|
509 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
|
510 if abs(difference) <= 1: |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
511 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
|
512 skip_for = len(test_time_iso8601) - 1 |
582
d8d9e0424a72
tests: Fix (hopefully) time-sensitive tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
567
diff
changeset
|
513 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
514 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
|
515 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
|
516 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
|
517 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
|
518 |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
519 l_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
520 l_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
521 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
|
522 c = repr(left[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
523 l_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
524 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
525 l_offset += len(c) |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
526 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
527 r_str = '' |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
528 r_offset = 0 |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
529 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
|
530 c = repr(right[j]).strip("'") |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
531 r_str += c |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
532 if j < i: |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
533 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
|
534 |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
535 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
|
536 "Left:", left, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
537 "Right:", right, '', |
a9929e0b8f66
tests: Changes to output report and hack for comparing outputs.
Ludovic Chabant <ludovic@chabant.com>
parents:
351
diff
changeset
|
538 "Difference:", |
399
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
539 l_str, (' ' * l_offset + '^'), |
a0724af26c12
tests: More accurate marker position for diff'ing strings.
Ludovic Chabant <ludovic@chabant.com>
parents:
398
diff
changeset
|
540 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
|
541 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
542 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
|
543 return ["Left is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
544 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
545 "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
|
546 "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
|
547 |
351
1f22d4b10fef
tests: Improve bake tests output, add support for partial output checks.
Ludovic Chabant <ludovic@chabant.com>
parents:
347
diff
changeset
|
548 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
|
549 return ["Right is longer.", |
436
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
550 "Left '%s': " % ctx.path, left, |
2aa879d63133
tests: Add pipeline processing tests.
Ludovic Chabant <ludovic@chabant.com>
parents:
411
diff
changeset
|
551 "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
|
552 "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
|
553 |