annotate tests/conftest.py @ 1164:727110ea112a

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