Class: PDQTest::Puppet
- Inherits:
-
Object
- Object
- PDQTest::Puppet
- Defined in:
- lib/pdqtest/puppet.rb
Constant Summary collapse
- METADATA =
'metadata.json'- MODULE_DIR =
'/etc/puppetlabs/code/modules'- MAGIC_MARKER =
/#\s*@PDQTest/- BATS_TESTS =
'./spec/acceptance'- SETUP_SUFFIX =
'__setup.sh'- BEFORE_SUFFIX =
'__before.bats'- AFTER_SUFFIX =
'.bats'- EXAMPLES_DIR =
'./examples'- @@bats_executed =
[]
- @@setup_executed =
[]
Class Method Summary collapse
- .bats_test(container, example, suffix) ⇒ Object
- .find_examples ⇒ Object
- .get_bats_executed ⇒ Object
- .get_setup_executed ⇒ Object
- .install_deps ⇒ Object
- .link_module ⇒ Object
- .module_metadata ⇒ Object
- .module_name ⇒ Object
- .puppet_apply(example) ⇒ Object
- .reset_bats_executed ⇒ Object
- .reset_setup_executed ⇒ Object
- .run(container) ⇒ Object
- .setup_test(container, example) ⇒ Object
- .test_basename(t) ⇒ Object
Class Method Details
.bats_test(container, example, suffix) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/pdqtest/puppet.rb', line 72 def self.bats_test(container, example, suffix) testcase = BATS_TESTS + '/' + test_basename(example) + suffix if File.exists?(testcase) Escort::Logger.output.puts "*** bats test **** bats #{PDQTest::Instance::TEST_DIR}/#{testcase}" res = PDQTest::Docker.exec(container, "bats #{PDQTest::Instance::TEST_DIR}/#{testcase}") status = PDQTest::Docker.exec_status(res) Escort::Logger.output.puts res @@bats_executed << testcase else Escort::Logger.error.error "no #{suffix} tests for #{example} (should be at #{testcase})" status = true end status end |
.find_examples ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/pdqtest/puppet.rb', line 53 def self.find_examples() examples = [] if Dir.exists?(EXAMPLES_DIR) Find.find(EXAMPLES_DIR) do |e| if ! File.directory?(e) and ! File.readlines(e).grep(MAGIC_MARKER).empty? examples << e end end end Escort::Logger.output.puts "examples to run" + examples.to_s examples end |
.get_bats_executed ⇒ Object
27 28 29 |
# File 'lib/pdqtest/puppet.rb', line 27 def self.get_bats_executed @@bats_executed end |
.get_setup_executed ⇒ Object
31 32 33 |
# File 'lib/pdqtest/puppet.rb', line 31 def self.get_setup_executed @@setup_executed end |
.install_deps ⇒ Object
48 49 50 51 |
# File 'lib/pdqtest/puppet.rb', line 48 def self.install_deps # Install dependencies for module "cd #{PDQTest::Instance::TEST_DIR} && librarian-puppet install --path #{MODULE_DIR} --destructive" end |
.link_module ⇒ Object
44 45 46 |
# File 'lib/pdqtest/puppet.rb', line 44 def self.link_module "mkdir -p #{MODULE_DIR} && ln -s #{PDQTest::Instance::TEST_DIR} #{MODULE_DIR}/#{module_name}" end |
.module_metadata ⇒ Object
35 36 37 38 |
# File 'lib/pdqtest/puppet.rb', line 35 def self. file = File.read(Dir.pwd + File::SEPARATOR + METADATA) JSON.parse(file) end |
.module_name ⇒ Object
40 41 42 |
# File 'lib/pdqtest/puppet.rb', line 40 def self.module_name ['name'].split('-')[1] end |
.puppet_apply(example) ⇒ Object
134 135 136 |
# File 'lib/pdqtest/puppet.rb', line 134 def self.puppet_apply(example) "cd #{PDQTest::Instance::TEST_DIR} && puppet apply #{example}" end |
.reset_bats_executed ⇒ Object
19 20 21 |
# File 'lib/pdqtest/puppet.rb', line 19 def self.reset_bats_executed @@bats_executed = [] end |
.reset_setup_executed ⇒ Object
23 24 25 |
# File 'lib/pdqtest/puppet.rb', line 23 def self.reset_setup_executed @@setup_executed = [] end |
.run(container) ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/pdqtest/puppet.rb', line 104 def self.run(container) status = true Escort::Logger.output.puts "fetch deps" res = PDQTest::Docker.exec(container, install_deps) status &= PDQTest::Docker.exec_status(res) Escort::Logger.output.puts "linking" res = PDQTest::Docker.exec(container, link_module) status &= PDQTest::Docker.exec_status(res) Escort::Logger.output.puts "run tests" find_examples.each { |e| Escort::Logger.output.puts "testing #{e} #{status}" status &= setup_test(container, e) # see if we should run a bats test before running puppet status &= bats_test(container, e, BEFORE_SUFFIX) # run puppet apply res = PDQTest::Docker.exec(container, puppet_apply(e)) status &= PDQTest::Docker.exec_status(res, true) Escort::Logger.output.puts res # see if we should run a bats test after running puppet status &= bats_test(container, e, AFTER_SUFFIX) } status end |
.setup_test(container, example) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/pdqtest/puppet.rb', line 88 def self.setup_test(container, example) setup = BATS_TESTS + '/' + test_basename(example) + SETUP_SUFFIX if File.exists?(setup) Escort::Logger.output.puts "Setting up test for #{example}" script = File.read(setup) res = PDQTest::Docker.exec(container, script) status = PDQTest::Docker.exec_status(res) @@setup_executed << setup else Escort::Logger.output.puts "no setup file for #{example} (should be in #{setup})" status = true end status end |
.test_basename(t) ⇒ Object
66 67 68 69 70 |
# File 'lib/pdqtest/puppet.rb', line 66 def self.test_basename(t) # remove examples/ and .pp # eg ./examples/apache/mod/mod_php.pp --> apache/mod/mod_php t.gsub(EXAMPLES_DIR + '/','').gsub('.pp','') end |