Merge lp:~tvansteenburgh/charm-tools/lp-1277652 into lp:charm-tools/1.2

Proposed by Tim Van Steenburgh
Status: Merged
Merged at revision: 321
Proposed branch: lp:~tvansteenburgh/charm-tools/lp-1277652
Merge into: lp:charm-tools/1.2
Diff against target: 716 lines (+251/-134)
27 files modified
Makefile (+7/-7)
charmtools/charms.py (+14/-5)
charmtools/create.py (+5/-0)
charmtools/proof.py (+2/-1)
charmtools/templates/charm/README.ex (+5/-5)
charmtools/test.py (+22/-5)
tests/test_charm_proof.py (+48/-4)
tests/test_juju_test.py (+26/-0)
tests/test_substrates.py (+9/-1)
tests_functional/charms/broken-maintainer/README.ex (+1/-2)
tests_functional/charms/icon-template/README.ex (+1/-2)
tests_functional/charms/missing-maintainer/README.ex (+1/-2)
tests_functional/charms/test/README.ex (+1/-2)
tests_functional/charms/unknown-metadata/README.ex (+1/-2)
tests_functional/create/no-package-exists/README.ex (+30/-27)
tests_functional/create/python-apt/README.ex (+30/-27)
tests_functional/proof/expected/broken-categories (+1/-0)
tests_functional/proof/expected/broken-config (+1/-0)
tests_functional/proof/expected/broken-maintainer (+10/-10)
tests_functional/proof/expected/broken-subordinate (+1/-0)
tests_functional/proof/expected/broken-subordinate2 (+1/-0)
tests_functional/proof/expected/empty-requires (+2/-1)
tests_functional/proof/expected/icon-template (+5/-5)
tests_functional/proof/expected/missing-maintainer (+10/-10)
tests_functional/proof/expected/mod-spdy (+3/-2)
tests_functional/proof/expected/test (+10/-10)
tests_functional/proof/expected/unknown-metadata (+4/-4)
To merge this branch: bzr merge lp:~tvansteenburgh/charm-tools/lp-1277652
Reviewer Review Type Date Requested Status
Charles Butler (community) Approve
Review via email: mp+219866@code.launchpad.net

Description of the change

  Change handling of missing default values for config options.

  New behavior is as follows:

  - If the default KEY is missing, that is a Warning for all data types.
  - If the default VALUE is missing, that is a Warning for booleans and
    Info for all other data types.

To post a comment you must log in.
Revision history for this message
Charles Butler (lazypower) wrote :

+1 LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2014-01-10 20:01:51 +0000
3+++ Makefile 2014-05-16 15:55:55 +0000
4@@ -89,13 +89,13 @@
5
6 integration:
7 tests_functional/helpers/helpers.sh || sh -x tests_functional/helpers/helpers.sh timeout
8- @echo Test shell helpers with dash
9- bash tests/helpers/helpers.sh \
10- || bash -x tests/helpers/helpers.sh timeout
11- tests/helpers/helpers.bash || sh -x tests/helpers/helpers.bash timeout
12- @echo Test shell helpers with bash
13- bash tests/helpers/helpers.bash \
14- || bash -x tests/helpers/helpers.bash timeout
15+ @echo Test shell helpers with bash
16+ bash tests_functional/helpers/helpers.sh \
17+ || bash -x tests_functional/helpers/helpers.sh timeout
18+ tests_functional/helpers/helpers.bash || sh -x tests_functional/helpers/helpers.bash timeout
19+ @echo Test shell helpers with bash
20+ bash tests_functional/helpers/helpers.bash \
21+ || bash -x tests_functional/helpers/helpers.bash timeout
22 @echo Test charm proof
23 tests_functional/proof/test.sh
24 tests_functional/create/test.sh
25
26=== modified file 'charmtools/charms.py'
27--- charmtools/charms.py 2014-04-30 19:27:07 +0000
28+++ charmtools/charms.py 2014-05-16 15:55:55 +0000
29@@ -42,6 +42,8 @@
30 'boolean': bool,
31 }
32
33+ALLOW_NONE_DEFAULT = (basestring, int, float)
34+
35
36 class RelationError(Exception):
37 pass
38@@ -184,12 +186,19 @@
39 % (option_name, option_type))
40 elif 'default' in option_value:
41 expected_type = KNOWN_OPTION_TYPES[option_value['type']]
42- if not isinstance(option_value['default'], expected_type):
43+ actual_value = option_value['default']
44+ if actual_value is None:
45+ notify = (self.info if expected_type in ALLOW_NONE_DEFAULT
46+ else self.warn)
47+ notify(
48+ 'config.yaml: option %s has no default value'
49+ % option_name)
50+ elif not isinstance(actual_value, expected_type):
51 self.err(
52 'config.yaml: type of option %s is specified as '
53 '%s, but the type of the default value is %s'
54 % (option_name, option_value['type'],
55- type(option_value['default']).__name__))
56+ type(actual_value).__name__))
57 else:
58 # Nothing to do: the option type is valid but no default
59 # value exists.
60@@ -205,7 +214,7 @@
61 def is_charm(self):
62 return os.path.isfile(os.path.join(self.charm_path, 'metadata.yaml'))
63
64- def proof(self, remote=True):
65+ def proof(self, remote=True, **kw):
66 lint = CharmLinter()
67 charm_name = self.charm_path
68 if os.path.isdir(charm_name):
69@@ -326,8 +335,8 @@
70 continue
71 lc += 1
72 if l in readme_content:
73- err_msg = ('%s Includes line %d of '
74- 'boilerplate README.ex ')
75+ err_msg = ('%s includes line %d of '
76+ 'boilerplate README.ex')
77 lint.warn(err_msg % (readme, lc))
78 except IOError as e:
79 lint.warn(
80
81=== modified file 'charmtools/create.py'
82--- charmtools/create.py 2013-12-11 16:27:55 +0000
83+++ charmtools/create.py 2014-05-16 15:55:55 +0000
84@@ -74,6 +74,11 @@
85 print "Found " + package + " package in apt cache, as a result charm" \
86 + " contents have been pre-populated based on package metadata."
87
88+ # summary and description attrs moved to Version
89+ # object in python-apt 0.7.9
90+ if not hasattr(p, 'summary'):
91+ p = p.versions[0]
92+
93 v['summary'] = p.summary
94 v['description'] = textwrap.fill(p.description, width=72,
95 subsequent_indent=' ')
96
97=== modified file 'charmtools/proof.py'
98--- charmtools/proof.py 2014-04-02 20:57:06 +0000
99+++ charmtools/proof.py 2014-05-16 15:55:55 +0000
100@@ -59,7 +59,8 @@
101 except Exception as e:
102 return ["FATAL: %s" % e.message], 200
103
104- lint, err_code = c.proof(with_remote, server, port, secure)
105+ lint, err_code = c.proof(
106+ remote=with_remote, server=server, port=port, secure=secure)
107 return lint, err_code
108
109
110
111=== modified file 'charmtools/templates/charm/README.ex'
112--- charmtools/templates/charm/README.ex 2014-01-16 12:14:41 +0000
113+++ charmtools/templates/charm/README.ex 2014-05-16 15:55:55 +0000
114@@ -1,6 +1,6 @@
115 # Overview
116
117-Describe the intended usage of this charm and anything unique about how this charm relates to others here.
118+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
119
120 This README will be displayed in the Charm Store, it should be either Markdown or RST. Ideal READMEs include instructions on how to use the charm, expected usage, and charm features that your audience might be interested in. For an example of a well written README check out Hadoop: http://jujucharms.com/charms/precise/hadoop
121
122@@ -16,17 +16,17 @@
123
124 juju deploy servicename
125
126-and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
127+and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
128
129-You can then browse to http://ip-address to configure the service.
130+You can then browse to http://ip-address to configure the service.
131
132 ## Scale out Usage
133
134-If the charm has any recommendations for running at scale, outline them in examples here. For example if you have a memcached relation that improves performance, mention it here.
135+If the charm has any recommendations for running at scale, outline them in examples here. For example if you have a memcached relation that improves performance, mention it here.
136
137 ## Known Limitations and Issues
138
139-This not only helps users but gives people a place to start if they want to help you add features to your charm.
140+This not only helps users but gives people a place to start if they want to help you add features to your charm.
141
142 # Configuration
143
144
145=== modified file 'charmtools/test.py'
146--- charmtools/test.py 2014-02-26 17:38:03 +0000
147+++ charmtools/test.py 2014-05-16 15:55:55 +0000
148@@ -417,6 +417,8 @@
149 _keys = ['timeout', 'set-e', 'on-timeout', 'fail-on-skip', 'tests']
150
151 def __init__(self, cfg):
152+ self.log = logging.getLogger('juju-test.testcfg')
153+
154 if isinstance(cfg, basestring):
155 cfg = yaml.safe_load(cfg)
156
157@@ -425,7 +427,12 @@
158 if key in self._keys:
159 setattr(self, key, val)
160 if 'substrates' in cfg:
161- self.substrates = cfg.substrates
162+ self.substrates = cfg['substrates']
163+
164+ def update(self, **kw):
165+ for key, val in kw.iteritems():
166+ self.log.debug('Overwriting %s to %s from cmd' % (key, val))
167+ setattr(self, key, val)
168
169
170 def get_juju_version():
171@@ -527,8 +534,20 @@
172
173
174 def parse_substrates(spec):
175+ """Return a :class:`SubstrateFilter` object parsed from ``spec``.
176+
177+ :param spec:
178+
179+ Can be a yaml string, a dict with a 'substrates' key, or an object
180+ with a 'substrates' attribute. The 'substrates' key or attribute
181+ should contain a dict with optional 'order', 'skip', and 'include'
182+ keys.
183+
184+ """
185 if isinstance(spec, basestring):
186 spec = yaml.safe_load(spec)
187+ elif not hasattr(spec, '__getitem__'):
188+ spec = vars(spec)
189 if not spec or 'substrates' not in spec:
190 raise ValueError(
191 "Invalid data passed to parse_substrates: {}".format(spec))
192@@ -664,9 +683,7 @@
193
194 if test_cfg:
195 cfg = TestCfg(test_cfg)
196- for key, val in args.iteritems():
197- logger.debug('Overwriting %s to %s from cmd' % (key, val))
198- setattr(cfg, key, val)
199+ cfg.update(**vars(args))
200 else:
201 cfg = args
202
203@@ -674,7 +691,7 @@
204 try:
205 tester = Conductor(args)
206 env_yaml = tester.get_environment(cfg.juju_env)
207- if 'substrates' in cfg:
208+ if getattr(cfg, 'substrates', None):
209 rules = parse_substrates(cfg)
210 allowed = rules.filter(env_yaml['type'])
211 if env_yaml['type'] not in allowed:
212
213=== modified file 'tests/test_charm_proof.py'
214--- tests/test_charm_proof.py 2014-04-30 19:27:07 +0000
215+++ tests/test_charm_proof.py 2014-05-16 15:55:55 +0000
216@@ -241,8 +241,8 @@
217 'the type of the default value is str')
218 self.assertEqual(expected, self.linter.lint[0])
219
220- def test_option_empty_default_value(self):
221- # An empty default value is treated as an error.
222+ def test_option_empty_default_value_string(self):
223+ # An empty default value is treated as INFO for strings
224 self.write_config("""
225 options:
226 foo:
227@@ -253,8 +253,52 @@
228 self.linter.check_config_file(self.charm_dir)
229 self.assertEqual(1, len(self.linter.lint))
230 expected = (
231- 'E: config.yaml: type of option foo is specified as string, '
232- 'but the type of the default value is NoneType')
233+ 'I: config.yaml: option foo has no default value')
234+ self.assertEqual(expected, self.linter.lint[0])
235+
236+ def test_option_empty_default_value_int(self):
237+ # An empty default value is treated as INFO for ints
238+ self.write_config("""
239+ options:
240+ foo:
241+ type: int
242+ default:
243+ description: blah
244+ """)
245+ self.linter.check_config_file(self.charm_dir)
246+ self.assertEqual(1, len(self.linter.lint))
247+ expected = (
248+ 'I: config.yaml: option foo has no default value')
249+ self.assertEqual(expected, self.linter.lint[0])
250+
251+ def test_option_empty_default_value_float(self):
252+ # An empty default value is treated as INFO for floats
253+ self.write_config("""
254+ options:
255+ foo:
256+ type: float
257+ default:
258+ description: blah
259+ """)
260+ self.linter.check_config_file(self.charm_dir)
261+ self.assertEqual(1, len(self.linter.lint))
262+ expected = (
263+ 'I: config.yaml: option foo has no default value')
264+ self.assertEqual(expected, self.linter.lint[0])
265+
266+ def test_option_empty_default_value_boolean(self):
267+ # An empty default value is treated as WARN for booleans
268+ self.write_config("""
269+ options:
270+ foo:
271+ type: boolean
272+ default:
273+ description: blah
274+ """)
275+ self.linter.check_config_file(self.charm_dir)
276+ self.assertEqual(1, len(self.linter.lint))
277+ expected = (
278+ 'W: config.yaml: option foo has no default value')
279 self.assertEqual(expected, self.linter.lint[0])
280
281 def test_yaml_with_python_objects(self):
282
283=== modified file 'tests/test_juju_test.py'
284--- tests/test_juju_test.py 2014-02-26 17:38:03 +0000
285+++ tests/test_juju_test.py 2014-05-16 15:55:55 +0000
286@@ -720,3 +720,29 @@
287 o = juju_test.Orchestra(c, 'test/dummy')
288 o.perform()
289 mprint_status.assert_called_once()
290+
291+
292+class TestCfgTest(unittest.TestCase):
293+ test_config = '''\
294+ options:
295+ timeout: 500
296+ substrates:
297+ order: include, skip
298+ include: local
299+ skip: "*"
300+ '''
301+
302+ def test_init_str(self):
303+ t = juju_test.TestCfg(self.test_config)
304+ self.assertEqual(t.timeout, 500)
305+ self.assertEqual(t.substrates['include'], 'local')
306+
307+ def test_init_dict(self):
308+ t = juju_test.TestCfg(yaml.safe_load(self.test_config))
309+ self.assertEqual(t.timeout, 500)
310+ self.assertEqual(t.substrates['include'], 'local')
311+
312+ def test_update(self):
313+ t = juju_test.TestCfg(self.test_config)
314+ t.update(timeout=400)
315+ self.assertEqual(t.timeout, 400)
316
317=== modified file 'tests/test_substrates.py'
318--- tests/test_substrates.py 2014-01-09 20:16:05 +0000
319+++ tests/test_substrates.py 2014-05-16 15:55:55 +0000
320@@ -24,9 +24,17 @@
321 self.assertRaises(ValueError, parse_substrates, '')
322 self.assertIsNotNone(parse_substrates(self.INCLUDE_SKIP))
323
324+ def test_parse_substrate_dict(self):
325+ data = yaml.load(self.INCLUDE_SKIP)
326+ self.assertIsNotNone(parse_substrates(data))
327+
328 def test_parse_substrate_object(self):
329+ class Object(object):
330+ pass
331 data = yaml.load(self.INCLUDE_SKIP)
332- self.assertIsNotNone(parse_substrates(data))
333+ o = Object()
334+ o.__dict__ = data
335+ self.assertIsNotNone(parse_substrates(o))
336
337 def test_parse_substrates_order(self):
338 result = parse_substrates(self.INCLUDE_SKIP)
339
340=== modified file 'tests_functional/charms/broken-maintainer/README.ex'
341--- tests_functional/charms/broken-maintainer/README.ex 2013-11-11 19:08:11 +0000
342+++ tests_functional/charms/broken-maintainer/README.ex 2014-05-16 15:55:55 +0000
343@@ -1,5 +1,4 @@
344-Describe the intended usage of this charm and anything unique about how
345-this charm relates to others here.
346+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
347
348 Be sure to remove this section before submitting this to
349 https://launchpad.net/charms for inclusion in the charm store.
350
351=== modified file 'tests_functional/charms/icon-template/README.ex'
352--- tests_functional/charms/icon-template/README.ex 2013-11-11 19:08:11 +0000
353+++ tests_functional/charms/icon-template/README.ex 2014-05-16 15:55:55 +0000
354@@ -1,5 +1,4 @@
355-Describe the intended usage of this charm and anything unique about how
356-this charm relates to others here.
357+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
358
359 Be sure to remove this section before submitting this to
360 https://launchpad.net/charms for inclusion in the charm store.
361
362=== modified file 'tests_functional/charms/missing-maintainer/README.ex'
363--- tests_functional/charms/missing-maintainer/README.ex 2013-11-11 19:08:11 +0000
364+++ tests_functional/charms/missing-maintainer/README.ex 2014-05-16 15:55:55 +0000
365@@ -1,5 +1,4 @@
366-Describe the intended usage of this charm and anything unique about how
367-this charm relates to others here.
368+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
369
370 Be sure to remove this section before submitting this to
371 https://launchpad.net/charms for inclusion in the charm store.
372
373=== modified file 'tests_functional/charms/test/README.ex'
374--- tests_functional/charms/test/README.ex 2013-11-11 19:08:11 +0000
375+++ tests_functional/charms/test/README.ex 2014-05-16 15:55:55 +0000
376@@ -1,5 +1,4 @@
377-Describe the intended usage of this charm and anything unique about how
378-this charm relates to others here.
379+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
380
381 Be sure to remove this section before submitting this to
382 https://launchpad.net/charms for inclusion in the charm store.
383
384=== modified file 'tests_functional/charms/unknown-metadata/README.ex'
385--- tests_functional/charms/unknown-metadata/README.ex 2013-11-11 19:08:11 +0000
386+++ tests_functional/charms/unknown-metadata/README.ex 2014-05-16 15:55:55 +0000
387@@ -1,5 +1,4 @@
388-Describe the intended usage of this charm and anything unique about how
389-this charm relates to others here.
390+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
391
392 Be sure to remove this section before submitting this to
393 https://launchpad.net/charms for inclusion in the charm store.
394
395=== modified file 'tests_functional/create/no-package-exists/README.ex'
396--- tests_functional/create/no-package-exists/README.ex 2013-11-11 19:08:11 +0000
397+++ tests_functional/create/no-package-exists/README.ex 2014-05-16 15:55:55 +0000
398@@ -1,41 +1,44 @@
399-Describe the intended usage of this charm and anything unique about how
400-this charm relates to others here.
401+# Overview
402+
403+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
404
405 This README will be displayed in the Charm Store, it should be either Markdown or RST. Ideal READMEs include instructions on how to use the charm, expected usage, and charm features that your audience might be interested in. For an example of a well written README check out Hadoop: http://jujucharms.com/charms/precise/hadoop
406
407-Here's an example you might wish to template off of:
408-
409-Overview
410---------
411-
412-This charm provides (service) from (service homepage). Add a description here of what the service itself actually does.
413-
414-
415-Usage
416------
417+Use this as a Markdown reference if you need help with the formatting of this README: http://askubuntu.com/editing-help
418+
419+This charm provides [service](http://example.com). Add a description here of what the service itself actually does.
420+
421+Also remember to check the [icon guidelines](https://juju.ubuntu.com/docs/authors-charm-icon.html) so that your charm looks good in the Juju GUI.
422+
423+# Usage
424
425 Step by step instructions on using the charm:
426
427 juju deploy servicename
428
429-and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
430-
431-You can then browse to http://ip-address to configure the service.
432-
433-Configuration
434--------------
435+and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
436+
437+You can then browse to http://ip-address to configure the service.
438+
439+## Scale out Usage
440+
441+If the charm has any recommendations for running at scale, outline them in examples here. For example if you have a memcached relation that improves performance, mention it here.
442+
443+## Known Limitations and Issues
444+
445+This not only helps users but gives people a place to start if they want to help you add features to your charm.
446+
447+# Configuration
448
449 The configuration options will be listed on the charm store, however If you're making assumptions or opinionated decisions in the charm (like setting a default administrator password), you should detail that here so the user knows how to change it immediately, etc.
450
451-
452-Contact Information
453--------------------
454+# Contact Information
455
456 Though this will be listed in the charm store itself don't assume a user will know that, so include that information here:
457
458-Author:
459-Report bugs at: http://bugs.launchpad.net/charms/+source/charmname
460-Location: http://jujucharms.com/charms/distro/charmname
461-
462-* Be sure to remove the templated parts before submitting to https://launchpad.net/charms for inclusion in the charm store.
463-
464+## Upstream Project Name
465+
466+- Upstream website
467+- Upstream bug tracker
468+- Upstream mailing list or contact information
469+- Feel free to add things if it's useful for users
470
471=== modified file 'tests_functional/create/python-apt/README.ex'
472--- tests_functional/create/python-apt/README.ex 2013-11-11 19:08:11 +0000
473+++ tests_functional/create/python-apt/README.ex 2014-05-16 15:55:55 +0000
474@@ -1,41 +1,44 @@
475-Describe the intended usage of this charm and anything unique about how
476-this charm relates to others here.
477+# Overview
478+
479+Describe the intended usage of this charm and anything unique about how this charm relates to others here.
480
481 This README will be displayed in the Charm Store, it should be either Markdown or RST. Ideal READMEs include instructions on how to use the charm, expected usage, and charm features that your audience might be interested in. For an example of a well written README check out Hadoop: http://jujucharms.com/charms/precise/hadoop
482
483-Here's an example you might wish to template off of:
484-
485-Overview
486---------
487-
488-This charm provides (service) from (service homepage). Add a description here of what the service itself actually does.
489-
490-
491-Usage
492------
493+Use this as a Markdown reference if you need help with the formatting of this README: http://askubuntu.com/editing-help
494+
495+This charm provides [service](http://example.com). Add a description here of what the service itself actually does.
496+
497+Also remember to check the [icon guidelines](https://juju.ubuntu.com/docs/authors-charm-icon.html) so that your charm looks good in the Juju GUI.
498+
499+# Usage
500
501 Step by step instructions on using the charm:
502
503 juju deploy servicename
504
505-and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
506-
507-You can then browse to http://ip-address to configure the service.
508-
509-Configuration
510--------------
511+and so on. If you're providing a web service or something that the end user needs to go to, tell them here, especially if you're deploying a service that might listen to a non-default port.
512+
513+You can then browse to http://ip-address to configure the service.
514+
515+## Scale out Usage
516+
517+If the charm has any recommendations for running at scale, outline them in examples here. For example if you have a memcached relation that improves performance, mention it here.
518+
519+## Known Limitations and Issues
520+
521+This not only helps users but gives people a place to start if they want to help you add features to your charm.
522+
523+# Configuration
524
525 The configuration options will be listed on the charm store, however If you're making assumptions or opinionated decisions in the charm (like setting a default administrator password), you should detail that here so the user knows how to change it immediately, etc.
526
527-
528-Contact Information
529--------------------
530+# Contact Information
531
532 Though this will be listed in the charm store itself don't assume a user will know that, so include that information here:
533
534-Author:
535-Report bugs at: http://bugs.launchpad.net/charms/+source/charmname
536-Location: http://jujucharms.com/charms/distro/charmname
537-
538-* Be sure to remove the templated parts before submitting to https://launchpad.net/charms for inclusion in the charm store.
539-
540+## Upstream Project Name
541+
542+- Upstream website
543+- Upstream bug tracker
544+- Upstream mailing list or contact information
545+- Feel free to add things if it's useful for users
546
547=== modified file 'tests_functional/proof/expected/broken-categories'
548--- tests_functional/proof/expected/broken-categories 2013-11-11 19:08:11 +0000
549+++ tests_functional/proof/expected/broken-categories 2014-05-16 15:55:55 +0000
550@@ -1,1 +1,2 @@
551 W: Categories metadata must be a list of one or more of: applications, app-servers, databases, file-servers, cache-proxy, misc
552+I: missing recommended hook config-changed
553
554=== modified file 'tests_functional/proof/expected/broken-config'
555--- tests_functional/proof/expected/broken-config 2013-11-11 19:08:11 +0000
556+++ tests_functional/proof/expected/broken-config 2014-05-16 15:55:55 +0000
557@@ -1,1 +1,2 @@
558+I: missing recommended hook config-changed
559 W: config.yaml: option foo has an invalid type (integer)
560
561=== modified file 'tests_functional/proof/expected/broken-maintainer'
562--- tests_functional/proof/expected/broken-maintainer 2013-11-11 19:08:11 +0000
563+++ tests_functional/proof/expected/broken-maintainer 2014-05-16 15:55:55 +0000
564@@ -1,12 +1,12 @@
565 W: metadata name (test) must match directory name (broken-maintainer) exactly for local deployment.
566 W: Maintainer address should contain a real-name and email only. [test@testhost]
567-E: no copyright file
568-E: Includes template README.ex file
569-E: README.ex Includes boilerplate README.ex line 1
570-E: README.ex Includes boilerplate README.ex line 2
571-E: template interface names should be changed: interface-name
572-E: template relations should be renamed to fit charm: relation-name
573-E: template interface names should be changed: interface-name
574-E: template relations should be renamed to fit charm: relation-name
575-E: template interface names should be changed: interface-name
576-E: template relations should be renamed to fit charm: relation-name
577+W: no copyright file
578+W: Includes template README.ex file
579+W: README.ex includes line 1 of boilerplate README.ex
580+E: template interface names should be changed: interface-name
581+E: template relations should be renamed to fit charm: relation-name
582+E: template interface names should be changed: interface-name
583+E: template relations should be renamed to fit charm: relation-name
584+E: template interface names should be changed: interface-name
585+E: template relations should be renamed to fit charm: relation-name
586+I: missing recommended hook config-changed
587
588=== modified file 'tests_functional/proof/expected/broken-subordinate'
589--- tests_functional/proof/expected/broken-subordinate 2013-11-11 19:08:11 +0000
590+++ tests_functional/proof/expected/broken-subordinate 2014-05-16 15:55:55 +0000
591@@ -1,1 +1,2 @@
592 E: subordinates must have at least one scope: container relation
593+I: missing recommended hook config-changed
594
595=== modified file 'tests_functional/proof/expected/broken-subordinate2'
596--- tests_functional/proof/expected/broken-subordinate2 2013-11-11 19:08:11 +0000
597+++ tests_functional/proof/expected/broken-subordinate2 2014-05-16 15:55:55 +0000
598@@ -1,1 +1,2 @@
599 E: subordinates must have at least one scope: container relation
600+I: missing recommended hook config-changed
601
602=== modified file 'tests_functional/proof/expected/empty-requires'
603--- tests_functional/proof/expected/empty-requires 2013-11-11 19:08:11 +0000
604+++ tests_functional/proof/expected/empty-requires 2014-05-16 15:55:55 +0000
605@@ -1,1 +1,2 @@
606-W: all charms should provide at least one thing
607+I: all charms should provide at least one thing
608+I: missing recommended hook config-changed
609
610=== modified file 'tests_functional/proof/expected/icon-template'
611--- tests_functional/proof/expected/icon-template 2013-11-11 19:08:11 +0000
612+++ tests_functional/proof/expected/icon-template 2014-05-16 15:55:55 +0000
613@@ -1,8 +1,7 @@
614-E: Includes template icon.svg file.
615-E: no copyright file
616-E: Includes template README.ex file
617-E: README.ex Includes boilerplate README.ex line 1
618-E: README.ex Includes boilerplate README.ex line 2
619+W: Includes template icon.svg file.
620+W: no copyright file
621+W: Includes template README.ex file
622+W: README.ex includes line 1 of boilerplate README.ex
623 E: template interface names should be changed: interface-name
624 E: Unknown relation field in relation relation-name - (baz)
625 E: template relations should be renamed to fit charm: relation-name
626@@ -13,3 +12,4 @@
627 I: relation non-map has no hooks
628 E: template interface names should be changed: interface-name
629 E: template relations should be renamed to fit charm: relation-name
630+I: missing recommended hook config-changed
631
632=== modified file 'tests_functional/proof/expected/missing-maintainer'
633--- tests_functional/proof/expected/missing-maintainer 2013-11-11 19:08:11 +0000
634+++ tests_functional/proof/expected/missing-maintainer 2014-05-16 15:55:55 +0000
635@@ -1,12 +1,12 @@
636 W: metadata name (test) must match directory name (missing-maintainer) exactly for local deployment.
637 E: Charms need a maintainer (See RFC2822) - Name <email>
638-E: no copyright file
639-E: Includes template README.ex file
640-E: README.ex Includes boilerplate README.ex line 1
641-E: README.ex Includes boilerplate README.ex line 2
642-E: template interface names should be changed: interface-name
643-E: template relations should be renamed to fit charm: relation-name
644-E: template interface names should be changed: interface-name
645-E: template relations should be renamed to fit charm: relation-name
646-E: template interface names should be changed: interface-name
647-E: template relations should be renamed to fit charm: relation-name
648+W: no copyright file
649+W: Includes template README.ex file
650+W: README.ex includes line 1 of boilerplate README.ex
651+E: template interface names should be changed: interface-name
652+E: template relations should be renamed to fit charm: relation-name
653+E: template interface names should be changed: interface-name
654+E: template relations should be renamed to fit charm: relation-name
655+E: template interface names should be changed: interface-name
656+E: template relations should be renamed to fit charm: relation-name
657+I: missing recommended hook config-changed
658
659=== modified file 'tests_functional/proof/expected/mod-spdy'
660--- tests_functional/proof/expected/mod-spdy 2013-11-11 19:08:11 +0000
661+++ tests_functional/proof/expected/mod-spdy 2014-05-16 15:55:55 +0000
662@@ -1,2 +1,3 @@
663-W: missing recommended hook start
664-W: missing recommended hook stop
665+I: missing recommended hook start
666+I: missing recommended hook stop
667+I: missing recommended hook config-changed
668
669=== modified file 'tests_functional/proof/expected/test'
670--- tests_functional/proof/expected/test 2013-11-11 19:08:11 +0000
671+++ tests_functional/proof/expected/test 2014-05-16 15:55:55 +0000
672@@ -1,12 +1,12 @@
673 W: Metadata is missing categories.
674 W: No icon.svg file.
675-E: no copyright file
676-E: Includes template README.ex file
677-E: README.ex Includes boilerplate README.ex line 1
678-E: README.ex Includes boilerplate README.ex line 2
679-E: template interface names should be changed: interface-name
680-E: template relations should be renamed to fit charm: relation-name
681-E: template interface names should be changed: interface-name
682-E: template relations should be renamed to fit charm: relation-name
683-E: template interface names should be changed: interface-name
684-E: template relations should be renamed to fit charm: relation-name
685+W: no copyright file
686+W: Includes template README.ex file
687+W: README.ex includes line 1 of boilerplate README.ex
688+E: template interface names should be changed: interface-name
689+E: template relations should be renamed to fit charm: relation-name
690+E: template interface names should be changed: interface-name
691+E: template relations should be renamed to fit charm: relation-name
692+E: template interface names should be changed: interface-name
693+E: template relations should be renamed to fit charm: relation-name
694+I: missing recommended hook config-changed
695
696=== modified file 'tests_functional/proof/expected/unknown-metadata'
697--- tests_functional/proof/expected/unknown-metadata 2013-11-11 19:08:11 +0000
698+++ tests_functional/proof/expected/unknown-metadata 2014-05-16 15:55:55 +0000
699@@ -1,9 +1,8 @@
700 E: Unknown root metadata field (foo)
701 W: metadata name (test) must match directory name (unknown-metadata) exactly for local deployment.
702-E: no copyright file
703-E: Includes template README.ex file
704-E: README.ex Includes boilerplate README.ex line 1
705-E: README.ex Includes boilerplate README.ex line 2
706+W: no copyright file
707+W: Includes template README.ex file
708+W: README.ex includes line 1 of boilerplate README.ex
709 E: template interface names should be changed: interface-name
710 E: Unknown relation field in relation relation-name - (baz)
711 E: template relations should be renamed to fit charm: relation-name
712@@ -14,3 +13,4 @@
713 I: relation non-map has no hooks
714 E: template interface names should be changed: interface-name
715 E: template relations should be renamed to fit charm: relation-name
716+I: missing recommended hook config-changed

Subscribers

People subscribed via source and target branches

to all changes: