dockerspec 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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