onceover 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e331719150663a74f692d2459bd69c1743efc20b
4
- data.tar.gz: 398b392ff989e0aee94c1d12f4d8059d1393bf42
3
+ metadata.gz: f9cca70e7c3e4acba9f3a2aa60ae16087f30261f
4
+ data.tar.gz: e1f6255a54a6be2d9985b57bc82ca97bc7487bf6
5
5
  SHA512:
6
- metadata.gz: 1510032b56377bc1a5add18e8c0df518b8d58bf296a20a1dbc7c2b4545527a60c1d7362468a041cd480a59b4dcdbb1d795d4fdb2def5d794c39182f75f9ef4a0
7
- data.tar.gz: 504c1a7da69bbd3a12119f1d08b8f0d119f7de859774b15fcfd1e7f4428129d109a7ebd55f328c68c0068640fded8e181734e6d32aa1b71692d374137795d7af
6
+ metadata.gz: 6af61ee99bc06e538611e109157b9e328f53d02b2b6a1eddd0af6a1841cc65f065b131e3792e64767bb4d53a2df9a0c7255c79e0753b829402db2e677545c84f
7
+ data.tar.gz: 888e3c95a2630cbc47016af32084ef402f0c928e6b2ce3b46003a3828000e8d8f0a1a6c6b37581c4391d5c2e049a36a5805a8b89add7411d558819f04a6273a8
data/README.md CHANGED
@@ -19,6 +19,7 @@ Onceover is a tool to automatically run basic tests on an entire Puppet controlr
19
19
  - [Acceptance testing](#acceptance-testing)
20
20
  - [Using Workarounds](#using-workarounds)
21
21
  - [Extra tooling](#extra-tooling)
22
+ - [Accessing Onceover in a traditional RSpec test](#accessing-onceover-in-a-traditional-rspec-test)
22
23
  - [Accessing fact sets in a traditional RSpec test](#accessing-fact-sets-in-a-traditional-rspec-test)
23
24
  - [Accessing Roles in a traditional RSpec test](#accessing-roles-in-a-traditional-rspec-test)
24
25
  - [Filtering](#filtering)
@@ -369,6 +370,32 @@ Here we are specifying custom commands to run for starting, stopping and checkin
369
370
 
370
371
  Is this all too simple for you? Great! This is supposed to be a gateway to writing your own super-awesome really complicated tests using more traditional tools. If you want to ditch this tool in favour of doing it yourself, go ahead, but take these ruby methods as a parting gift:
371
372
 
373
+ ### Accessing Onceover in a traditional RSpec test
374
+
375
+ If you would like to use `onceover.yaml` to manage which tests you want to run, but want more than just `it { should_compile }` tests to be run you can write you own as follows:
376
+
377
+ ```ruby
378
+ # spec/classes/role_spec.rb
379
+ require 'spec_helper'
380
+ require 'onceover/controlrepo'
381
+ require 'helpers/shared_examples'
382
+
383
+ Onceover::Controlrepo.new.spec_tests do |class_name,node_name,facts,pre_conditions|
384
+ describe class_name do
385
+ context "on #{node_name}" do
386
+ let(:facts) { facts }
387
+ let(:pre_condition) { pre_conditions }
388
+
389
+ it_behaves_like 'soe'
390
+ end
391
+ end
392
+ end
393
+ ```
394
+
395
+ This will use the `soe` [shared example](https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples) on all of the tests that are configured in your `onceover.yaml` including any [pre_conditions](#using-workarounds) that you have set up.
396
+
397
+ **Note:** Onceover will automatically run any extra Rspec tests that it finds in the normal directories `spec/{classes,defines,unit,functions,hosts,integration,types}` so you can easily use auto-generated spec tests in conjunction with your own Rspec tests.
398
+
372
399
  ### Accessing fact sets in a traditional RSpec test
373
400
 
374
401
  We can access all of our fact sets using `Onceover::Controlrepo.facts`. Normally it would be implemented something like this:
@@ -382,9 +409,9 @@ Onceover::Controlrepo.facts.each do |facts|
382
409
  end
383
410
  ```
384
411
 
385
- ### Accessing Roles in a traditional RSpec test
412
+ ### Other (possibly less useful) methods
386
413
 
387
- The following code will test all roles on all nodes in native rspec:
414
+ The following code will test all roles that onceover can find (ignoring the ones configured in `onceover.yaml`) on all nodes in native rspec:
388
415
 
389
416
  ```ruby
390
417
  require 'spec_helper'
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "onceover"
6
- s.version = "3.0.4"
6
+ s.version = "3.0.5"
7
7
  s.authors = ["Dylan Ratcliffe"]
8
8
  s.email = ["dylan.ratcliffe@puppet.com"]
9
9
  s.homepage = "https://github.com/dylanratcliffe/onceover"
@@ -25,7 +25,7 @@ class Onceover
25
25
  optional nil, :nodeset_file, 'YAML file containing node definitions'
26
26
  optional nil, :tempdir, 'Temp directory to use, defaults to .controlrepo'
27
27
  optional nil, :manifest, 'Path fo find manifests'
28
- optional nil, :controlrepo_yaml, 'Path of controlrepo.yaml'
28
+ optional nil, :onceover_yaml, 'Path of controlrepo.yaml'
29
29
 
30
30
  run do |opts, args, cmd|
31
31
  puts cmd.help(:verbose => opts[:verbose])
@@ -38,7 +38,7 @@ This includes deploying using r10k and running all custom tests.
38
38
 
39
39
  run do |opts, args, cmd|
40
40
  repo = Onceover::Controlrepo.new(opts)
41
- runner = Onceover::Runner.new(repo,Onceover::TestConfig.new(repo.controlrepo_yaml,opts),:spec)
41
+ runner = Onceover::Runner.new(repo,Onceover::TestConfig.new(repo.onceover_yaml,opts),:spec)
42
42
  runner.prepare!
43
43
  runner.run_spec!
44
44
  end
@@ -55,7 +55,7 @@ This includes deploying using r10k and running all custom tests.
55
55
 
56
56
  run do |opts, args, cmd|
57
57
  repo = Onceover::Controlrepo.new(opts)
58
- runner = Onceover::Runner.new(repo,Onceover::TestConfig.new(repo.controlrepo_yaml,opts),:acceptance)
58
+ runner = Onceover::Runner.new(repo,Onceover::TestConfig.new(repo.onceover_yaml,opts),:acceptance)
59
59
  runner.prepare!
60
60
  runner.run_acceptance!
61
61
  end
@@ -28,7 +28,7 @@ class Onceover
28
28
  attr_accessor :nodeset_file
29
29
  attr_accessor :manifest
30
30
  attr_accessor :tempdir
31
- attr_accessor :controlrepo_yaml
31
+ attr_accessor :onceover_yaml
32
32
  attr_accessor :opts
33
33
 
34
34
  # Create methods on self so that we can access these basic things without
@@ -83,7 +83,22 @@ class Onceover
83
83
 
84
84
  def initialize(opts = {})
85
85
  # When we initialize the object it is going to set some instance vars
86
- @root = opts[:path] || Dir.pwd
86
+
87
+ # We want people to be able to run this from anywhere within the repo
88
+ # so traverse up until we think we are in a controlrepo.
89
+ if opts[:path]
90
+ @root = opts[:path]
91
+ else
92
+ @root = Dir.pwd
93
+ until File.exist?(File.expand_path('./environment.conf',@root)) do
94
+ # Throw an exception if we can't go any further up
95
+ throw "Could not file root of the controlrepo anywhere above #{Dir.pwd}" if @root == File.expand_path('../',@root)
96
+
97
+ # Step up and try again
98
+ @root = File.expand_path('../',@root)
99
+ end
100
+ end
101
+
87
102
  @environmentpath = opts[:environmentpath] || 'etc/puppetlabs/code/environments'
88
103
  @puppetfile = opts[:puppetfile] || File.expand_path('./Puppetfile',@root)
89
104
  @environment_conf = opts[:environment_conf] || File.expand_path('./environment.conf',@root)
@@ -93,10 +108,10 @@ class Onceover
93
108
  @nodeset_file = opts[:nodeset_file] || File.expand_path('./spec/acceptance/nodesets/onceover-nodes.yml',@root)
94
109
  @role_regex = /role[s]?:{2}/
95
110
  @profile_regex = /profile[s]?:{2}/
96
- @tempdir = opts[:tempdir] || ENV['CONTROLREPO_temp'] || File.absolute_path('./.onceover')
111
+ @tempdir = opts[:tempdir] || File.expand_path('./.onceover',@root)
97
112
  $temp_modulepath = nil
98
113
  @manifest = opts[:manifest] || config['manifest'] ? File.expand_path(config['manifest'],@root) : nil
99
- @controlrepo_yaml = opts[:controlrepo_yaml] || "#{@spec_dir}/onceover.yaml"
114
+ @onceover_yaml = opts[:onceover_yaml] || "#{@spec_dir}/onceover.yaml"
100
115
  @opts = opts
101
116
  logger.level = :debug if @opts[:debug]
102
117
  end
@@ -113,7 +128,7 @@ class Onceover
113
128
  #{'nodeset_file'.green} #{@nodeset_file}
114
129
  #{'roles'.green} #{roles}
115
130
  #{'profiles'.green} #{profiles}
116
- #{'controlrepo.yaml'.green} #{@controlrepo_yaml}
131
+ #{'onceover.yaml'.green} #{@onceover_yaml}
117
132
  END
118
133
  end
119
134
 
@@ -371,7 +386,7 @@ class Onceover
371
386
  require 'pathname'
372
387
  require 'colored'
373
388
 
374
- Onceover::Controlrepo.init_write_file(generate_controlrepo_yaml(repo),repo.controlrepo_yaml)
389
+ Onceover::Controlrepo.init_write_file(generate_onceover_yaml(repo),repo.onceover_yaml)
375
390
  Onceover::Controlrepo.init_write_file(generate_nodesets(repo),repo.nodeset_file)
376
391
  Onceover::Controlrepo.init_write_file(Onceover::Controlrepo.evaluate_template('pre_conditions_README.md.erb',binding),File.expand_path('./pre_conditions/README.md',repo.spec_dir))
377
392
  Onceover::Controlrepo.init_write_file(Onceover::Controlrepo.evaluate_template('factsets_README.md.erb',binding),File.expand_path('./factsets/README.md',repo.spec_dir))
@@ -393,7 +408,7 @@ class Onceover
393
408
  end
394
409
  end
395
410
 
396
- def self.generate_controlrepo_yaml(repo)
411
+ def self.generate_onceover_yaml(repo)
397
412
  # This will return a controlrepo.yaml that can be written to a file
398
413
  Onceover::Controlrepo.evaluate_template('controlrepo.yaml.erb',binding)
399
414
  end
@@ -466,6 +481,22 @@ class Onceover
466
481
  end
467
482
  end
468
483
 
484
+ # Returns the deduplicted and verified output of testconfig.spec_tests for
485
+ # use in Rspec tests so that we don't have to deal with more than one object
486
+ def spec_tests(&block)
487
+ require 'onceover/testconfig'
488
+
489
+ # Load up all of the tests and deduplicate them
490
+ testconfig = Onceover::TestConfig.new(@onceover_yaml,@opts)
491
+ testconfig.spec_tests.each { |tst| testconfig.verify_spec_test(self,tst) }
492
+ tests = testconfig.run_filters(Onceover::Test.deduplicate(testconfig.spec_tests))
493
+
494
+ # Loop over each test, executing the user's block on each
495
+ tests.each do |tst|
496
+ block.call(tst.classes[0].name,tst.nodes[0].name,tst.nodes[0].fact_set,testconfig.pre_condition)
497
+ end
498
+ end
499
+
469
500
  private
470
501
 
471
502
  def read_facts(facts_file)
@@ -29,12 +29,12 @@ task :controlrepo_details do
29
29
  puts Onceover::Controlrepo.new.to_s
30
30
  end
31
31
 
32
- task :generate_controlrepo_yaml do
32
+ task :generate_onceover_yaml do
33
33
  require 'onceover/controlrepo'
34
34
  repo = Onceover::Controlrepo.new
35
35
  template_dir = File.expand_path('../../templates',File.dirname(__FILE__))
36
- controlrepo_yaml_template = File.read(File.expand_path('./controlrepo.yaml.erb',template_dir))
37
- puts ERB.new(controlrepo_yaml_template, nil, '-').result(binding)
36
+ onceover_yaml_template = File.read(File.expand_path('./controlrepo.yaml.erb',template_dir))
37
+ puts ERB.new(onceover_yaml_template, nil, '-').result(binding)
38
38
  end
39
39
 
40
40
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onceover
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Ratcliffe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-14 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake