docker-spec 0.5.0 → 0.6.0

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: 94c481576b9b1f8ea278350227a880b958fb154f
4
- data.tar.gz: 413ae381b4f411436f52e29d80a498f7068a3f0f
3
+ metadata.gz: 5b8fbb164e0c9e54f85c058ec942ef0bb1c3933a
4
+ data.tar.gz: 5aa7c913127434f13c0e88a1cc86ca038ced9ee0
5
5
  SHA512:
6
- metadata.gz: 1039784e522f87466a4aa6b203dc5f26bf0d78830656dd0fe98b091cc5cbbdb5c2ae01bae70b2be98307b76a4e877daba84e6090b1efd2c593bd4a2fc4c88e8f
7
- data.tar.gz: ec7f94900ce0769541e500097a03f265f424c45de228748e3de926b9b7f8b692f3dff94800595500feba32d02d584a3095537b60b33ff0baa524a5cc8f3845f0
6
+ metadata.gz: fd1d7db5d4a15c0a72fc63a2ef340e70dbb57ccd29daaa8a3e5d56dc4d428180f777beba5f2302ea9a1f12bd02cd193b402c32de82375bb90fa0a2ec05aa77c2
7
+ data.tar.gz: 2d6788a53853f3a1149a4917b6cc3c0eacaac1ba70ea600181b41dd3c74424c906a9260f0edb6270c095c501a3b33b52e4774b8a8019372035ab1f489e84a37a
data/lib/docker/spec.rb CHANGED
@@ -10,27 +10,36 @@ require 'colorize'
10
10
  require 'yaml'
11
11
  require 'logger'
12
12
  require 'moneta'
13
- require "base64"
13
+ require 'base64'
14
+ require 'singleton'
14
15
  require 'pp'
15
16
 
16
17
  # Documentation
17
- module DockerSpec
18
+ class DockerSpec
19
+
20
+ include Singleton
21
+
22
+ attr_accessor :config, :test_failed
23
+
18
24
  CONTAINER_RUN_WAIT_TIMEOUT = 60
19
25
  CONFIG_FILE = 'docker_spec.yml'
20
26
  ROOT_DIR = 'root'
21
27
  DOCKER_AUTH_FILE = '~/.docker/config.json'
22
28
  STDOUT.sync = true
23
29
 
24
- def self.run
30
+ def run
31
+ @config = nil
32
+ @test_failed = false
33
+
25
34
  load_config
26
35
  build_root if @config[:build_root]
27
- build_docker_image
28
- rspec_run
36
+ build_docker_image if @config[:build_image]
37
+ rspec_configure
29
38
  end
30
39
 
31
- def self.push
32
- @config[:push_container] = DockerSpec.get_config(:push_container, 'DOCKER_SPEC_PUSH_CONTAINER',
33
- "\nPush new tag? ")
40
+ def push
41
+ @config[:push_container] = get_config(:push_container, 'DOCKER_SPEC_PUSH_CONTAINER',
42
+ 'Push new tag? ')
34
43
  if @config[:push_container]
35
44
 
36
45
  @config[:tag_db] ||
@@ -81,7 +90,7 @@ module DockerSpec
81
90
  end
82
91
  end
83
92
 
84
- def self.load_config
93
+ def load_config
85
94
  File.exist?(CONFIG_FILE) || fail('Could not load docker_spec.yml')
86
95
  @config = YAML.load(File.read(CONFIG_FILE)) ||
87
96
  fail('docker_spec.yml is not a valid yml file')
@@ -90,21 +99,24 @@ module DockerSpec
90
99
  @config[:account] || fail('account is not defined in docker_spec.yml')
91
100
  @config[:image_name] = format '%s/%s', @config[:account], @config[:name]
92
101
  @config[:container_name] = format 'docker_spec-%s', @config[:name]
93
- @config[:build_root] = DockerSpec.get_config(:build_root, 'DOCKER_SPEC_BUILD_ROOT',
94
- 'Rebuild root filesystem? ')
95
- @config[:clear_cache] = DockerSpec.get_config(:clear_cache, 'DOCKER_SPEC_CLEAR_CACHE',
96
- 'Clear docker cache? ')
102
+ @config[:build_image] = get_config(:build_image, 'DOCKER_SPEC_BUILD_',
103
+ 'Build docker image? ')
104
+ @config[:build_root] = get_config(:build_root, 'DOCKER_SPEC_BUILD_ROOT',
105
+ 'Rebuild root filesystem? ') if @config[:build_image]
106
+ @config[:clear_cache] = get_config(:clear_cache, 'DOCKER_SPEC_CLEAR_CACHE',
107
+ 'Clear docker cache? ') if @config[:build_image]
97
108
  @config
98
109
  end
99
110
 
100
- def self.build_root
111
+ def build_root
101
112
  system 'bash -ec \'sudo chown root:root -R root &&' \
102
113
  '(cd root && sudo tar zcf ../root.tar.gz .) && ' \
103
114
  'sudo chown -R `id -u`:`id -g` root.tar.gz root\'' \
104
115
  if Dir.exist?(ROOT_DIR)
105
116
  end
106
117
 
107
- def self.build_docker_image
118
+ def build_docker_image
119
+ puts
108
120
  # Rebuild the cache filesystem
109
121
  build_args = ''
110
122
  build_args += ' --no-cache' if @config[:clear_cache]
@@ -118,26 +130,30 @@ module DockerSpec
118
130
  fail("#{build_cmd} failed") if status.exitstatus != 0
119
131
  end
120
132
 
121
- def self.rspec_run
133
+ def rspec_configure
122
134
  set :backend, :docker
123
135
 
124
136
  RSpec.configure do |rc|
125
137
  rc.fail_fast = true
126
138
 
139
+ rc.after(:each) do |test|
140
+ DockerSpec.instance.test_failed = true if test.exception
141
+ end
142
+
127
143
  rc.before(:suite) do
128
- DockerSpec.delete_container
129
- DockerSpec.start_container
144
+ DockerSpec.instance.delete_container
145
+ DockerSpec.instance.start_container
130
146
  end
131
147
 
132
148
  rc.after(:suite) do
133
- DockerSpec.clean_up
134
- DockerSpec.push
149
+ DockerSpec.instance.clean_up
150
+ DockerSpec.instance.push unless DockerSpec.instance.test_failed
135
151
  end
136
152
  end
137
- docker_tests
153
+ Docker::Spec::docker_tests
138
154
  end
139
155
 
140
- def self.start_container
156
+ def start_container
141
157
  # Run the container with options
142
158
  opts = {}
143
159
  opts['HostConfig'] = { 'NetworkMode' => @config[:network_mode] } \
@@ -160,7 +176,7 @@ module DockerSpec
160
176
  set :docker_container, container.id
161
177
  end
162
178
 
163
- def self.delete_container
179
+ def delete_container
164
180
  filters = { name: [@config[:container_name]] }.to_json
165
181
  Docker::Container.all(all: true, filters: filters).each do |c|
166
182
  c.kill
@@ -168,10 +184,10 @@ module DockerSpec
168
184
  end
169
185
  end
170
186
 
171
- def self.clean_up
187
+ def clean_up
172
188
  # Keep container running
173
- @config[:keep_running] = DockerSpec.get_config(:keep_running, 'DOCKER_SPEC_KEEP_RUNNING',
174
- 'Keep container running? ')
189
+ @config[:keep_running] = get_config(:keep_running, 'DOCKER_SPEC_KEEP_RUNNING',
190
+ "\nKeep container running? ")
175
191
  if @config[:keep_running]
176
192
  puts "\nINFO: To connect to a running container: \n\n" \
177
193
  "docker exec -ti #{@config[:container_name]} bash"
@@ -180,14 +196,14 @@ module DockerSpec
180
196
  end
181
197
  end
182
198
 
183
- def self.get_config(key, envvar, question)
199
+ def get_config(key, envvar, question)
184
200
  value = to_boolean(ENV[envvar])
185
201
  value = @config[key] if value.nil?
186
202
  value = agree(question, 'n') if value.nil?
187
203
  value
188
204
  end
189
205
 
190
- def self.to_boolean(str)
206
+ def to_boolean(str)
191
207
  str == 'true' unless str.nil?
192
208
  end
193
209
  end
@@ -1,34 +1,36 @@
1
- module DockerSpec
2
- def self.docker_tests
3
- describe 'Running a docker container' do
4
- before(:all) do
5
- @config = DockerSpec.load_config
6
- @image = Docker::Image.all.detect do |i|
7
- i.info['RepoTags'].include?(@config[:image_name] + ':latest')
1
+ module Docker
2
+ module Spec
3
+ def self.docker_tests
4
+ describe 'Running a docker container' do
5
+ before(:all) do
6
+ @config = DockerSpec.instance.config
7
+ @image = Docker::Image.all.detect do |i|
8
+ i.info['RepoTags'].include?(@config[:image_name] + ':latest')
9
+ end
10
+ @container = Docker::Container.all.select do |c|
11
+ c.info["Names"] == [ "/" + @config[:container_name] ]
12
+ end.first
8
13
  end
9
- @container = Docker::Container.all.select do |c|
10
- c.info["Names"] == [ "/" + @config[:container_name] ]
11
- end.first
12
- end
13
14
 
14
- it 'should be available' do
15
- expect(@image).to_not be_nil
16
- end
15
+ it 'should be available' do
16
+ expect(@image).to_not be_nil
17
+ end
17
18
 
18
- it 'should have state running' do
19
- expect(@container.json['State']['Running']).to be true
20
- end
19
+ it 'should have state running' do
20
+ expect(@container.json['State']['Running']).to be true
21
+ end
21
22
 
22
- it 'Should stay running' do
23
- expect(@container.json['State']['Running']).to be true
24
- end
23
+ it 'Should stay running' do
24
+ expect(@container.json['State']['Running']).to be true
25
+ end
25
26
 
26
- it 'Should not have exit processes' do
27
- expect(@container.logs(stdout: true)).to_not match(/exit/)
28
- end
27
+ it 'Should not have exit processes' do
28
+ expect(@container.logs(stdout: true)).to_not match(/exit/)
29
+ end
29
30
 
30
- it 'Services supervisor should be running' do
31
- expect(process('supervisord')).to be_running
31
+ it 'Services supervisor should be running' do
32
+ expect(process('supervisord')).to be_running
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -1,5 +1,5 @@
1
1
  module Docker
2
2
  module Spec
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Breinlinger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-04 00:00:00.000000000 Z
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler