dockerspec 0.2.0 → 0.3.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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/LICENSE +1 -1
  4. data/README.md +190 -24
  5. data/Rakefile +60 -6
  6. data/TODO.md +3 -2
  7. data/lib/dockerspec.rb +1 -2
  8. data/lib/dockerspec/builder.rb +13 -6
  9. data/lib/dockerspec/builder/config_helpers.rb +8 -3
  10. data/lib/dockerspec/builder/logger/ci.rb +2 -2
  11. data/lib/dockerspec/builder/matchers.rb +32 -51
  12. data/lib/dockerspec/configuration.rb +188 -0
  13. data/lib/dockerspec/docker_exception_parser.rb +2 -2
  14. data/lib/dockerspec/engine/base.rb +156 -0
  15. data/lib/dockerspec/engine/infrataster.rb +87 -0
  16. data/lib/dockerspec/engine/specinfra.rb +130 -0
  17. data/lib/dockerspec/engine/specinfra/backend.rb +163 -0
  18. data/lib/dockerspec/{serverspec/specinfra_hack.rb → engine/specinfra/backend_hack.rb} +17 -3
  19. data/lib/dockerspec/engine_list.rb +150 -0
  20. data/lib/dockerspec/exceptions.rb +13 -0
  21. data/lib/dockerspec/helper/multiple_sources_description.rb +3 -3
  22. data/lib/dockerspec/helper/rspec_example_helpers.rb +86 -6
  23. data/lib/dockerspec/infrataster.rb +26 -0
  24. data/lib/dockerspec/rspec.rb +21 -0
  25. data/lib/dockerspec/{rspec_configuration.rb → rspec/configuration.rb} +1 -1
  26. data/lib/dockerspec/rspec/resources.rb +602 -0
  27. data/lib/dockerspec/rspec/resources/its_container.rb +110 -0
  28. data/lib/dockerspec/{rspec_settings.rb → rspec/settings.rb} +5 -1
  29. data/lib/dockerspec/runner.rb +2 -357
  30. data/lib/dockerspec/runner/base.rb +367 -0
  31. data/lib/dockerspec/runner/compose.rb +322 -0
  32. data/lib/dockerspec/runner/docker.rb +302 -0
  33. data/lib/dockerspec/runner/serverspec.rb +21 -0
  34. data/lib/dockerspec/runner/serverspec/base.rb +185 -0
  35. data/lib/dockerspec/runner/serverspec/compose.rb +106 -0
  36. data/lib/dockerspec/runner/serverspec/docker.rb +116 -0
  37. data/lib/dockerspec/runner/serverspec/rspec.rb +20 -0
  38. data/lib/dockerspec/{serverspec/rspec_settings.rb → runner/serverspec/rspec/settings.rb} +1 -1
  39. data/lib/dockerspec/serverspec.rb +12 -2
  40. data/lib/dockerspec/version.rb +1 -1
  41. data/spec/spec_helper.rb +6 -2
  42. metadata +84 -15
  43. data/lib/dockerspec/rspec_assertions.rb +0 -54
  44. data/lib/dockerspec/rspec_resources.rb +0 -203
  45. data/lib/dockerspec/serverspec/rspec_resources.rb +0 -179
  46. data/lib/dockerspec/serverspec/runner.rb +0 -305
  47. data/lib/dockerspec/serverspec/specinfra_backend.rb +0 -128
@@ -0,0 +1,106 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2016 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 'serverspec'
21
+ require 'specinfra/backend/docker_compose_lxc'
22
+ require 'dockerspec/runner/compose'
23
+ require 'dockerspec/runner/serverspec/base'
24
+ require 'dockerspec/runner/serverspec/rspec'
25
+
26
+ module Dockerspec
27
+ module Runner
28
+ module Serverspec
29
+ #
30
+ # Runs Docker Compose using [Serverspec](http://serverspec.org/).
31
+ #
32
+ class Compose < Dockerspec::Runner::Compose
33
+ include Base
34
+ #
35
+ # Constructs a Serverspec runner class to run Docker Compose.
36
+ #
37
+ # @example From a Directory
38
+ # Dockerspec::Runner::Serverspec::Compose.new('directory1')
39
+ # #=> #<Dockerspec::Runner::Serverspec::Compose:0x0124>
40
+ #
41
+ # @example From a YAML File
42
+ # Dockerspec::Runner::Serverspec::Compose.new('my/docker-compose.yml')
43
+ # #=> #<Dockerspec::Runner::Serverspec::Compose:0x0124>
44
+ #
45
+ # @example From a Directory or File Using Hash Format
46
+ # Dockerspec::Runner::Serverspec::Compose.new(file: 'file.yml')
47
+ # #=> #<Dockerspec::Runner::Serverspec::Compose:0x0124>
48
+ #
49
+ # @param opts [String, Hash] The `:file` or a list of options.
50
+ #
51
+ # @option opts [String] :file The compose YAML file or a directory
52
+ # containing the `'docker-compose.yml'` file.
53
+ # @option opts [Boolean] :rm (calculated) Whether to remove the Docker
54
+ # containers afterwards.
55
+ # @option opts [Symbol, String] :family (calculated) The OS family if
56
+ # is the the same for all the containers.
57
+ # It's automatically detected by default, but can be used to
58
+ # **speed up the tests**. Some possible values:
59
+ # `:alpine`, `:arch`, `:coreos`, `:debian`, `:gentoo`, `:nixos`,
60
+ # `:plamo`, `:poky`, `:redhat`, `:suse`.
61
+ # @option opts [Symbol] :backend (calculated) Docker backend to use:
62
+ # `:docker`, `:lxc`.
63
+ #
64
+ # @return [Dockerspec::Runner::Serverspec::Compose] Runner object.
65
+ #
66
+ # @api public
67
+ #
68
+ def initialize(*opts)
69
+ super
70
+ calculate_docker_backend_name('docker_compose')
71
+ end
72
+
73
+ protected
74
+
75
+ #
76
+ # Gets the internal {DockerCompose} object.
77
+ #
78
+ # @return [DockerCompose] The compose object.
79
+ #
80
+ # @api private
81
+ #
82
+ def compose
83
+ @cached_compose ||= begin
84
+ backend = Engine::Specinfra::Backend.new(backend_name)
85
+ backend.backend_instance_attribute(:compose)
86
+ end
87
+ end
88
+
89
+ #
90
+ # Sets the Specinfra configuration and the engines.
91
+ #
92
+ # - Sets up the testing engines.
93
+ # - Configures the compose file to use.
94
+ #
95
+ # @return void
96
+ #
97
+ # @api private
98
+ #
99
+ def before_running
100
+ super
101
+ Specinfra.configuration.docker_compose_file(@options[:file])
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,116 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2015-2016 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 'serverspec'
21
+ require 'specinfra/backend/docker_lxc'
22
+ require 'dockerspec/runner/docker'
23
+ require 'dockerspec/runner/serverspec/base'
24
+ require 'dockerspec/runner/serverspec/rspec'
25
+
26
+ module Dockerspec
27
+ module Runner
28
+ module Serverspec
29
+ #
30
+ # Runs a Docker container using [Serverspec](http://serverspec.org/).
31
+ #
32
+ class Docker < Dockerspec::Runner::Docker
33
+ include Base
34
+
35
+ #
36
+ # Constructs a Docker Serverspec runner class to run Docker images.
37
+ #
38
+ # @example From a Docker Container Image Tag
39
+ # Dockerspec::Runner::Serverspec::Docker.new('myapp')
40
+ # #=> #<Dockerspec::Runner::Serverspec::Docker:0x0124>
41
+ #
42
+ # @example From a Docker Container Image Tag Using Hash Format
43
+ # Dockerspec::Runner::Serverspec::Docker.new(tag: 'myapp')
44
+ # #=> #<Dockerspec::Runner::Serverspec::Docker:0x0124>
45
+ #
46
+ # @example From a Running Docker Container ID
47
+ # Dockerspec::Runner::Serverspec::Docker.new(id: 'c51f86c28340')
48
+ # #=> #<Dockerspec::Runner::Serverspec::Docker:0x0125>
49
+ #
50
+ # @param opts [String, Hash] The `:tag` or a list of options.
51
+ #
52
+ # @option opts [String] :tag The Docker image tag name to run.
53
+ # @option opts [String] :id The Docker container ID to use instead of
54
+ # starting a new container.
55
+ # @option opts [Boolean] :rm (calculated) Whether to remove the Docker
56
+ # container afterwards.
57
+ # @option opts [String] :path The environment `PATH` value of the
58
+ # container.
59
+ # @option opts [Hash, Array] :env Some `ENV` instructions to add to the
60
+ # container.
61
+ # @option opts [Symbol, String] :family (calculated) The OS family.
62
+ # It's automatically detected by default, but can be used to
63
+ # **speed up the tests**. Some possible values:
64
+ # `:alpine`, `:arch`, `:coreos`, `:debian`, `:gentoo`, `:nixos`,
65
+ # `:plamo`, `:poky`, `:redhat`, `:suse`.
66
+ # @option opts [Integer] :wait Time to wait before running the tests.
67
+ # @option opts [Symbol] :backend (calculated) Docker backend to use:
68
+ # `:docker`, `:lxc`.
69
+ #
70
+ # @return [Dockerspec::Runner::Serverspec::Docker] Runner object.
71
+ #
72
+ # @api public
73
+ #
74
+ def initialize(*opts)
75
+ super
76
+ calculate_docker_backend_name('docker')
77
+ end
78
+
79
+ #
80
+ # Gets the internal {Docker::Container} object.
81
+ #
82
+ # @return [Docker::Container] The container.
83
+ #
84
+ # @api public
85
+ #
86
+ def container
87
+ @cached_container ||= begin
88
+ backend = Engine::Specinfra::Backend.new(backend_name)
89
+ backend.backend_instance_attribute(:container)
90
+ end
91
+ end
92
+
93
+ protected
94
+
95
+ #
96
+ # Sets the engines and the Specinfra configuration.
97
+ #
98
+ # Sets the `:docker_image` or `:docker_container`.
99
+ #
100
+ # @return void
101
+ #
102
+ # @api private
103
+ #
104
+ def before_running
105
+ super
106
+ Specinfra.configuration.env(options[:env]) if options.key?(:env)
107
+ if source == :id
108
+ Specinfra.configuration.docker_container(id)
109
+ else
110
+ Specinfra.configuration.docker_image(image_id)
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
+ # Copyright:: Copyright (c) 2016 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 'dockerspec/runner/serverspec/rspec/settings'
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  #
3
3
  # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
- # Copyright:: Copyright (c) 2015 Xabier de Zuazo
4
+ # Copyright:: Copyright (c) 2015-2016 Xabier de Zuazo
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  #
3
3
  # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
- # Copyright:: Copyright (c) 2015 Xabier de Zuazo
4
+ # Copyright:: Copyright (c) 2015-2016 Xabier de Zuazo
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,4 +17,14 @@
17
17
  # limitations under the License.
18
18
  #
19
19
 
20
- require 'dockerspec/serverspec/rspec_resources'
20
+ require 'dockerspec'
21
+ require 'dockerspec/runner/serverspec'
22
+ require 'dockerspec/engine/specinfra'
23
+
24
+ #
25
+ # Use Serverpec to start the containers (runner) and to run the tests (engine).
26
+ #
27
+ Dockerspec::Configuration.docker_runner = Dockerspec::Runner::Serverspec::Docker
28
+ Dockerspec::Configuration.compose_runner =
29
+ Dockerspec::Runner::Serverspec::Compose
30
+ Dockerspec::Configuration.add_engine Dockerspec::Engine::Specinfra
@@ -25,5 +25,5 @@ module Dockerspec
25
25
  #
26
26
  # Dockerspec Ruby Gem version.
27
27
  #
28
- VERSION = '0.2.0'
28
+ VERSION = '0.3.0'.freeze
29
29
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  #
3
3
  # Author:: Xabier de Zuazo (<xabier@zuazo.org>)
4
- # Copyright:: Copyright (c) 2015 Xabier de Zuazo
4
+ # Copyright:: Copyright (c) 2015-2016 Xabier de Zuazo
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,8 +26,8 @@ SimpleCov.start do
26
26
  add_filter '/spec/'
27
27
  end
28
28
 
29
- require 'dockerspec'
30
29
  require 'dockerspec/serverspec'
30
+ require 'dockerspec/infrataster'
31
31
  require 'support/dockerspec_tests'
32
32
 
33
33
  require 'should_not/rspec'
@@ -42,4 +42,8 @@ RSpec.configure do |config|
42
42
 
43
43
  config.color = true
44
44
  config.tty = true
45
+
46
+ config.include DockerspecTests
45
47
  end
48
+
49
+ DockerspecTests.init_engines
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dockerspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xabier de Zuazo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-11 00:00:00.000000000 Z
11
+ date: 2016-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.22'
27
+ - !ruby/object:Gem::Dependency
28
+ name: docker-compose-api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '2.24'
83
+ - !ruby/object:Gem::Dependency
84
+ name: infrataster
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.3.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.3.0
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: specinfra-backend-docker_lxc
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +108,20 @@ dependencies:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
110
  version: 0.2.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: specinfra-backend-docker_compose
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.1.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.1.0
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: erubis
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +240,14 @@ dependencies:
198
240
  requirements:
199
241
  - - "~>"
200
242
  - !ruby/object:Gem::Version
201
- version: 0.35.0
243
+ version: 0.37.0
202
244
  type: :development
203
245
  prerelease: false
204
246
  version_requirements: !ruby/object:Gem::Requirement
205
247
  requirements:
206
248
  - - "~>"
207
249
  - !ruby/object:Gem::Version
208
- version: 0.35.0
250
+ version: 0.37.0
209
251
  - !ruby/object:Gem::Dependency
210
252
  name: yard
211
253
  requirement: !ruby/object:Gem::Requirement
@@ -220,8 +262,22 @@ dependencies:
220
262
  - - "~>"
221
263
  - !ruby/object:Gem::Version
222
264
  version: '0.8'
223
- description: A small gem to run RSpec and Serverspec tests against Dockerfiles or
224
- Docker images easily.
265
+ - !ruby/object:Gem::Dependency
266
+ name: infrataster-plugin-mysql
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: 0.2.0
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: 0.2.0
279
+ description: A small gem to run RSpec, Serverspec, Infrataster and Capybara tests
280
+ against Dockerfiles or Docker images easily.
225
281
  email: xabier@zuazo.org
226
282
  executables: []
227
283
  extensions: []
@@ -246,24 +302,37 @@ files:
246
302
  - lib/dockerspec/builder/logger/silent.rb
247
303
  - lib/dockerspec/builder/matchers.rb
248
304
  - lib/dockerspec/builder/matchers/helpers.rb
305
+ - lib/dockerspec/configuration.rb
249
306
  - lib/dockerspec/docker_exception_parser.rb
250
307
  - lib/dockerspec/docker_gem.rb
308
+ - lib/dockerspec/engine/base.rb
309
+ - lib/dockerspec/engine/infrataster.rb
310
+ - lib/dockerspec/engine/specinfra.rb
311
+ - lib/dockerspec/engine/specinfra/backend.rb
312
+ - lib/dockerspec/engine/specinfra/backend_hack.rb
313
+ - lib/dockerspec/engine_list.rb
251
314
  - lib/dockerspec/exceptions.rb
252
315
  - lib/dockerspec/helper/ci.rb
253
316
  - lib/dockerspec/helper/docker.rb
254
317
  - lib/dockerspec/helper/multiple_sources_description.rb
255
318
  - lib/dockerspec/helper/rspec_example_helpers.rb
256
- - lib/dockerspec/rspec_assertions.rb
257
- - lib/dockerspec/rspec_configuration.rb
258
- - lib/dockerspec/rspec_resources.rb
259
- - lib/dockerspec/rspec_settings.rb
319
+ - lib/dockerspec/infrataster.rb
320
+ - lib/dockerspec/rspec.rb
321
+ - lib/dockerspec/rspec/configuration.rb
322
+ - lib/dockerspec/rspec/resources.rb
323
+ - lib/dockerspec/rspec/resources/its_container.rb
324
+ - lib/dockerspec/rspec/settings.rb
260
325
  - lib/dockerspec/runner.rb
326
+ - lib/dockerspec/runner/base.rb
327
+ - lib/dockerspec/runner/compose.rb
328
+ - lib/dockerspec/runner/docker.rb
329
+ - lib/dockerspec/runner/serverspec.rb
330
+ - lib/dockerspec/runner/serverspec/base.rb
331
+ - lib/dockerspec/runner/serverspec/compose.rb
332
+ - lib/dockerspec/runner/serverspec/docker.rb
333
+ - lib/dockerspec/runner/serverspec/rspec.rb
334
+ - lib/dockerspec/runner/serverspec/rspec/settings.rb
261
335
  - lib/dockerspec/serverspec.rb
262
- - lib/dockerspec/serverspec/rspec_resources.rb
263
- - lib/dockerspec/serverspec/rspec_settings.rb
264
- - lib/dockerspec/serverspec/runner.rb
265
- - lib/dockerspec/serverspec/specinfra_backend.rb
266
- - lib/dockerspec/serverspec/specinfra_hack.rb
267
336
  - lib/dockerspec/version.rb
268
337
  - spec/spec_helper.rb
269
338
  homepage: https://github.com/zuazo/dockerspec