pdqtest 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d8bf6717a22891ee4b7d7a57436357135f21c2c
4
- data.tar.gz: a89f67be7be4450c0af8c632020a0ef42f11a84f
3
+ metadata.gz: 4b859b1e69e60d862ea7bad7f5e163f09babeb03
4
+ data.tar.gz: 06eae870f12823b5bc51a14163c52229654de764
5
5
  SHA512:
6
- metadata.gz: 3f2e86d6b37464f7690d1cbd19e5a34818dd9bbd4bd36a10bc7cf2629bd0c2d52cdea93e3dc24d8d87c710e77b7f733e0cf9c440cf45c2dc19be9d5024192cb6
7
- data.tar.gz: f17400d1bc19650bae85ca29cb2bca977a528f78a6b7d8965b38256a6eb2dbfd23d565736c975790558638d3f446f350a72c9f1e1347204105bd357a271c1e29
6
+ metadata.gz: cea2599e6d6c22b56a7fd0285904618d448de6c195c2bedf1c721a157c19b5b21258fcfb1b8604be4bc00ccbff589d8293da4356390667070b71c7aa445844de
7
+ data.tar.gz: 893d79733f89deef23dbe53bc6b5bcce2ea9108536b0da082561ec6f8f43ac803a5733aeb0ea7a735c054744cbcd4b90cc08d2d4e81f2c16037ff5323727d2e5
data/exe/pdqtest CHANGED
@@ -44,9 +44,18 @@ Escort::App.create do |app|
44
44
 
45
45
 
46
46
  app.command :acceptance do |command|
47
+ command.options do |opts|
48
+ opts.opt(:example,
49
+ 'Run only this example (eg --example examples/init.pp)',
50
+ :long => '--example',
51
+ :type => :string,
52
+ :default => nil,
53
+ )
54
+ end
47
55
  command.action do |options, arguments|
48
56
  PDQTest::Instance.set_keep_container(options[:global][:options][:keep_container])
49
- PDQTest::core.run(lambda {PDQTest::Instance.run})
57
+ example = options[:global][:commands][:acceptance][:options][:example]
58
+ PDQTest::Core.run(lambda {PDQTest::Instance.run(example)})
50
59
  end
51
60
  end
52
61
 
@@ -1,7 +1,7 @@
1
1
  module PDQTest
2
2
  module Docker
3
- STDOUT = 0
4
- STDERR = 1
3
+ OUT = 0
4
+ ERR = 1
5
5
  STATUS = 2
6
6
  ENV='export TERM=xterm LC_ALL=C PATH=/usr/local/bats/bin:/opt/puppetlabs/puppet/bin:$PATH;'
7
7
  IMAGE_NAME='geoffwilliams/pdqtest-centos:2017-01-08-0'
@@ -41,5 +41,30 @@ module PDQTest
41
41
  end
42
42
  status = allowable_values.include?(res[STATUS])
43
43
  end
44
+
45
+ def self.exec_out(res)
46
+ res[OUT]
47
+ end
48
+
49
+ def self.exec_err(res)
50
+ res[ERR]
51
+ end
52
+
53
+ def self.log_out(res)
54
+ exec_out(res).each { |l|
55
+ # Output comes back as an array and needs to be iterated or we lose our
56
+ # ansi formatting
57
+ Escort::Logger.output.puts l
58
+ }
59
+ end
60
+
61
+ def self.log_err(res)
62
+ exec_err(res).each { |l|
63
+ # Output comes back as an array and needs to be iterated or we lose our
64
+ # ansi formatting
65
+ Escort::Logger.error.error l
66
+ }
67
+ end
68
+
44
69
  end
45
70
  end
@@ -21,14 +21,14 @@ module PDQTest
21
21
  @@keep_container = keep_container
22
22
  end
23
23
 
24
- def self.run
24
+ def self.run(example=nil)
25
25
  # needed to prevent timeouts from container.exec()
26
26
  Excon.defaults[:write_timeout] = 1000
27
27
  Excon.defaults[:read_timeout] = 1000
28
28
 
29
29
  @@active_container = PDQTest::Docker::new_container(TEST_DIR)
30
30
  Escort::Logger.output.puts "alive, running tests"
31
- status = PDQTest::Puppet.run(@@active_container)
31
+ status = PDQTest::Puppet.run(@@active_container, example)
32
32
 
33
33
  if @@keep_container
34
34
  Escort::Logger.output.puts "finished build, container #{@@active_container.id} left on system"
@@ -66,6 +66,7 @@ module PDQTest
66
66
  def self.test_basename(t)
67
67
  # remove examples/ and .pp
68
68
  # eg ./examples/apache/mod/mod_php.pp --> apache/mod/mod_php
69
+
69
70
  t.gsub(EXAMPLES_DIR + '/','').gsub('.pp','')
70
71
  end
71
72
 
@@ -75,7 +76,7 @@ module PDQTest
75
76
  Escort::Logger.output.puts "*** bats test **** bats #{PDQTest::Instance::TEST_DIR}/#{testcase}"
76
77
  res = PDQTest::Docker.exec(container, "bats #{PDQTest::Instance::TEST_DIR}/#{testcase}")
77
78
  status = PDQTest::Docker.exec_status(res)
78
- Escort::Logger.output.puts res
79
+ PDQTest::Docker.log_out(res)
79
80
  @@bats_executed << testcase
80
81
  else
81
82
  Escort::Logger.error.error "no #{suffix} tests for #{example} (should be at #{testcase})"
@@ -92,6 +93,8 @@ module PDQTest
92
93
  script = File.read(setup)
93
94
  res = PDQTest::Docker.exec(container, script)
94
95
  status = PDQTest::Docker.exec_status(res)
96
+ PDQTest::Docker.log_out(res)
97
+
95
98
  @@setup_executed << setup
96
99
  else
97
100
  Escort::Logger.output.puts "no setup file for #{example} (should be in #{setup})"
@@ -101,7 +104,49 @@ module PDQTest
101
104
  status
102
105
  end
103
106
 
104
- def self.run(container)
107
+ def self.run_example(container, example)
108
+ if ! example.start_with?('./')
109
+ # must prepend ./ to the example or we will not match the correct regexp
110
+ # in test_basename
111
+ example = "./#{example}"
112
+ end
113
+ Escort::Logger.output.puts "testing #{example}"
114
+ status = false
115
+
116
+ if setup_test(container, example)
117
+
118
+ # see if we should run a bats test before running puppet
119
+ if bats_test(container, example, BEFORE_SUFFIX)
120
+
121
+ # run puppet apply - 1st run
122
+ res = PDQTest::Docker.exec(container, puppet_apply(example))
123
+ PDQTest::Docker.log_out(res)
124
+ if PDQTest::Docker.exec_status(res, true) # allow 2 as exit status
125
+
126
+ # run puppet apply - 2nd run (check for idempotencey/no more changes)
127
+ res = PDQTest::Docker.exec(container, puppet_apply(example))
128
+ PDQTest::Docker.log_out(res)
129
+
130
+ # run the bats test if nothing failed yet
131
+ if PDQTest::Docker.exec_status(res) # only allow 0 as exit status
132
+ status = bats_test(container, example, AFTER_SUFFIX)
133
+ else
134
+ Escort::Logger.error.error "Not idempotent: #{example}"
135
+ end
136
+ else
137
+ Escort::Logger.error.error "First puppet run of #{example} failed"
138
+ end
139
+ else
140
+ Escort::Logger.error.error "Bats tests to run before #{example} failed"
141
+ end
142
+ else
143
+ Escort::Logger.error.error "Setup script for #{example} failed"
144
+ end
145
+
146
+ status
147
+ end
148
+
149
+ def self.run(container, example=nil)
105
150
  status = true
106
151
  Escort::Logger.output.puts "fetch deps"
107
152
  res = PDQTest::Docker.exec(container, install_deps)
@@ -111,23 +156,27 @@ module PDQTest
111
156
  res = PDQTest::Docker.exec(container, link_module)
112
157
  status &= PDQTest::Docker.exec_status(res)
113
158
  Escort::Logger.output.puts "run tests"
114
- find_examples.each { |e|
115
- Escort::Logger.output.puts "testing #{e} #{status}"
116
-
117
- status &= setup_test(container, e)
118
-
119
- # see if we should run a bats test before running puppet
120
- status &= bats_test(container, e, BEFORE_SUFFIX)
121
-
122
- # run puppet apply
123
- res = PDQTest::Docker.exec(container, puppet_apply(e))
124
- status &= PDQTest::Docker.exec_status(res, true)
125
- Escort::Logger.output.puts res
126
-
127
- # see if we should run a bats test after running puppet
128
- status &= bats_test(container, e, AFTER_SUFFIX)
129
- }
130
-
159
+ if example
160
+ status &= run_example(container, example)
161
+ else
162
+ find_examples.each { |e|
163
+ status &= run_example(container, e)
164
+ # Escort::Logger.output.puts "testing #{e} #{status}"
165
+ #
166
+ # status &= setup_test(container, e)
167
+ #
168
+ # # see if we should run a bats test before running puppet
169
+ # status &= bats_test(container, e, BEFORE_SUFFIX)
170
+ #
171
+ # # run puppet apply
172
+ # res = PDQTest::Docker.exec(container, puppet_apply(e))
173
+ # status &= PDQTest::Docker.exec_status(res, true)
174
+ # Escort::Logger.output.puts res
175
+ #
176
+ # # see if we should run a bats test after running puppet
177
+ # status &= bats_test(container, e, AFTER_SUFFIX)
178
+ }
179
+ end
131
180
  status
132
181
  end
133
182
 
@@ -1,3 +1,3 @@
1
1
  module PDQTest
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pdqtest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Williams