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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7694cecd69e554a6954f6b9db00f3fe2b768f15c
4
- data.tar.gz: 1a2a4415286128639366c18f8ab4f6d303d416c0
3
+ metadata.gz: 00c000093e65be525764d4adb1a19c986747a1f2
4
+ data.tar.gz: 31ffe0b3521f66c09dffb9994e0d5de0a7895ef9
5
5
  SHA512:
6
- metadata.gz: 524a40d59079d2532db4817df108b08e78d964a1a4ec24f046a2f20c398d9121952fa1f9fd43211a02dfa2211e9bd45fb49b10c6c3dad3f693c5432e78cabe77
7
- data.tar.gz: 1e60d573d88980f9c018dbed60012ee51e4fdfba50a181ec3a7389d1aa655038f67556ea95421089b4f1d2a1e1b933d75720c20d12f51654edca4afa2c42d982
6
+ metadata.gz: cf7da409ef3be6b88a6720bab01736e9badb61fc12b6ed494fee7efc47df18ca51aa09ad11a1703230aee29912e0dd62788d2653463048f8bfcea457a3fb4297
7
+ data.tar.gz: 769fd611bd5c3e1bb8b97e8d37f65adb9572a2fe810e26af03e85d41ec7dac8af7fc543ba8575c7afef6fccc2cace7455404f8a0e20d9c0caa14deb5fca248b5
@@ -2,6 +2,40 @@
2
2
 
3
3
  This file is used to list changes made in each version of `dockerspec` Ruby Gem.
4
4
 
5
+ ## 0.3.0 (2016-02-28)
6
+
7
+ ### Breaking Changes on 0.3.0
8
+
9
+ * Enable `options[:rm]` by default.
10
+
11
+ ### New Features on 0.3.0
12
+
13
+ * Add Docker Compose support.
14
+ * Add Infrataster and Capybara support.
15
+ * Add `:wait` option to `docker_run` and `docker_compose`.
16
+ * Add `described_image` helper for `docker_run`.
17
+ * Support integer values with `have_expose` matcher.
18
+ * Make `require 'dockerspec'` optional.
19
+
20
+ ### Fixes on 0.3.0
21
+
22
+ * Fix `:env` in `docker_run` with Serverspec.
23
+ * Fix *Must have id* error when building images from IDs with tags.
24
+
25
+ ### Improvements on 0.3.0
26
+
27
+ * Update RuboCop to `0.37`, fix new offenses.
28
+ * `Runner` classes split into `Engine::Base` and `Runner::Base`.
29
+ * Add support for multiple testing engines.
30
+ * Add a `Configuration` class to setup the internal modularization.
31
+ * Rename many classes.
32
+
33
+ ### Documentation Changes on 0.3.0
34
+
35
+ * README:
36
+ * Move the documentation below examples.
37
+ * Add many examples.
38
+
5
39
  ## 0.2.0 (2015-12-11)
6
40
 
7
41
  ### New Features on 0.2.0
data/LICENSE CHANGED
@@ -175,7 +175,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Copyright 2015 Xabier de Zuazo
178
+ Copyright 2015-2016 Xabier de Zuazo
179
179
 
180
180
  Licensed under the Apache License, Version 2.0 (the "License");
181
181
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -6,14 +6,14 @@
6
6
  [![Gem Version](https://badge.fury.io/rb/dockerspec.svg)](https://rubygems.org/gems/dockerspec)
7
7
  [![Dependency Status](http://img.shields.io/gemnasium/zuazo/dockerspec.svg?style=flat)](https://gemnasium.com/zuazo/dockerspec)
8
8
  [![Code Climate](http://img.shields.io/codeclimate/github/zuazo/dockerspec.svg?style=flat)](https://codeclimate.com/github/zuazo/dockerspec)
9
- [![Travis CI Build Status](http://img.shields.io/travis/zuazo/dockerspec/0.2.0.svg?style=flat)](https://travis-ci.org/zuazo/dockerspec)
9
+ [![Travis CI Build Status](http://img.shields.io/travis/zuazo/dockerspec/0.3.0.svg?style=flat)](https://travis-ci.org/zuazo/dockerspec)
10
10
  [![Circle CI Build Status](https://circleci.com/gh/zuazo/dockerspec/tree/master.svg?style=shield)](https://circleci.com/gh/zuazo/dockerspec/tree/master)
11
- [![Coverage Status](http://img.shields.io/coveralls/zuazo/dockerspec/0.2.0.svg?style=flat)](https://coveralls.io/r/zuazo/dockerspec?branch=0.2.0)
11
+ [![Coverage Status](http://img.shields.io/coveralls/zuazo/dockerspec/0.3.0.svg?style=flat)](https://coveralls.io/r/zuazo/dockerspec?branch=0.3.0)
12
12
  [![Inline docs](http://inch-ci.org/github/zuazo/dockerspec.svg?branch=master&style=flat)](http://inch-ci.org/github/zuazo/dockerspec)
13
13
 
14
14
  ## Description
15
15
 
16
- A small Ruby Gem to run RSpec and [Serverspec](http://serverspec.org/) tests against Dockerfiles or Docker images easily.
16
+ A small Ruby Gem to run RSpec, [Serverspec](http://serverspec.org/), [Infrataster](https://github.com/ryotarai/infrataster) and [Capybara](http://jnicklas.github.io/capybara/) tests against Dockerfiles or Docker images easily.
17
17
 
18
18
  This gem is designed to work out of the box on [Travis CI](https://travis-ci.org/), [CircleCI](https://circleci.com/) and other similar CI environments.
19
19
 
@@ -33,7 +33,7 @@ $ gem install dockerspec
33
33
  Or you can add this line to the *Gemfile* of your application:
34
34
 
35
35
  ```ruby
36
- gem 'dockerspec', '~> 0.2.0'
36
+ gem 'dockerspec', '~> 0.3.0'
37
37
  ```
38
38
 
39
39
  And then execute:
@@ -44,30 +44,22 @@ $ bundle
44
44
 
45
45
  **Warning:** As the gem is in its early development stages, [the API is very likely to break between minor versions](http://semver.org/).
46
46
 
47
- ## Documentation
48
-
49
- - [`docker_build`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/RSpecResources#docker_build-instance_method)
50
- - [*Docker Build* helpers](http://www.rubydoc.info/gems/dockerspec/Dockerspec/Builder/ConfigHelpers)
51
- - [`docker_run`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/Serverspec/RSpecResources#docker_run-instance_method)
52
- - [*Docker Run* Serverspec resource types](http://serverspec.org/resource_types.html)
53
-
54
47
  ## Usage Examples
55
48
 
56
49
  ### Run Tests Against a Dockerfile in the Current Directory
57
50
 
58
51
  ```ruby
59
- require 'dockerspec'
60
52
  require 'dockerspec/serverspec'
61
53
 
62
54
  describe 'My Dockerfile' do
63
- describe docker_build('.', tag: 'myapp') do
55
+ describe docker_build('.') do
64
56
 
65
57
  it { should have_maintainer /John Doe/ }
66
58
  it { should have_cmd ['/bin/dash'] }
67
59
  it { should have_expose '80' }
68
60
  it { should have_user 'nobody' }
69
61
 
70
- describe docker_run('myapp') do
62
+ describe docker_run(described_image) do
71
63
  describe file('/etc/httpd.conf') do
72
64
  it { should be_file }
73
65
  it { should contain 'ServerName www.example.jp' }
@@ -78,15 +70,195 @@ describe 'My Dockerfile' do
78
70
  it { should be_running }
79
71
  end
80
72
  end
73
+
81
74
  end
82
75
  end
83
76
  ```
84
77
 
85
78
  See the documentation above for more examples.
86
79
 
80
+ ### Run Tests Against Docker Compose
81
+
82
+ ```ruby
83
+ require 'dockerspec/serverspec'
84
+
85
+ describe docker_compose('.', wait: 30) do
86
+
87
+ its_container(:myapp) do
88
+ describe process('apache2') do
89
+ it { should be_running }
90
+ its(:args) { should match(/-DFOREGROUND/) }
91
+ end
92
+ # [...]
93
+ end
94
+
95
+ its_container(:db) do
96
+ describe process('mysqld') do
97
+ it { should be_running }
98
+ end
99
+ # [...]
100
+ end
101
+
102
+ end
103
+ ```
104
+
105
+ **Important Warning:** The `docker_compose` resource uses the [`docker-compose-api`](https://rubygems.org/gems/docker-compose-api) Ruby gem to emulate Docker Compose. So, some *docker-compose.yml* configuration options may not be supported yet or may not work exactly the same. Let us know if you find any bug or you need a missing feature. And thanks to [Mauricio Klein](https://github.com/mauricioklein) for all his work by the way!
106
+
107
+ ### Run HTTP Tests Using Infrataster
108
+
109
+ ```ruby
110
+ # require 'dockerspec/serverspec' # Only if you want to run both types of tests
111
+ require 'dockerspec/infrataster'
112
+
113
+ describe docker_run('nginx') do
114
+ describe server(described_container) do # Infrataster
115
+
116
+ describe http('/') do
117
+ it 'responds content including "Welcome to nginx!"' do
118
+ expect(response.body).to include 'Welcome to nginx!'
119
+ end
120
+
121
+ it 'responds as "nginx" server' do
122
+ expect(response.headers['server']).to match(/nginx/i)
123
+ end
124
+ end
125
+
126
+ end
127
+ end
128
+ ```
129
+ See the [Infrataster Resources documentation](http://www.rubydoc.info/gems/infrataster#Resources) for more information.
130
+
131
+ ### Run HTTP Tests Using Capybara
132
+
133
+ In the following example we set the *admin* password and log in in a hypothetical web application:
134
+
135
+ ```ruby
136
+ require 'dockerspec/infrataster'
137
+
138
+ describe docker_build('.', tag: 'mywebapp') do
139
+ describe docker_run('mywebapp') do
140
+
141
+ describe server(described_container) do
142
+ describe capybara('/') do
143
+ let(:password) { '4dm1nP4ssw0rd' }
144
+
145
+ describe 'on /setup' do
146
+ before { visit '/setup' }
147
+
148
+ it 'contains "Configure the password"' do
149
+ expect(page).to have_content 'Configure the password'
150
+ end
151
+
152
+ it 'sets the admin password' do
153
+ fill_in 'Password', with: password
154
+ fill_in 'Confirm Password', with: password
155
+ click_button 'Set password'
156
+ end
157
+ end
158
+
159
+ describe 'on /login' do
160
+ before { visit '/login' }
161
+
162
+ it 'logs in as admin' do
163
+ expect(page).to have_content 'sign in'
164
+ fill_in 'User name', with: 'admin'
165
+ fill_in 'Password', with: password
166
+ click_button 'Sig in'
167
+ end
168
+ end
169
+
170
+ describe 'on /' do
171
+ before { visit '/' }
172
+
173
+ it 'is logged id' do
174
+ expect(page).to have_content 'Welcome admin!'
175
+ end
176
+ end
177
+
178
+ end
179
+ end
180
+
181
+ end
182
+ end
183
+ ```
184
+
185
+ See the [Capybara DSL documentation](http://www.rubydoc.info/gems/capybara#The_DSL) for more information.
186
+
187
+ ### Run Database Tests Using `infrataster-plugin-mysql` Gem with Docker Compose
188
+
189
+ You need to include the `infrataster-plugin-mysql` gem in your *Gemfile*:
190
+
191
+ ```ruby
192
+ # Gemfile
193
+
194
+ # gem [...]
195
+ gem 'infrataster-plugin-mysql', '~> 0.2.0'
196
+ ```
197
+
198
+ A *docker-compose.yml* file example with a database:
199
+
200
+ ```yaml
201
+ myapp:
202
+ image: myapp
203
+ links:
204
+ - db:mysql
205
+ ports:
206
+ - 8080:80
207
+
208
+ db:
209
+ image: mariadb
210
+ environment:
211
+ - MYSQL_ROOT_PASSWORD=example
212
+ ```
213
+
214
+ The file with the tests:
215
+
216
+ ```ruby
217
+ require 'dockerspec/infrataster'
218
+ require 'infrataster-plugin-mysql'
219
+
220
+ describe docker_compose('docker-compose.yml', wait: 60) do
221
+
222
+ its_container(:db, mysql: { user: 'root', password: 'example' }) do
223
+ describe server(described_container) do # Infrataster
224
+
225
+ describe mysql_query('SHOW STATUS') do
226
+ it 'returns positive uptime' do
227
+ row = results.find { |r| r['Variable_name'] == 'Uptime' }
228
+ expect(row['Value'].to_i).to be > 0
229
+ end
230
+ end
231
+
232
+ describe mysql_query('SHOW DATABASES') do
233
+ it 'includes `myapp` database' do
234
+ databases = results.map { |r| r['Database'] }
235
+ expect(databases).to include('myapp')
236
+ end
237
+ end
238
+
239
+ end
240
+ end
241
+ end
242
+ ```
243
+
244
+ ## Documentation
245
+
246
+ - [`docker_build`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/RSpec/Resources#docker_build-instance_method)
247
+ - [*Docker Build* helpers](http://www.rubydoc.info/gems/dockerspec/Dockerspec/Builder/ConfigHelpers)
248
+ - [`docker_run`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/RSpec/Resources#docker_run-instance_method)
249
+ - [*Docker Run* Serverspec resource types](http://serverspec.org/resource_types.html)
250
+ - [Infrataster Resources](http://www.rubydoc.info/gems/infrataster#Resources)
251
+ - [Capybara DSL](http://www.rubydoc.info/gems/capybara#The_DSL)
252
+ - [`docker_compose`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/RSpec/Resources#docker_compose-instance_method)
253
+ - [`its_container`](http://www.rubydoc.info/gems/dockerspec/Dockerspec/RSpec/Resources#its_container-instance_method)
254
+
87
255
  ### Real-world Examples
88
256
 
89
257
  * [`alpine-tor`](https://github.com/zuazo/alpine-tor-docker) image ([*spec/*](https://github.com/zuazo/alpine-tor-docker/tree/master/spec), [*Gemfile*](https://github.com/zuazo/alpine-tor-docker/tree/master/Gemfile), [*.travis.yml*](https://github.com/zuazo/alpine-tor-docker/tree/master/.travis.yml)).
258
+ * [`chef-local`](https://github.com/zuazo/chef-local-docker) image ([*spec/*](https://github.com/zuazo/chef-local-docker/tree/master/spec), [*Gemfile*](https://github.com/zuazo/chef-local-docker/tree/master/Gemfile), [*.travis.yml*](https://github.com/zuazo/chef-local-docker/tree/master/.travis.yml)): Runs the same tests against multiple tags.
259
+ * [`keywhiz`](https://github.com/zuazo/keywhiz-docker) image ([*spec/*](https://github.com/zuazo/keywhiz-docker/tree/master/spec), [*Gemfile*](https://github.com/zuazo/keywhiz-docker/tree/master/Gemfile), [*.travis.yml*](https://github.com/zuazo/keywhiz-docker/tree/master/.travis.yml)).
260
+ * [`irssi-tor`](https://github.com/zuazo/irssi-tor-docker) image ([*spec/*](https://github.com/zuazo/irssi-tor-docker/tree/master/spec), [*Gemfile*](https://github.com/zuazo/irssi-tor-docker/tree/master/Gemfile), [*.travis.yml*](https://github.com/zuazo/irssi-tor-docker/tree/master/.travis.yml)).
261
+ * [`dradis`](https://github.com/zuazo/dradis-docker) image ([*spec/*](https://github.com/zuazo/dradis-docker/tree/master/spec), [*Gemfile*](https://github.com/zuazo/dradis-docker/tree/master/Gemfile), [*.travis.yml*](https://github.com/zuazo/dradis-docker/tree/master/.travis.yml)): Runs some Capybara HTTP tests.
90
262
 
91
263
  ### Prepare Your Ruby Environment
92
264
 
@@ -99,7 +271,7 @@ If you are new to Ruby, you can follow these steps:
99
271
 
100
272
  source 'https://rubygems.org'
101
273
 
102
- gem 'dockerspec', '~> 0.2.0'
274
+ gem 'dockerspec', '~> 0.3.0'
103
275
  ```
104
276
 
105
277
  #### 2. Create the *spec/* directory:
@@ -113,13 +285,12 @@ $ mkdir spec
113
285
  ```ruby
114
286
  # spec/myapp_spec.rb
115
287
 
116
- require 'dockerspec'
117
288
  require 'dockerspec/serverspec'
118
289
 
119
290
  describe 'My Dockerfile' do
120
- describe docker_build('.', tag: 'myapp') do
291
+ describe docker_build('.') do
121
292
  # [...]
122
- describe docker_run('myapp') do
293
+ describe docker_run(described_image) do
123
294
  # [...]
124
295
  end
125
296
  end
@@ -145,11 +316,6 @@ $ bundle exec rspec
145
316
  ```yaml
146
317
  language: ruby
147
318
 
148
- rvm:
149
- - 2.0.0
150
- - 2.1
151
- - 2.2
152
-
153
319
  sudo: required
154
320
 
155
321
  services: docker
@@ -192,7 +358,7 @@ See [TODO.md](https://github.com/zuazo/dockerspec/blob/master/TODO.md).
192
358
  | | |
193
359
  |:---------------------|:-----------------------------------------|
194
360
  | **Author:** | [Xabier de Zuazo](https://github.com/zuazo) (<xabier@zuazo.org>)
195
- | **Copyright:** | Copyright (c) 2015 Xabier de Zuazo
361
+ | **Copyright:** | Copyright (c) 2015-2016 Xabier de Zuazo
196
362
  | **License:** | Apache License, Version 2.0
197
363
 
198
364
  Licensed under the Apache License, Version 2.0 (the "License");
data/Rakefile CHANGED
@@ -2,7 +2,22 @@
2
2
  # -*- mode: ruby -*-
3
3
  # vi: set ft=ruby :
4
4
 
5
+ #
6
+ # Available Rake tasks:
7
+ #
8
+ # $ rake -T
9
+ # rake clean # Clean some generated files
10
+ # rake integration # Run the integration tests
11
+ # rake integration:infrataster # Infrataster engine integration tests
12
+ # rake integration:serverspec # Serverspec engine integration tests
13
+ # rake rubocop # Run RuboCop style checks
14
+ # rake style # Run all style checks
15
+ # rake test # Run all the tests
16
+ # rake unit # Run the unit tests
17
+ # rake yard # Generate Ruby documentation
18
+ #
5
19
  # More info at https://github.com/ruby/rake/blob/master/doc/rakefile.rdoc
20
+ #
6
21
 
7
22
  require 'bundler'
8
23
  Bundler::GemHelper.install_tasks
@@ -43,15 +58,54 @@ task style: %w(rubocop)
43
58
 
44
59
  require 'rspec/core/rake_task'
45
60
 
46
- {
47
- test: '{unit,integration}',
48
- unit: 'unit',
49
- integration: 'integration'
50
- }.each do |test, dir|
51
- RSpec::Core::RakeTask.new(test) do |t|
61
+ #
62
+ # Gest the tests directory name to use.
63
+ #
64
+ # @param name [String] The task name.
65
+ #
66
+ # @return [String] Subdirectory name inside *spec/*.
67
+ #
68
+ def rake_dir_from_name(name)
69
+ if %w(serverspec infrataster).include?(name.to_s)
70
+ 'integration'
71
+ else
72
+ name.to_s == 'test' ? '{unit,integration}' : name
73
+ end
74
+ end
75
+
76
+ #
77
+ # Generates RakeTask to run the tests.
78
+ #
79
+ # @param name [String] The task name.
80
+ #
81
+ # @param env [Hash] The environment variables to set.
82
+ #
83
+ # @return [RSpec::Core::RakeTask] The Generated RakeTask.
84
+ #
85
+ def rake_task(name, env = {})
86
+ dir = rake_dir_from_name(name)
87
+ RSpec::Core::RakeTask.new(name) do |t|
88
+ env.each { |k, v| ENV[k.to_s.upcase] = v.to_s }
52
89
  t.pattern = "spec/#{dir}/**{,/*/**}/*_spec.rb"
53
90
  t.verbose = true
54
91
  end
55
92
  end
56
93
 
94
+ desc 'Run the unit tests'
95
+ rake_task(:unit)
96
+
97
+ namespace :integration do
98
+ desc 'Serverspec engine integration tests'
99
+ rake_task(:serverspec, serverspec: true)
100
+
101
+ desc 'Infrataster engine integration tests'
102
+ rake_task(:infrataster, infrataster: true)
103
+ end
104
+
105
+ desc 'Run all the integration tests'
106
+ rake_task(:integration)
107
+
108
+ desc 'Run all the tests'
109
+ rake_task(:test)
110
+
57
111
  task default: %w(style test)
data/TODO.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # TODO for Dockerspec
2
2
 
3
3
  * [ ] Integrate with [Inspec](https://www.chef.io/inspec/).
4
- * [ ] Integrate with [Infrataster](https://github.com/ryotarai/infrataster).
5
- * [ ] Support Docker Compose.
4
+ * [ ] Test resources for built images supported inside `docker_compose`.
5
+ * [ ] Add `docker_context`, `docker_describe` to avoid starting all containers at the same time.
6
6
  * [ ] Add a Runner logger.
7
+ * [ ] Create `stub_*` methods for unit tests.