Hi,

I'm to understand how to get a full coverage for puppet code with spec 
tests to be generated so I can get output like the example from simplecov 
at https://github.com/colszowka/simplecov#example-output.

Ideally I would subsequently try to hook into the coverage repo and do some 
post processing looking at where most of the code churn has been in our 
puppet control code repo and target those areas as important for test 
coverage (and likely refactoring).

However I've stuck on not being able to get output from simplecov that 
shows the manifests that were tested by the spec tests, although the 
summary triggered from running 'RSpec::Puppet::Coverage.report!' suggests 
that something was capable of tracking coverage correctly.

Although we have a different layout than normal, my testing so far suggests 
that the reporting simply doesn't work between puppet and simplecov.

Usually when something like this happens, I assume I'm doing something 
blindingly stupid, so I've put together some example code that shows my 
problem should anyone like to run through the spec tests from it.

Doing some simple experiments I've pushed up a repository showing the issue 
https://github.com/electrofelix/puppet-simplecov_bug containing 3 commits
- (HEAD commit): convert to match more closely skeleton layout from 
https://github.com/garethr/puppet-module-skeleton/blob/master/skeleton/Gemfile
- (HEAD~1 commit): try to follow a more standard layout
- (root commit): Use simple define taken from our codebase and matching the 
layout we have as closely as possible


Note we're still stuck on Puppet 3.8 and using ruby 2.1.10 via rvm while I 
was doing the spec tests, plan to upgrade to 5 in the near future, so if 
this problem has been solved via something in the puppet engine (some 
suggestions that the multiple loading by puppet was wiping SimpleCov's 
tracking over coverage) and we just need to hurry up that's great.

But no matter what layout/format I seem to try, the simplecov report prints 
nothing as having been covered, e.g.:

***************************************************************************************************
Total resources:   9
Touched resources: 8
Resource coverage: 88.89%
Untouched resources:

  Ssh::Config_entry[example custom-host]

Finished in 2.01 seconds (files took 1.05 seconds to load)
12 examples, 0 failures
Coverage report generated for RSpec to <path>/puppet-simplecov_bug/html. 0 
/ 67 LOC (0.0%) covered.

COVERAGE:   0.00% -- 0/67 lines in 2 files

+----------+-------------------------------+-------+--------+-----------------------------------------+
| coverage | file                          | lines | missed | 
missing                                 |
+----------+-------------------------------+-------+--------+-----------------------------------------+
|   0.00%  | manifests/server/localuser.pp | 67    | 67     | 5-13, 15-19, 
21-34, 36-44, 46-55, 57-76 |
+----------+-------------------------------+-------+--------+-----------------------------------------+
1 file(s) with 100% coverage not shown
***************************************************************************************************

RSpec::Puppet::Coverage.report causes the first part to be printed and 
certainly it shows it's tracking coverage on the files touched, however the 
simplecov report at the end does not appear to be able to correlate the 
tests in 'spec/defines/server_localuser_spec.rb' as having tested 
'manifests/server/localuser.pp'.

Additionally what is missing from both is all files that are not touched at 
all so far by tests, though I do have some code that appears to be able to 
handle that by passing 'track_files("**/*.pp")' to the SimpleCov object 
configuration.



Thinking maybe I started from the wrong place, I took 
https://github.com/garethr/puppet-module-skeleton and created a fresh 
module from that and then dropped in both the spec file 
(https://github.com/electrofelix/puppet-simplecov_bug/blob/master/spec/defines/server_localuser_spec.rb)
 
and define 
(https://github.com/electrofelix/puppet-simplecov_bug/blob/master/manifests/server/localuser.pp)
 
that were being tested and the result remained the same.


Rspec::Puppet::Coverage.report! gave:

Total resources:   15
Touched resources: 14
Resource coverage: 93.33%
Untouched resources:

  Ssh::Config_entry[example custom-host]


But SimpleCov gave:

Coverage report generated for RSpec to <path>/test-coverage/coverage. 0.0 / 
0.0 LOC (100.0%) covered.


So even worse than before...


Resources I've looked at:

https://github.com/garethr/puppet-module-skeleton
https://github.com/rodjek/rspec-puppet
https://github.com/rodjek/rspec-puppet#producing-coverage-reports
https://github.com/rodjek/rspec-puppet/issues/316
https://github.com/puppetlabs/puppetlabs-rook (seems to have the same issue)

https://github.com/colszowka/simplecov#example-output
https://github.com/colszowka/simplecov/issues/682
https://github.com/colszowka/simplecov/issues/389
https://github.com/colszowka/simplecov/issues/340
https://github.com/colszowka/simplecov/issues/77

my example of the issue:
https://github.com/electrofelix/puppet-simplecov_bug


Hoping that there is something relatively trivial here that I'm missing 
that allows the reports generated by simplecov to correctly reference spec 
tests with puppet code.



Regards,
Darragh

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/3afe6401-44d9-4bcb-8628-6bc76e4b3491%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to