docker-api 1.5.4 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +19 -10
- data/docker-api.gemspec +1 -1
- data/lib/docker.rb +14 -7
- data/lib/docker/connection.rb +6 -1
- data/lib/docker/image.rb +6 -5
- data/lib/docker/version.rb +1 -1
- data/spec/docker/connection_spec.rb +14 -6
- data/spec/docker/container_spec.rb +27 -8
- data/spec/docker/image_spec.rb +23 -5
- data/spec/docker_spec.rb +36 -28
- data/spec/vcr/Docker/_info/returns_the_info_as_a_Hash.yml +16 -13
- data/spec/vcr/Docker/_validate_version/when_nothing_is_raised/validate_version_/.yml +16 -13
- data/spec/vcr/Docker/_version/returns_the_version_as_a_Hash.yml +16 -13
- data/spec/vcr/Docker_Container/_all/when_the_HTTP_response_is_a_200/materializes_each_Container_into_a_Docker_Container.yml +120 -211
- data/spec/vcr/Docker_Container/_attach/yields_each_chunk.yml +46 -38
- data/spec/vcr/Docker_Container/_changes/returns_the_changes_as_an_array.yml +65 -53
- data/spec/vcr/Docker_Container/_commit/creates_a_new_Image_from_the_Container_s_changes.yml +50 -41
- data/spec/vcr/Docker_Container/_copy/when_the_file_does_not_exist/raises_an_error.yml +62 -48
- data/spec/vcr/Docker_Container/_copy/when_the_input_is_a_directory/yields_each_chunk_of_the_tarred_directory.yml +194 -119
- data/spec/vcr/Docker_Container/_copy/when_the_input_is_a_file/yields_each_chunk_of_the_tarred_file.yml +127 -52
- data/spec/vcr/Docker_Container/_create/when_the_Container_does_not_yet_exist/when_the_HTTP_request_returns_a_200/sets_the_id.yml +18 -15
- data/spec/vcr/Docker_Container/_delete/deletes_the_container.yml +62 -126
- data/spec/vcr/Docker_Container/_export/yields_each_chunk.yml +49 -66
- data/spec/vcr/Docker_Container/_json/returns_the_description_as_a_Hash.yml +33 -27
- data/spec/vcr/Docker_Container/_kill/kills_the_container.yml +91 -129
- data/spec/vcr/Docker_Container/_restart/restarts_the_container.yml +116 -95
- data/spec/vcr/Docker_Container/_run/when_the_Container_s_command_does_not_return_status_code_of_0/raises_an_error.yml +50 -41
- data/spec/vcr/Docker_Container/_run/when_the_Container_s_command_returns_a_status_code_of_0/creates_a_new_container_to_run_the_specified_command.yml +135 -109
- data/spec/vcr/Docker_Container/_start/starts_the_container.yml +28 -57
- data/spec/vcr/Docker_Container/_stop/stops_the_container.yml +107 -143
- data/spec/vcr/Docker_Container/_top/returns_the_top_commands_as_an_Array.yml +78 -39
- data/spec/vcr/Docker_Container/_wait/waits_for_the_command_to_finish.yml +50 -41
- data/spec/vcr/Docker_Container/_wait/when_an_argument_is_given/and_a_command_runs_for_too_long/raises_a_ServerError.yml +35 -29
- data/spec/vcr/Docker_Container/_wait/when_an_argument_is_given/sets_the_read_timeout_to_that_amount_of_time.yml +50 -41
- data/spec/vcr/Docker_Image/_all/materializes_each_Image_into_a_Docker_Image.yml +34 -26
- data/spec/vcr/Docker_Image/_build/with_a_valid_Dockerfile/builds_an_image.yml +17 -17
- data/spec/vcr/Docker_Image/_build/with_an_invalid_Dockerfile/throws_a_UnexpectedResponseError.yml +20 -15
- data/spec/vcr/Docker_Image/_create/when_the_Image_does_not_yet_exist_and_the_body_is_a_Hash/sets_the_id.yml +19 -14
- data/spec/vcr/Docker_Image/_history/returns_the_history_of_the_Image.yml +34 -26
- data/spec/vcr/Docker_Image/_insert/inserts_the_url_s_file_into_a_new_Image.yml +134 -95
- data/spec/vcr/Docker_Image/_insert_local/when_the_local_file_does_exist/creates_a_new_Image_that_has_that_file.yml +29 -29
- data/spec/vcr/Docker_Image/_insert_local/when_the_local_file_does_not_exist/raises_an_error.yml +5 -5
- data/spec/vcr/Docker_Image/_insert_local/when_there_are_multiple_files_passed/creates_a_new_Image_that_has_each_file.yml +30 -30
- data/spec/vcr/Docker_Image/_json/returns_additional_information_about_image_image.yml +34 -26
- data/spec/vcr/Docker_Image/_remove/removes_the_Image.yml +49 -38
- data/spec/vcr/Docker_Image/_run/when_the_argument_is_a_String/splits_the_String_by_spaces_and_creates_a_new_Container.yml +64 -51
- data/spec/vcr/Docker_Image/_run/when_the_argument_is_an_Array/creates_a_new_Container.yml +64 -51
- data/spec/vcr/Docker_Image/_search/materializes_each_Image_into_a_Docker_Image.yml +20 -14
- data/spec/vcr/Docker_Image/_tag/tags_the_image_with_the_repo_name.yml +33 -25
- metadata +29 -54
- data/spec/vcr/Docker_Container/_create/when_the_Container_does_not_yet_exist_and_the_body_is_a_Hash/when_the_HTTP_request_returns_a_200/sets_the_id.yml +0 -30
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 73fb37b59d2a47b3db7d9c8a380f6e62ebdff7eb
|
4
|
+
data.tar.gz: eb221917606fb54355f075be67c508597749c67e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 089db48c5b0bf31aab2d7a2136ea0a26818a93faa41e27ec1e838037cdf94eb7873b1b099a6cfd6a6f942de7c2bddf356e412a6417a1c66f3a0defebe2c6c9e1
|
7
|
+
data.tar.gz: e6aa7b45e53e29e09130bf3f39722b5ec8eb8c537e6a01244aaf0411c65b729d38ee4603f7e7be28cb4b665feda025cf1f73e49e9e4b5b3f2be8b7a03585891b
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@ docker-api
|
|
2
2
|
==========
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/docker-api.png)](http://badge.fury.io/rb/docker-api) [![travis-ci](https://travis-ci.org/swipely/docker-api.png?branch=master)](https://travis-ci.org/swipely/docker-api) [![Code Climate](https://codeclimate.com/github/swipely/docker-api.png)](https://codeclimate.com/github/swipely/docker-api) [![Dependency Status](https://gemnasium.com/swipely/docker-api.png)](https://gemnasium.com/swipely/docker-api)
|
4
4
|
|
5
|
-
This gem provides an object-oriented interface to the [Docker Remote API](http://docs.docker.io/en/latest/api/docker_remote_api_v1.4/). Every method listed there is implemented, with the exception of attaching to the STDIN of a Container. At the time of this writing, docker-api is meant to interface with Docker version 0.
|
5
|
+
This gem provides an object-oriented interface to the [Docker Remote API](http://docs.docker.io/en/latest/api/docker_remote_api_v1.4/). Every method listed there is implemented, with the exception of attaching to the STDIN of a Container. At the time of this writing, docker-api is meant to interface with Docker version 0.6.*.
|
6
6
|
|
7
7
|
Installation
|
8
8
|
------------
|
@@ -42,25 +42,34 @@ $ sudo docker -d
|
|
42
42
|
|
43
43
|
This will daemonize Docker so that it can be used for the remote API calls.
|
44
44
|
|
45
|
-
If you're running Docker locally, there is no setup to do in Ruby. If you're not, you'll have to point the gem to your
|
45
|
+
If you're running Docker locally as a socket, there is no setup to do in Ruby. If you're not or change the path of the socket, you'll have to point the gem to your socket or local/remote port. For example:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
Docker.url = 'http://example.com'
|
49
|
-
Docker.options = { :port => 5422 }
|
48
|
+
Docker.url = 'http://example.com:5422'
|
50
49
|
```
|
51
50
|
|
52
|
-
Two things to note here. The first is that this gem uses [excon](http://www.github.com/geemus/excon), so any of the options that are valid for `Excon.new` are alse valid for `Docker.options`. Second, by default Docker runs on
|
51
|
+
Two things to note here. The first is that this gem uses [excon](http://www.github.com/geemus/excon), so any of the options that are valid for `Excon.new` are alse valid for `Docker.options`. Second, by default Docker runs on a socket. The gem will assume you want to connnect to the socket unless you specify otherwise.
|
53
52
|
|
54
53
|
Also, you may set the above variables via `ENV` variables. For example:
|
55
54
|
|
56
55
|
```shell
|
57
|
-
$
|
56
|
+
$ DOCKER_URL=unix:///var/docker.sock irb
|
58
57
|
irb(main):001:0> require 'docker'
|
59
58
|
=> true
|
60
59
|
irb(main):002:0> Docker.url
|
61
|
-
=>
|
60
|
+
=> "unix:///var/docker.sock"
|
62
61
|
irb(main):003:0> Docker.options
|
63
|
-
=> {
|
62
|
+
=> {}
|
63
|
+
```
|
64
|
+
|
65
|
+
```shell
|
66
|
+
$ DOCKER_URL=http://example.com:1000 irb
|
67
|
+
irb(main):001:0> require 'docker'
|
68
|
+
=> true
|
69
|
+
irb(main):003:0> Docker.url
|
70
|
+
=> "http://example.com:1000"
|
71
|
+
irb(main):004:0> Docker.options
|
72
|
+
=> {}
|
64
73
|
```
|
65
74
|
|
66
75
|
Before doing anything else, ensure you have the correct version of the Docker API. To do this, run `Docker.validate_version!`. If your installed version is not supported, a `Docker::Error::VersionError` is raised.
|
@@ -91,7 +100,7 @@ require 'docker'
|
|
91
100
|
# => true
|
92
101
|
|
93
102
|
# Create an Image.
|
94
|
-
Docker::Image.create('
|
103
|
+
Docker::Image.create('fromImage' => 'base')
|
95
104
|
# => Docker::Image { :id => ae7ffbcd1, :connection => Docker::Connection { :url => http://localhost, :options => {:port=>4243} } }
|
96
105
|
|
97
106
|
# Insert a file into an Image from a url.
|
@@ -252,7 +261,7 @@ By default, each object connects to the connection specified by `Docker.connecti
|
|
252
261
|
```ruby
|
253
262
|
require 'docker'
|
254
263
|
|
255
|
-
Docker::Container.all({}, Docker::Connection.new(
|
264
|
+
Docker::Container.all({}, Docker::Connection.new('http://example.com:4243', {}))
|
256
265
|
```
|
257
266
|
|
258
267
|
## Known Issues
|
data/docker-api.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.name = "docker-api"
|
15
15
|
gem.require_paths = %w{lib}
|
16
16
|
gem.version = Docker::VERSION
|
17
|
-
gem.add_dependency 'excon', '>= 0.
|
17
|
+
gem.add_dependency 'excon', '>= 0.27.3'
|
18
18
|
gem.add_dependency 'json'
|
19
19
|
gem.add_dependency 'archive-tar-minitar'
|
20
20
|
gem.add_development_dependency 'rake'
|
data/lib/docker.rb
CHANGED
@@ -10,13 +10,20 @@ require 'archive/tar/minitar'
|
|
10
10
|
module Docker
|
11
11
|
attr_reader :creds
|
12
12
|
|
13
|
+
def default_socket_url
|
14
|
+
'unix:///var/run/docker.sock'
|
15
|
+
end
|
16
|
+
|
17
|
+
def env_url
|
18
|
+
ENV['DOCKER_URL']
|
19
|
+
end
|
20
|
+
|
13
21
|
def url
|
14
|
-
@url ||=
|
22
|
+
@url ||= ENV['DOCKER_URL'] || default_socket_url
|
15
23
|
end
|
16
24
|
|
17
25
|
def options
|
18
|
-
|
19
|
-
@options ||= { :port => port.to_i }
|
26
|
+
@options ||= {}
|
20
27
|
end
|
21
28
|
|
22
29
|
def url=(new_url)
|
@@ -25,7 +32,7 @@ module Docker
|
|
25
32
|
end
|
26
33
|
|
27
34
|
def options=(new_options)
|
28
|
-
@options =
|
35
|
+
@options = new_options
|
29
36
|
reset_connection!
|
30
37
|
end
|
31
38
|
|
@@ -63,9 +70,9 @@ module Docker
|
|
63
70
|
raise Docker::Error::VersionError, "Expected API Version: #{API_VERSION}"
|
64
71
|
end
|
65
72
|
|
66
|
-
module_function :
|
67
|
-
:
|
68
|
-
:validate_version!
|
73
|
+
module_function :default_socket_url, :env_url, :url, :url=, :options,
|
74
|
+
:options=, :connection, :reset_connection!, :version,
|
75
|
+
:info, :authenticate!, :validate_version!
|
69
76
|
end
|
70
77
|
|
71
78
|
require 'docker/version'
|
data/lib/docker/connection.rb
CHANGED
@@ -15,7 +15,12 @@ class Docker::Connection
|
|
15
15
|
when !opts.is_a?(Hash)
|
16
16
|
raise ArgumentError, "Expected a Hash, got: '#{opts}'"
|
17
17
|
else
|
18
|
-
|
18
|
+
uri = URI.parse(url)
|
19
|
+
if uri.scheme == "unix"
|
20
|
+
@url, @options = 'unix:///', {:socket => uri.path}.merge(opts)
|
21
|
+
else
|
22
|
+
@url, @options = url, opts
|
23
|
+
end
|
19
24
|
end
|
20
25
|
end
|
21
26
|
|
data/lib/docker/image.rb
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
class Docker::Image
|
3
3
|
include Docker::Error
|
4
4
|
|
5
|
-
attr_accessor :id, :connection
|
5
|
+
attr_accessor :id, :connection, :info
|
6
6
|
|
7
7
|
# The private new method accepts a connection and optional id.
|
8
|
-
def initialize(connection, id = nil)
|
8
|
+
def initialize(connection, id = nil, info = {})
|
9
9
|
if connection.is_a?(Docker::Connection)
|
10
|
-
@connection, @id = connection, id
|
10
|
+
@connection, @id, @info = connection, id, info
|
11
11
|
else
|
12
12
|
raise ArgumentError, "Expected a Docker::Connection, got: #{connection}."
|
13
13
|
end
|
@@ -67,7 +67,8 @@ class Docker::Image
|
|
67
67
|
|
68
68
|
# Return a String representation of the Image.
|
69
69
|
def to_s
|
70
|
-
"Docker::Image { :id => #{self.id}, :
|
70
|
+
"Docker::Image { :id => #{self.id}, :info => #{self.info.inspect}, "\
|
71
|
+
":connection => #{self.connection} }"
|
71
72
|
end
|
72
73
|
|
73
74
|
# #json returns extra information about an Image, #history returns its
|
@@ -96,7 +97,7 @@ class Docker::Image
|
|
96
97
|
# Return every Image.
|
97
98
|
def all(opts = {}, conn = Docker.connection)
|
98
99
|
hashes = Docker::Util.parse_json(conn.get('/images/json', opts)) || []
|
99
|
-
hashes.map { |hash| new(conn, hash['Id']) }
|
100
|
+
hashes.map { |hash| new(conn, hash['Id'], hash.tap{|h| h.delete('Id')}) }
|
100
101
|
end
|
101
102
|
|
102
103
|
# Given a query like `{ :term => 'sshd' }`, queries the Docker Registry for
|
data/lib/docker/version.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Docker::Connection do
|
4
|
-
subject { described_class.new('http://localhost',
|
4
|
+
subject { described_class.new('http://localhost:4243', {}) }
|
5
5
|
|
6
6
|
describe '#initialize' do
|
7
|
-
let(:url) { 'http://localhost' }
|
8
|
-
let(:options) { {
|
7
|
+
let(:url) { 'http://localhost:4243' }
|
8
|
+
let(:options) { {} }
|
9
9
|
subject { described_class.new(url, options) }
|
10
10
|
|
11
11
|
context 'when the first argument is not a String' do
|
@@ -17,6 +17,15 @@ describe Docker::Connection do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when the first argument is a String' do
|
20
|
+
context 'and the url is a unix socket' do
|
21
|
+
let(:url) { 'unix:///var/run/docker.sock' }
|
22
|
+
|
23
|
+
it 'sets the socket path in the options' do
|
24
|
+
expect(subject.url).to eq('unix:///')
|
25
|
+
expect(subject.options).to include(:socket => '/var/run/docker.sock')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
20
29
|
context 'but the second argument is not a Hash' do
|
21
30
|
let(:options) { :lol_not_a_hash }
|
22
31
|
|
@@ -80,9 +89,8 @@ describe Docker::Connection do
|
|
80
89
|
end
|
81
90
|
|
82
91
|
describe '#to_s' do
|
83
|
-
let(:url) { 'google.com' }
|
84
|
-
let(:
|
85
|
-
let(:options) { { :port => port } }
|
92
|
+
let(:url) { 'http://google.com:4000' }
|
93
|
+
let(:options) { {} }
|
86
94
|
let(:expected_string) {
|
87
95
|
"Docker::Connection { :url => #{url}, :options => #{options} }"
|
88
96
|
}
|
@@ -40,17 +40,34 @@ describe Docker::Container do
|
|
40
40
|
before { subject.tap(&:start).tap(&:wait) }
|
41
41
|
|
42
42
|
it 'returns the changes as an array', :vcr do
|
43
|
-
changes.should == [
|
43
|
+
changes.should == [
|
44
|
+
{
|
45
|
+
"Path" => "/root",
|
46
|
+
"Kind" => 2
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"Path" => "/dev",
|
50
|
+
"Kind" => 0
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"Path" => "/dev/kmsg",
|
54
|
+
"Kind" => 1
|
55
|
+
}
|
56
|
+
]
|
44
57
|
end
|
45
58
|
end
|
46
59
|
|
47
60
|
describe '#top' do
|
48
61
|
subject {
|
49
|
-
described_class.create(
|
62
|
+
described_class.create(
|
63
|
+
'Cmd' => %w[while true; do; done;],
|
64
|
+
'Image' => 'base'
|
65
|
+
)
|
50
66
|
}
|
51
67
|
let(:top) { subject.top }
|
52
68
|
|
53
69
|
before { subject.start }
|
70
|
+
after { subject.kill }
|
54
71
|
|
55
72
|
it 'returns the top commands as an Array', :vcr do
|
56
73
|
top.should be_a Array
|
@@ -60,7 +77,11 @@ describe Docker::Container do
|
|
60
77
|
end
|
61
78
|
|
62
79
|
describe '#copy' do
|
63
|
-
subject {
|
80
|
+
subject {
|
81
|
+
Docker::Image.create(
|
82
|
+
'fromImage' => 'base'
|
83
|
+
).run('touch /test').tap { |c| c.start.wait }
|
84
|
+
}
|
64
85
|
|
65
86
|
context 'when the file does not exist' do
|
66
87
|
it 'raises an error', :vcr do
|
@@ -72,8 +93,9 @@ describe Docker::Container do
|
|
72
93
|
context 'when the input is a file' do
|
73
94
|
it 'yields each chunk of the tarred file', :vcr do
|
74
95
|
chunks = []
|
75
|
-
subject.copy('/
|
76
|
-
chunks.join("\n")
|
96
|
+
subject.copy('/test') { |chunk| chunks << chunk }
|
97
|
+
chunks = chunks.join("\n")
|
98
|
+
expect(chunks).to be_include('test')
|
77
99
|
end
|
78
100
|
end
|
79
101
|
|
@@ -173,9 +195,6 @@ describe Docker::Container do
|
|
173
195
|
described_class.all.map(&:id).should be_none { |id|
|
174
196
|
id.start_with?(subject.id)
|
175
197
|
}
|
176
|
-
described_class.all(:all => true).map(&:id).should be_any { |id|
|
177
|
-
id.start_with?(subject.id)
|
178
|
-
}
|
179
198
|
end
|
180
199
|
end
|
181
200
|
|
data/spec/docker/image_spec.rb
CHANGED
@@ -6,13 +6,22 @@ describe Docker::Image do
|
|
6
6
|
|
7
7
|
let(:id) { 'bf119e2' }
|
8
8
|
let(:connection) { Docker.connection }
|
9
|
+
|
10
|
+
let(:info) do
|
11
|
+
{"Repository" => "base", "Tag" => "latest",
|
12
|
+
"Created" => 1364102658, "Size" => 24653, "VirtualSize" => 180116135}
|
13
|
+
end
|
14
|
+
|
9
15
|
let(:expected_string) do
|
10
|
-
"Docker::Image { :id => #{id}, :
|
16
|
+
"Docker::Image { :id => #{id}, :info => #{info.inspect}, "\
|
17
|
+
":connection => #{connection} }"
|
11
18
|
end
|
19
|
+
|
12
20
|
before do
|
13
21
|
{
|
14
22
|
:@id => id,
|
15
|
-
:@connection => connection
|
23
|
+
:@connection => connection,
|
24
|
+
:@info => info
|
16
25
|
}.each { |k, v| subject.instance_variable_set(k, v) }
|
17
26
|
end
|
18
27
|
|
@@ -184,9 +193,18 @@ describe Docker::Image do
|
|
184
193
|
before { subject.create('fromImage' => 'base') }
|
185
194
|
|
186
195
|
it 'materializes each Image into a Docker::Image', :vcr do
|
187
|
-
images.
|
188
|
-
|
189
|
-
|
196
|
+
images.each do |image|
|
197
|
+
image.should_not be_nil
|
198
|
+
|
199
|
+
image.should be_a(described_class)
|
200
|
+
|
201
|
+
image.id.should_not be_nil
|
202
|
+
|
203
|
+
%w(Created Size VirtualSize).each do |key|
|
204
|
+
image.info.should have_key(key)
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
190
208
|
images.length.should_not be_zero
|
191
209
|
end
|
192
210
|
end
|
data/spec/docker_spec.rb
CHANGED
@@ -4,39 +4,31 @@ describe Docker do
|
|
4
4
|
subject { Docker }
|
5
5
|
|
6
6
|
before do
|
7
|
-
ENV['
|
8
|
-
ENV['DOCKER_PORT'] = nil
|
7
|
+
ENV['DOCKER_URL'] = nil
|
9
8
|
end
|
10
9
|
|
11
10
|
it { should be_a Module }
|
12
|
-
its(:options) { should == { :port => 4243 } }
|
13
|
-
its(:url) { should == 'http://localhost' }
|
14
|
-
its(:connection) { should be_a Docker::Connection }
|
15
|
-
|
16
|
-
context 'when the DOCKER_HOST ENV variable is set' do
|
17
|
-
let(:host) { 'google.com' }
|
18
|
-
let(:url) { "http://#{host}" }
|
19
11
|
|
12
|
+
context 'default url and connection' do
|
20
13
|
before do
|
21
|
-
Docker.
|
22
|
-
|
14
|
+
Docker.url = nil
|
15
|
+
Docker.options = nil
|
23
16
|
end
|
24
17
|
|
25
|
-
|
26
|
-
|
18
|
+
context "when the DOCKER_* ENV variables aren't set" do
|
19
|
+
its(:options) { {} }
|
20
|
+
its(:url) { should == 'unix:///var/run/docker.sock' }
|
21
|
+
its(:connection) { should be_a Docker::Connection }
|
27
22
|
end
|
28
|
-
end
|
29
23
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
Docker.instance_variable_set(:@options, nil)
|
35
|
-
ENV['DOCKER_PORT'] = port.to_s
|
36
|
-
end
|
24
|
+
context "when the DOCKER_* ENV variables are set" do
|
25
|
+
before do
|
26
|
+
ENV['DOCKER_URL'] = 'unixs:///var/run/not-docker.sock'
|
27
|
+
end
|
37
28
|
|
38
|
-
|
39
|
-
|
29
|
+
its(:options) { {} }
|
30
|
+
its(:url) { should == 'unixs:///var/run/not-docker.sock' }
|
31
|
+
its(:connection) { should be_a Docker::Connection }
|
40
32
|
end
|
41
33
|
end
|
42
34
|
|
@@ -52,8 +44,8 @@ describe Docker do
|
|
52
44
|
[:options=, :url=].each do |method|
|
53
45
|
describe "##{method}" do
|
54
46
|
after(:all) do
|
55
|
-
subject.
|
56
|
-
subject.
|
47
|
+
subject.instance_variable_set(:@url, nil)
|
48
|
+
subject.instance_variable_set(:@options, nil)
|
57
49
|
end
|
58
50
|
it 'calls #reset_connection!' do
|
59
51
|
subject.should_receive(:reset_connection!)
|
@@ -63,18 +55,29 @@ describe Docker do
|
|
63
55
|
end
|
64
56
|
|
65
57
|
describe '#version' do
|
58
|
+
before do
|
59
|
+
subject.url = nil
|
60
|
+
subject.options = nil
|
61
|
+
end
|
62
|
+
|
66
63
|
let(:version) { subject.version }
|
67
64
|
it 'returns the version as a Hash', :vcr do
|
68
65
|
version.should be_a Hash
|
69
|
-
version.keys.sort.should == %w[GoVersion Version]
|
66
|
+
version.keys.sort.should == %w[GitCommit GoVersion Version]
|
70
67
|
end
|
71
68
|
end
|
72
69
|
|
73
70
|
describe '#info' do
|
71
|
+
before do
|
72
|
+
subject.url = nil
|
73
|
+
subject.options = nil
|
74
|
+
end
|
75
|
+
|
74
76
|
let(:info) { subject.info }
|
75
77
|
let(:keys) do
|
76
|
-
%w(Containers Debug Images
|
77
|
-
NEventsListener NFd
|
78
|
+
%w(Containers Debug IPv4Forwarding Images IndexServerAddress
|
79
|
+
KernelVersion LXCVersion MemoryLimit NEventsListener NFd
|
80
|
+
NGoroutines)
|
78
81
|
end
|
79
82
|
|
80
83
|
it 'returns the info as a Hash', :vcr do
|
@@ -90,6 +93,11 @@ describe Docker do
|
|
90
93
|
end
|
91
94
|
|
92
95
|
describe '#validate_version' do
|
96
|
+
before do
|
97
|
+
subject.url = nil
|
98
|
+
subject.options = nil
|
99
|
+
end
|
100
|
+
|
93
101
|
context 'when a Docker Error is raised' do
|
94
102
|
before { Docker.stub(:info).and_raise(Docker::Error::ClientError) }
|
95
103
|
|