dockerspec 0.1.0

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.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/CHANGELOG.md +7 -0
  4. data/CONTRIBUTING.md +13 -0
  5. data/LICENSE +190 -0
  6. data/README.md +202 -0
  7. data/Rakefile +57 -0
  8. data/TESTING.md +30 -0
  9. data/TODO.md +6 -0
  10. data/lib/dockerspec.rb +21 -0
  11. data/lib/dockerspec/builder.rb +408 -0
  12. data/lib/dockerspec/builder/config_helpers.rb +425 -0
  13. data/lib/dockerspec/builder/image_gc.rb +71 -0
  14. data/lib/dockerspec/builder/logger.rb +56 -0
  15. data/lib/dockerspec/builder/logger/ci.rb +69 -0
  16. data/lib/dockerspec/builder/logger/debug.rb +47 -0
  17. data/lib/dockerspec/builder/logger/info.rb +111 -0
  18. data/lib/dockerspec/builder/logger/silent.rb +51 -0
  19. data/lib/dockerspec/builder/matchers.rb +134 -0
  20. data/lib/dockerspec/builder/matchers/helpers.rb +88 -0
  21. data/lib/dockerspec/docker_gem.rb +25 -0
  22. data/lib/dockerspec/exceptions.rb +26 -0
  23. data/lib/dockerspec/helper/ci.rb +61 -0
  24. data/lib/dockerspec/helper/docker.rb +44 -0
  25. data/lib/dockerspec/helper/multiple_sources_description.rb +142 -0
  26. data/lib/dockerspec/helper/rspec_example_helpers.rb +48 -0
  27. data/lib/dockerspec/rspec_assertions.rb +54 -0
  28. data/lib/dockerspec/rspec_resources.rb +198 -0
  29. data/lib/dockerspec/rspec_settings.rb +29 -0
  30. data/lib/dockerspec/runner.rb +374 -0
  31. data/lib/dockerspec/serverspec.rb +20 -0
  32. data/lib/dockerspec/serverspec/rspec_resources.rb +174 -0
  33. data/lib/dockerspec/serverspec/rspec_settings.rb +27 -0
  34. data/lib/dockerspec/serverspec/runner.rb +302 -0
  35. data/lib/dockerspec/serverspec/specinfra_backend.rb +128 -0
  36. data/lib/dockerspec/serverspec/specinfra_hack.rb +43 -0
  37. data/lib/dockerspec/version.rb +29 -0
  38. data/spec/spec_helper.rb +44 -0
  39. metadata +293 -0
@@ -0,0 +1,128 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2015 Xabier de Zuazo
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'specinfra/backend/base'
21
+ require 'dockerspec/serverspec/specinfra_hack'
22
+
23
+ module Dockerspec
24
+ module Serverspec
25
+ #
26
+ # A class to handle the underlying Specinfra backend.
27
+ #
28
+ # This class saves Specinfra instance in internally and then it is able
29
+ # to recover it from there and setup the running environment accordingly.
30
+ #
31
+ # This class uses a small hack in the Specinfra class to reset its internal
32
+ # singleton instance.
33
+ #
34
+ class SpecinfraBackend
35
+ #
36
+ # The SpecinfraBackend constructor.
37
+ #
38
+ # @param backend [Symbol, Specinfra::Backend::Base, Class] The backend
39
+ # can be the backend name as a symbol, a Specinfra backend object or
40
+ # a Specinfra backend class.
41
+ #
42
+ # @api public
43
+ #
44
+ def initialize(backend)
45
+ @backend = backend
46
+ end
47
+
48
+ #
49
+ # Saves the Specinfra backend instance reference internally.
50
+ #
51
+ # @return void
52
+ #
53
+ # @api public
54
+ #
55
+ def save
56
+ @saved_backend_instance = backend_instance
57
+ end
58
+
59
+ #
60
+ # Restores the Specinfra backend instance.
61
+ #
62
+ # @return void
63
+ #
64
+ # @api public
65
+ #
66
+ def restore
67
+ instance_set(@saved_backend_instance)
68
+ end
69
+
70
+ #
71
+ # Resets the Specinfra backend.
72
+ #
73
+ # @return void
74
+ #
75
+ # @api public
76
+ #
77
+ def reset
78
+ instance_set(nil)
79
+ end
80
+
81
+ protected
82
+
83
+ #
84
+ # Sets the Specinfra backend.
85
+ #
86
+ # Used by {.load}.
87
+ #
88
+ # @param instance [Specinfra::Backend::Base] The Specinfra backend
89
+ # object.
90
+ #
91
+ # @return void
92
+ #
93
+ # @api private
94
+ #
95
+ def instance_set(instance)
96
+ backend_class.instance_set(instance)
97
+ end
98
+
99
+ #
100
+ # Returns the current Specinfra backend object.
101
+ #
102
+ # @return [Specinfra::Backend::Base] The Specinfra backend object.
103
+ #
104
+ # @api private
105
+ #
106
+ def backend_instance
107
+ backend_class.instance
108
+ end
109
+
110
+ #
111
+ # Returns the current Specinfra backend class.
112
+ #
113
+ # @return [Class] The Specinfra backend class.
114
+ #
115
+ # @api private
116
+ #
117
+ def backend_class
118
+ @backend_class ||= begin
119
+ if Class == @backend.class && @backend <= Specinfra::Backend::Base
120
+ return @backend
121
+ end
122
+ return @backend.class if @backend.is_a?(Specinfra::Backend::Base)
123
+ Specinfra::Backend.const_get("#{@backend.to_s.to_camel_case}")
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2015 Xabier de Zuazo
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'specinfra/backend/base'
21
+
22
+ #
23
+ # Add a method to the {Specinfra::Backend::Base} singleton class to set its
24
+ # internal backend.
25
+ #
26
+ # TODO: This hack makes me want to poke my own eyes out.
27
+ #
28
+ Specinfra::Backend::Base.class_eval do
29
+ #
30
+ # Sets the internal backend instance.
31
+ #
32
+ # @param instance [Specinfra::Backend::Base] the backend object.
33
+ #
34
+ # @return [Specinfra::Backend::Base]
35
+ #
36
+ # @api public
37
+ #
38
+ def self.instance_set(instance)
39
+ return if @instance == instance
40
+ property[:host_inventory] = property[:os] = nil
41
+ @instance = instance
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2015 Xabier de Zuazo
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ #
21
+ # The main module with methods to run tests against built images and running
22
+ # containers.
23
+ #
24
+ module Dockerspec
25
+ #
26
+ # Dockerspec Ruby Gem version.
27
+ #
28
+ VERSION = '0.1.0'
29
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2015 Xabier de Zuazo
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'simplecov'
21
+ if ENV['TRAVIS'] && RUBY_VERSION >= '2.0'
22
+ require 'coveralls'
23
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
24
+ end
25
+ SimpleCov.start do
26
+ add_filter '/spec/'
27
+ end
28
+
29
+ require 'dockerspec'
30
+ require 'dockerspec/serverspec'
31
+
32
+ require 'should_not/rspec'
33
+
34
+ RSpec.configure do |config|
35
+ # Prohibit using the should syntax
36
+ config.expect_with :rspec do |spec|
37
+ spec.syntax = :expect
38
+ end
39
+
40
+ config.order = 'random'
41
+
42
+ config.color = true
43
+ config.tty = true
44
+ end
metadata ADDED
@@ -0,0 +1,293 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dockerspec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Xabier de Zuazo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: docker-api
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.22'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.22'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-its
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: serverspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.24'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.24'
69
+ - !ruby/object:Gem::Dependency
70
+ name: specinfra-backend-docker_lxc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: erubis
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-core
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.1'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-expectations
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.1'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec-mocks
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.1'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: coveralls
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.7'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.7'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.9'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.9'
181
+ - !ruby/object:Gem::Dependency
182
+ name: should_not
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.1'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.1'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 0.35.0
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 0.35.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: yard
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '0.8'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '0.8'
223
+ description: A small gem to run RSpec and Serverspec tests against Dockerfiles or
224
+ Docker images easily.
225
+ email: xabier@zuazo.org
226
+ executables: []
227
+ extensions: []
228
+ extra_rdoc_files: []
229
+ files:
230
+ - ".yardopts"
231
+ - CHANGELOG.md
232
+ - CONTRIBUTING.md
233
+ - LICENSE
234
+ - README.md
235
+ - Rakefile
236
+ - TESTING.md
237
+ - TODO.md
238
+ - lib/dockerspec.rb
239
+ - lib/dockerspec/builder.rb
240
+ - lib/dockerspec/builder/config_helpers.rb
241
+ - lib/dockerspec/builder/image_gc.rb
242
+ - lib/dockerspec/builder/logger.rb
243
+ - lib/dockerspec/builder/logger/ci.rb
244
+ - lib/dockerspec/builder/logger/debug.rb
245
+ - lib/dockerspec/builder/logger/info.rb
246
+ - lib/dockerspec/builder/logger/silent.rb
247
+ - lib/dockerspec/builder/matchers.rb
248
+ - lib/dockerspec/builder/matchers/helpers.rb
249
+ - lib/dockerspec/docker_gem.rb
250
+ - lib/dockerspec/exceptions.rb
251
+ - lib/dockerspec/helper/ci.rb
252
+ - lib/dockerspec/helper/docker.rb
253
+ - lib/dockerspec/helper/multiple_sources_description.rb
254
+ - lib/dockerspec/helper/rspec_example_helpers.rb
255
+ - lib/dockerspec/rspec_assertions.rb
256
+ - lib/dockerspec/rspec_resources.rb
257
+ - lib/dockerspec/rspec_settings.rb
258
+ - lib/dockerspec/runner.rb
259
+ - lib/dockerspec/serverspec.rb
260
+ - lib/dockerspec/serverspec/rspec_resources.rb
261
+ - lib/dockerspec/serverspec/rspec_settings.rb
262
+ - lib/dockerspec/serverspec/runner.rb
263
+ - lib/dockerspec/serverspec/specinfra_backend.rb
264
+ - lib/dockerspec/serverspec/specinfra_hack.rb
265
+ - lib/dockerspec/version.rb
266
+ - spec/spec_helper.rb
267
+ homepage: https://github.com/zuazo/dockerspec
268
+ licenses:
269
+ - Apache-2.0
270
+ metadata: {}
271
+ post_install_message:
272
+ rdoc_options: []
273
+ require_paths:
274
+ - lib
275
+ required_ruby_version: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: 2.0.0
280
+ required_rubygems_version: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: '0'
285
+ requirements: []
286
+ rubyforge_project:
287
+ rubygems_version: 2.2.2
288
+ signing_key:
289
+ specification_version: 4
290
+ summary: Dockerspec
291
+ test_files:
292
+ - spec/spec_helper.rb
293
+ has_rdoc: