hyperb 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +12 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.rubocop.yml +41 -0
- data/Dockerfile +7 -0
- data/Gemfile +16 -0
- data/LICENSE.txt +21 -0
- data/Makefile +16 -0
- data/README.md +188 -0
- data/Rakefile +24 -0
- data/circle.yml +13 -0
- data/examples/README.md +367 -0
- data/examples/auth-gcr-registry.md +19 -0
- data/examples/compose.md +75 -0
- data/examples/handling-errors.md +54 -0
- data/examples/streaming-logs.md +28 -0
- data/examples/streaming-stats.md +25 -0
- data/hyperb.gemspec +30 -0
- data/lib/hyperb.rb +4 -0
- data/lib/hyperb/api.rb +22 -0
- data/lib/hyperb/auth_object.rb +42 -0
- data/lib/hyperb/client.rb +32 -0
- data/lib/hyperb/compose/compose.rb +116 -0
- data/lib/hyperb/containers/container.rb +27 -0
- data/lib/hyperb/containers/containers.rb +251 -0
- data/lib/hyperb/error.rb +44 -0
- data/lib/hyperb/hyper_version.rb +12 -0
- data/lib/hyperb/images/image.rb +13 -0
- data/lib/hyperb/images/images.rb +108 -0
- data/lib/hyperb/network/fips.rb +102 -0
- data/lib/hyperb/request.rb +129 -0
- data/lib/hyperb/services/services.rb +59 -0
- data/lib/hyperb/snapshots/snapshot.rb +12 -0
- data/lib/hyperb/snapshots/snapshots.rb +39 -0
- data/lib/hyperb/utils.rb +39 -0
- data/lib/hyperb/version.rb +3 -0
- data/lib/hyperb/volumes/volume.rb +16 -0
- data/lib/hyperb/volumes/volumes.rb +67 -0
- data/spec/auth_object_spec.rb +45 -0
- data/spec/client_spec.rb +27 -0
- data/spec/compose_spec.rb +145 -0
- data/spec/container_spec.rb +25 -0
- data/spec/containers_spec.rb +442 -0
- data/spec/create_snapshot.rb +30 -0
- data/spec/error_spec.rb +18 -0
- data/spec/fixtures/auth_obj.json +12 -0
- data/spec/fixtures/compose_rm.json +1 -0
- data/spec/fixtures/compose_up.json +1 -0
- data/spec/fixtures/container_stats.json +78 -0
- data/spec/fixtures/containers.json +160 -0
- data/spec/fixtures/create_container.json +4 -0
- data/spec/fixtures/create_image.json +1 -0
- data/spec/fixtures/create_service.json +35 -0
- data/spec/fixtures/create_snapshot.json +8 -0
- data/spec/fixtures/fip_allocate.json +7 -0
- data/spec/fixtures/fips_ls.json +14 -0
- data/spec/fixtures/images.json +32 -0
- data/spec/fixtures/inspect_container.json +159 -0
- data/spec/fixtures/inspect_image.json +89 -0
- data/spec/fixtures/inspect_volume.json +11 -0
- data/spec/fixtures/remove_container.json +1 -0
- data/spec/fixtures/remove_image.json +5 -0
- data/spec/fixtures/volumes.json +13 -0
- data/spec/helper.rb +36 -0
- data/spec/image_spec.rb +17 -0
- data/spec/images_spec.rb +133 -0
- data/spec/network_spec.rb +106 -0
- data/spec/request_spec.rb +41 -0
- data/spec/services_spec.rb +193 -0
- data/spec/version_spec.rb +7 -0
- data/spec/volumes_spec.rb +88 -0
- metadata +74 -3
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
RSpec.describe Hyperb::AuthObject do
|
4
|
+
|
5
|
+
it '#valid? with invalid object' do
|
6
|
+
auth_object = Hyperb::AuthObject.new(username: '')
|
7
|
+
expect(auth_object.valid?).to be false
|
8
|
+
end
|
9
|
+
|
10
|
+
it '#valid? with valid object' do
|
11
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json'), serveraddress: 'https://gcr.io')
|
12
|
+
expect(auth_object.valid?).to be true
|
13
|
+
end
|
14
|
+
|
15
|
+
it '#attrs' do
|
16
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json'), serveraddress: 'https://gcr.io')
|
17
|
+
expect(auth_object.attrs).to be_a Hash
|
18
|
+
expect(auth_object.attrs[:username]).to eql('l')
|
19
|
+
expect(auth_object.attrs[:email]).to eql('t@t.com')
|
20
|
+
expect(auth_object.attrs[:password]).to eql(fixture('auth_obj.json').read)
|
21
|
+
expect(auth_object.attrs[:serveraddress]).to eql('https://gcr.io')
|
22
|
+
end
|
23
|
+
|
24
|
+
it '#password should read contents of file when File' do
|
25
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json'))
|
26
|
+
expect(auth_object.attrs[:password]).to eql(fixture('auth_obj.json').read)
|
27
|
+
end
|
28
|
+
|
29
|
+
it '#password should also accept a String' do
|
30
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json').read)
|
31
|
+
expect(auth_object.attrs[:password]).to eql(fixture('auth_obj.json').read)
|
32
|
+
end
|
33
|
+
|
34
|
+
it '#encode' do
|
35
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json'))
|
36
|
+
expect(auth_object.encode).not_to be nil
|
37
|
+
end
|
38
|
+
|
39
|
+
it '#build' do
|
40
|
+
auth_object = Hyperb::AuthObject.new(username: 'l', email: 't@t.com', password: fixture('auth_obj.json'))
|
41
|
+
expect(auth_object.build).to be_a Hash
|
42
|
+
expect(auth_object.build.has_key?(:x_registry_auth)).to be true
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
RSpec.describe Hyperb::Client do
|
4
|
+
|
5
|
+
it 'simple init' do
|
6
|
+
client = Hyperb::Client.new do |c|
|
7
|
+
c.access_key = 'k'
|
8
|
+
c.secret_key = 's'
|
9
|
+
end
|
10
|
+
expect(client.access_key).to eq 'k'
|
11
|
+
expect(client.secret_key).to eq 's'
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#credentials?' do
|
15
|
+
|
16
|
+
it 'returns true if all credentials are set' do
|
17
|
+
client = Hyperb::Client.new(secret_key: 'SK', access_key: 'AK')
|
18
|
+
expect(client.credentials?).to be true
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'returns false if some credential is not set' do
|
22
|
+
client = Hyperb::Client.new(secret_key: 'SK')
|
23
|
+
expect(client.credentials?).to be false
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'http'
|
3
|
+
|
4
|
+
RSpec.describe Hyperb::Compose do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
+
@base_path = Hyperb::Request::BASE_URL + Hyperb::Request::VERSION + '/compose/'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#compose_down' do
|
12
|
+
|
13
|
+
it 'should raise ArgumentError when project is not provided' do
|
14
|
+
expect { @client.compose_down }.to raise_error(ArgumentError)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'request to the correct path should be made' do
|
18
|
+
path = @base_path + 'down?project=app'
|
19
|
+
stub_request(:post, path)
|
20
|
+
.to_return(body: "")
|
21
|
+
|
22
|
+
@client.compose_down(project: 'app')
|
23
|
+
expect(a_request(:post, path)).to have_been_made
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'request to the correct path should be made with rmi' do
|
27
|
+
path = @base_path + 'down?project=app&rmi=all'
|
28
|
+
stub_request(:post, path)
|
29
|
+
.to_return(body: "")
|
30
|
+
|
31
|
+
@client.compose_down(project: 'app', rmi: 'all')
|
32
|
+
expect(a_request(:post, path)).to have_been_made
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'request to the correct path should be made with rmi' do
|
36
|
+
path = @base_path + 'down?project=app&rmi=local'
|
37
|
+
stub_request(:post, path)
|
38
|
+
.to_return(body: "")
|
39
|
+
|
40
|
+
@client.compose_down(project: 'app', rmi: 'local')
|
41
|
+
expect(a_request(:post, path)).to have_been_made
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'request to the correct path should be made with rmorphans' do
|
45
|
+
path = @base_path + 'down?project=app&rmorphans=true'
|
46
|
+
stub_request(:post, path)
|
47
|
+
.to_return(body: "")
|
48
|
+
|
49
|
+
@client.compose_down(project: 'app', rmorphans: true)
|
50
|
+
expect(a_request(:post, path)).to have_been_made
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'request to the correct path should be made with rmorphans' do
|
54
|
+
path = @base_path + 'down?project=app&vol=true'
|
55
|
+
stub_request(:post, path)
|
56
|
+
.to_return(body: "")
|
57
|
+
|
58
|
+
@client.compose_down(project: 'app', vol: true)
|
59
|
+
expect(a_request(:post, path)).to have_been_made
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#compose_create' do
|
65
|
+
|
66
|
+
before do
|
67
|
+
@serviceconfigs = {
|
68
|
+
'web': {
|
69
|
+
'image': 'rails'
|
70
|
+
},
|
71
|
+
'db': {
|
72
|
+
'image': 'mariadb'
|
73
|
+
}
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should raise ArgumentError when project is not provided' do
|
78
|
+
expect { @client.compose_create }.to raise_error(ArgumentError)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'request to the correct path should be made' do
|
82
|
+
path = @base_path + 'create?project=app'
|
83
|
+
stub_request(:post, path)
|
84
|
+
.to_return(body: fixture('compose_up.json'))
|
85
|
+
|
86
|
+
@client.compose_create(project: 'app', serviceconfigs: @serviceconfigs)
|
87
|
+
expect(a_request(:post, path)).to have_been_made
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#compose_up' do
|
92
|
+
|
93
|
+
before do
|
94
|
+
@serviceconfigs = {
|
95
|
+
'web': {
|
96
|
+
'image': 'rails'
|
97
|
+
},
|
98
|
+
'db': {
|
99
|
+
'image': 'mariadb'
|
100
|
+
}
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should raise ArgumentError when project is not provided' do
|
105
|
+
expect { @client.compose_up }.to raise_error(ArgumentError)
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'request to the correct path should be made' do
|
109
|
+
path = @base_path + 'up?project=app'
|
110
|
+
stub_request(:post, path)
|
111
|
+
.to_return(body: fixture('compose_up.json'))
|
112
|
+
|
113
|
+
@client.compose_up(project: 'app', serviceconfigs: @serviceconfigs)
|
114
|
+
expect(a_request(:post, path)).to have_been_made
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe '#compose_rm' do
|
119
|
+
|
120
|
+
it 'should raise ArgumentError when project is not provided' do
|
121
|
+
expect { @client.compose_rm }.to raise_error(ArgumentError)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'correct request should be made' do
|
125
|
+
path = @base_path + 'rm?project=blog'
|
126
|
+
|
127
|
+
stub_request(:post, path)
|
128
|
+
.to_return(body: fixture('compose_rm.json'))
|
129
|
+
|
130
|
+
@client.compose_rm(project: 'blog')
|
131
|
+
expect(a_request(:post, path)).to have_been_made
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'correct request should be made with rmvol' do
|
135
|
+
path = @base_path + 'rm?project=blog&rmvol=true'
|
136
|
+
|
137
|
+
stub_request(:post, path)
|
138
|
+
.to_return(body: fixture('compose_rm.json'))
|
139
|
+
|
140
|
+
@client.compose_rm(project: 'blog', rmvol: true)
|
141
|
+
expect(a_request(:post, path)).to have_been_made
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
RSpec.describe Hyperb::Container do
|
4
|
+
|
5
|
+
describe '#created' do
|
6
|
+
|
7
|
+
it 'returns timestamp when created is set' do
|
8
|
+
container = Hyperb::Container.new(id: '736cbb24edca6b366feb9975aaf34f330ba0d02b181d5227f8acb4a162b8fb44', created: 1420064636)
|
9
|
+
expect(container.created).to be_a Fixnum
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns nil when created is not set' do
|
13
|
+
container = Hyperb::Container.new(id: 1)
|
14
|
+
expect(container.created).to be_nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '#running?' do
|
19
|
+
it 'returns false if container is not running' do
|
20
|
+
container = Hyperb::Container.new(id: 1, state: 'stopped')
|
21
|
+
expect(container.running?).to be false
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,442 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'http'
|
3
|
+
|
4
|
+
RSpec.describe Hyperb::Containers do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
+
|
9
|
+
@containers_base_path = Hyperb::Request::BASE_URL + Hyperb::Request::VERSION + '/containers/'
|
10
|
+
@containers_path = @containers_base_path + 'json'
|
11
|
+
@remove_container_path = @containers_base_path
|
12
|
+
@create_container_path = @containers_base_path + 'create'
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#containers' do
|
16
|
+
|
17
|
+
it 'request to the correct path should be made' do
|
18
|
+
|
19
|
+
stub_request(:get, @containers_path)
|
20
|
+
.to_return(body: fixture('containers.json'))
|
21
|
+
|
22
|
+
@client.containers
|
23
|
+
expect(a_request(:get, @containers_path)).to have_been_made
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'request to the correct path should be made with all=true' do
|
27
|
+
stub_request(:get, @containers_path + '?all=true')
|
28
|
+
.to_return(body: fixture('containers.json'))
|
29
|
+
|
30
|
+
@client.containers(all: true)
|
31
|
+
expect(a_request(:get, @containers_path + '?all=true')).to have_been_made
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'request to the correct path should be made with limit=5' do
|
35
|
+
stub_request(:get, @containers_path + '?limit=5')
|
36
|
+
.to_return(body: fixture('containers.json'))
|
37
|
+
|
38
|
+
@client.containers(limit: 5)
|
39
|
+
expect(a_request(:get, @containers_path + '?limit=5')).to have_been_made
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'request to the correct path should be made with since=someId' do
|
43
|
+
stub_request(:get, @containers_path + '?since=3afff57')
|
44
|
+
.to_return(body: fixture('containers.json'))
|
45
|
+
|
46
|
+
@client.containers(since: '3afff57')
|
47
|
+
expect(a_request(:get, @containers_path + '?since=3afff57')).to have_been_made
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'request to the correct path should be made with before=someId' do
|
51
|
+
stub_request(:get, @containers_path + '?before=3afff57')
|
52
|
+
.to_return(body: fixture('containers.json'))
|
53
|
+
|
54
|
+
@client.containers(before: '3afff57')
|
55
|
+
expect(a_request(:get, @containers_path + '?before=3afff57')).to have_been_made
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'request to the correct path should be made with all=true and since=someId' do
|
59
|
+
stub_request(:get, @containers_path + '?all=true&since=3afff57')
|
60
|
+
.to_return(body: fixture('containers.json'))
|
61
|
+
|
62
|
+
@client.containers(all: true, since: '3afff57')
|
63
|
+
expect(a_request(:get, @containers_path + '?all=true&since=3afff57')).to have_been_made
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'request to the correct path should be made with size=true' do
|
67
|
+
stub_request(:get, @containers_path + '?size=true')
|
68
|
+
.to_return(body: fixture('containers.json'))
|
69
|
+
|
70
|
+
@client.containers(size: true)
|
71
|
+
expect(a_request(:get, @containers_path + '?size=true')).to have_been_made
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'return array of containers' do
|
75
|
+
stub_request(:get, @containers_path + '?all=true')
|
76
|
+
.to_return(body: fixture('containers.json'))
|
77
|
+
|
78
|
+
containers = @client.containers(all: true)
|
79
|
+
expect(containers).to be_a Array
|
80
|
+
expect(containers[0]).to be_a Hyperb::Container
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'correct attrs' do
|
84
|
+
stub_request(:get, @containers_path)
|
85
|
+
.to_return(body: fixture('containers.json'))
|
86
|
+
|
87
|
+
@client.containers.each do |container|
|
88
|
+
expect(container.id).to be_a String
|
89
|
+
expect(container.created).to be_a Fixnum
|
90
|
+
expect(container.command).to be_a String
|
91
|
+
expect(container.networksettings).to be_a Hash
|
92
|
+
expect(container.hostconfig).to be_a Hash
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe '#inspect_container' do
|
98
|
+
|
99
|
+
before do
|
100
|
+
stub_request(:get, @containers_base_path + 'name/json')
|
101
|
+
.to_return(body: fixture('inspect_container.json'))
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should raise ArgumentError when id is missing' do
|
105
|
+
expect { @client.inspect_container }.to raise_error(ArgumentError)
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'request to the correct path should be made' do
|
109
|
+
@client.inspect_container id: 'name'
|
110
|
+
expect(a_request(:get, @containers_base_path + 'name/json')).to have_been_made
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'return a hash with symbolized attrs' do
|
114
|
+
res = @client.inspect_container(id: 'name')
|
115
|
+
expect(res).to be_a Hash
|
116
|
+
expect(res.has_key?(:args)).to be true
|
117
|
+
expect(res.has_key?(:config)).to be true
|
118
|
+
expect(res.has_key?(:created)).to be true
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
describe '#remove_container' do
|
124
|
+
|
125
|
+
it 'should raise ArgumentError when id is not provided' do
|
126
|
+
stub_request(:delete, @remove_container_path)
|
127
|
+
.to_return(body: fixture('remove_container.json'))
|
128
|
+
|
129
|
+
expect { @client.remove_container }.to raise_error(ArgumentError)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'request to the correct path should be made with id=fffff' do
|
133
|
+
stub_request(:delete, @remove_container_path + 'fffff')
|
134
|
+
.to_return(body: fixture('remove_container.json'))
|
135
|
+
|
136
|
+
@client.remove_container(id: 'fffff')
|
137
|
+
expect(a_request(:delete, @remove_container_path + 'fffff')).to have_been_made
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'request to the correct path should be made with force=true' do
|
141
|
+
stub_request(:delete, @remove_container_path + 'fffff?force=true')
|
142
|
+
.to_return(body: fixture('remove_container.json'))
|
143
|
+
|
144
|
+
@client.remove_container(id: 'fffff', force: true)
|
145
|
+
expect(a_request(:delete, @remove_container_path + 'fffff?force=true')).to have_been_made
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'request to the correct path should be made with v=true' do
|
149
|
+
stub_request(:delete, @remove_container_path + 'fffff?v=true')
|
150
|
+
.to_return(body: fixture('remove_container.json'))
|
151
|
+
|
152
|
+
@client.remove_container(id: 'fffff', v: true)
|
153
|
+
expect(a_request(:delete, @remove_container_path + 'fffff?v=true')).to have_been_made
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'request to the correct path should be made with v=true and force=true' do
|
157
|
+
stub_request(:delete, @remove_container_path + 'fffff?force=true&v=true')
|
158
|
+
.to_return(body: fixture('remove_container.json'))
|
159
|
+
|
160
|
+
@client.remove_container(id: 'fffff', v: true, force: true)
|
161
|
+
expect(a_request(:delete, @remove_container_path + 'fffff?force=true&v=true')).to have_been_made
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe '#create_container' do
|
166
|
+
|
167
|
+
it 'should raise ArgumentError when image is not provided' do
|
168
|
+
stub_request(:post, @create_container_path)
|
169
|
+
.to_return(body: fixture('create_container.json'))
|
170
|
+
|
171
|
+
expect { @client.create_container }.to raise_error(ArgumentError)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'request to the correct path should be made with name' do
|
175
|
+
stub_request(:post, @create_container_path + '?name=container_name')
|
176
|
+
.with(body: { image: 'image', labels: { sh_hyper_instancetype: 's1' } })
|
177
|
+
.to_return(body: fixture('create_container.json'))
|
178
|
+
|
179
|
+
@client.create_container(image: 'image', name: 'container_name')
|
180
|
+
expect(a_request(:post, @create_container_path + '?name=container_name')).to have_been_made
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'correct request should be made with hostname' do
|
184
|
+
path = @create_container_path + '?name=container_name'
|
185
|
+
|
186
|
+
stub_request(:post, path)
|
187
|
+
.with(body: { image: 'image', hostname: 'hostnamy', labels: { sh_hyper_instancetype: 's1' }})
|
188
|
+
.to_return(body: fixture('create_container.json'))
|
189
|
+
|
190
|
+
@client.create_container(image: 'image', name: 'container_name', hostname: 'hostnamy')
|
191
|
+
expect(a_request(:post, path)
|
192
|
+
.with(body: { image: 'image', hostname: 'hostnamy', labels: { sh_hyper_instancetype: 's1' }})).to have_been_made
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'correct request should be made with entrypoint' do
|
196
|
+
path = @create_container_path
|
197
|
+
|
198
|
+
stub_request(:post, path)
|
199
|
+
.with(body: { image: 'image', entrypoint: 'test entry', labels: { sh_hyper_instancetype: 's1' }})
|
200
|
+
.to_return(body: fixture('create_container.json'))
|
201
|
+
|
202
|
+
@client.create_container(image: 'image', entrypoint: 'test entry')
|
203
|
+
expect(a_request(:post, path)
|
204
|
+
.with(body: { image: 'image', entrypoint: 'test entry', labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'correct request should be made with cmd' do
|
208
|
+
path = @create_container_path
|
209
|
+
|
210
|
+
stub_request(:post, path)
|
211
|
+
.with(body: { image: 'image', cmd: 'test cmd', labels: { sh_hyper_instancetype: 's1' } })
|
212
|
+
.to_return(body: fixture('create_container.json'))
|
213
|
+
|
214
|
+
@client.create_container(image: 'image', cmd: 'test cmd')
|
215
|
+
expect(a_request(:post, path)
|
216
|
+
.with(body: { image: 'image', cmd: 'test cmd', labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
217
|
+
end
|
218
|
+
|
219
|
+
it 'correct request should be made with network mode' do
|
220
|
+
path = @create_container_path
|
221
|
+
|
222
|
+
stub_request(:post, path)
|
223
|
+
.with(body: { image: 'image', networkmode: 'bridge', labels: { sh_hyper_instancetype: 's1' } })
|
224
|
+
.to_return(body: fixture('create_container.json'))
|
225
|
+
|
226
|
+
@client.create_container(image: 'image', networkmode: 'bridge')
|
227
|
+
expect(a_request(:post, path)
|
228
|
+
.with(body: { image: 'image', networkmode: 'bridge', labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'correct request should be made with mounts' do
|
232
|
+
path = @create_container_path
|
233
|
+
|
234
|
+
stub_request(:post, path)
|
235
|
+
.with(body: { image: 'image', mounts: [], labels: { sh_hyper_instancetype: 's1' } })
|
236
|
+
.to_return(body: fixture('create_container.json'))
|
237
|
+
|
238
|
+
@client.create_container(image: 'image', mounts: [])
|
239
|
+
expect(a_request(:post, path)
|
240
|
+
.with(body: { image: 'image', mounts: [], labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'correct request should be made with exposed ports' do
|
244
|
+
path = @create_container_path
|
245
|
+
|
246
|
+
stub_request(:post, path)
|
247
|
+
.with(body: { image: 'image', exposedports: { '22/tcp': {} }, labels: { sh_hyper_instancetype: 's1' } })
|
248
|
+
.to_return(body: fixture('create_container.json'))
|
249
|
+
|
250
|
+
@client.create_container(image: 'image', exposedports: { '22/tcp': {} })
|
251
|
+
expect(a_request(:post, path)
|
252
|
+
.with(body: { image: 'image', exposedports: { '22/tcp': {} }, labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'correct request should be made with workingdir' do
|
256
|
+
path = @create_container_path
|
257
|
+
|
258
|
+
stub_request(:post, path)
|
259
|
+
.with(body: { image: 'image', workingdir: '/path/', labels: { sh_hyper_instancetype: 's1' } })
|
260
|
+
.to_return(body: fixture('create_container.json'))
|
261
|
+
|
262
|
+
@client.create_container(image: 'image', workingdir: '/path/')
|
263
|
+
expect(a_request(:post, path)
|
264
|
+
.with(body: { image: 'image', workingdir: '/path/', labels: { sh_hyper_instancetype: 's1' } })).to have_been_made
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
describe '#start_container' do
|
269
|
+
|
270
|
+
it 'should raise ArgumentError when id is not provided' do
|
271
|
+
expect { @client.start_container }.to raise_error(ArgumentError)
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'correct request should be made' do
|
275
|
+
path = @containers_base_path + 'id/start'
|
276
|
+
|
277
|
+
stub_request(:post, path)
|
278
|
+
.to_return(body: "")
|
279
|
+
|
280
|
+
@client.start_container(id: 'id')
|
281
|
+
expect(a_request(:post, path)
|
282
|
+
.with(body: "")).to have_been_made
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
describe '#container_logs' do
|
288
|
+
|
289
|
+
it 'should raise ArgumentError when id is not provided' do
|
290
|
+
expect { @client.container_logs }.to raise_error(ArgumentError)
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'correct request should be made with follow' do
|
294
|
+
path = @containers_base_path + 'id/logs?follow=true'
|
295
|
+
|
296
|
+
stub_request(:get, path)
|
297
|
+
.to_return(body: "")
|
298
|
+
|
299
|
+
@client.container_logs(id: 'id', follow: true)
|
300
|
+
expect(a_request(:get, path)
|
301
|
+
.with(body: "")).to have_been_made
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'correct request should be made with stderr' do
|
305
|
+
path = @containers_base_path + 'id/logs?stderr=true'
|
306
|
+
|
307
|
+
stub_request(:get, path)
|
308
|
+
.to_return(body: "")
|
309
|
+
|
310
|
+
@client.container_logs(id: 'id', stderr: true)
|
311
|
+
expect(a_request(:get, path)
|
312
|
+
.with(body: "")).to have_been_made
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'correct request should be made with since' do
|
316
|
+
path = @containers_base_path + 'id/logs?since=someid'
|
317
|
+
|
318
|
+
stub_request(:get, path)
|
319
|
+
.to_return(body: "")
|
320
|
+
|
321
|
+
@client.container_logs(id: 'id', since: 'someid')
|
322
|
+
expect(a_request(:get, path)
|
323
|
+
.with(body: "")).to have_been_made
|
324
|
+
end
|
325
|
+
|
326
|
+
it 'correct request should be made with timestamps' do
|
327
|
+
path = @containers_base_path + 'id/logs?timestamps=true'
|
328
|
+
|
329
|
+
stub_request(:get, path)
|
330
|
+
.to_return(body: "")
|
331
|
+
|
332
|
+
@client.container_logs(id: 'id', timestamps: true)
|
333
|
+
expect(a_request(:get, path)
|
334
|
+
.with(body: "")).to have_been_made
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
describe '#stop_container' do
|
339
|
+
|
340
|
+
it 'should raise ArgumentError when id is not provided' do
|
341
|
+
expect { @client.stop_container }.to raise_error(ArgumentError)
|
342
|
+
end
|
343
|
+
|
344
|
+
it 'correct request should be made' do
|
345
|
+
path = @containers_base_path + 'id/stop'
|
346
|
+
|
347
|
+
stub_request(:post, path)
|
348
|
+
.to_return(body: "")
|
349
|
+
|
350
|
+
@client.stop_container(id: 'id')
|
351
|
+
expect(a_request(:post, path)
|
352
|
+
.with(body: "")).to have_been_made
|
353
|
+
end
|
354
|
+
|
355
|
+
it 'correct request should be made with t' do
|
356
|
+
path = @containers_base_path + 'id/stop?t=50'
|
357
|
+
|
358
|
+
stub_request(:post, path)
|
359
|
+
.to_return(body: "")
|
360
|
+
|
361
|
+
@client.stop_container(id: 'id', t: 50)
|
362
|
+
expect(a_request(:post, path)
|
363
|
+
.with(body: "")).to have_been_made
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
describe '#container_stats' do
|
368
|
+
|
369
|
+
it 'should raise ArgumentError when id is not provided' do
|
370
|
+
expect { @client.container_stats }.to raise_error(ArgumentError)
|
371
|
+
end
|
372
|
+
|
373
|
+
it 'correct request should be made' do
|
374
|
+
path = @containers_base_path + 'id/stats'
|
375
|
+
|
376
|
+
stub_request(:get, path)
|
377
|
+
.to_return(body: fixture('container_stats.json'))
|
378
|
+
|
379
|
+
@client.container_stats(id: 'id')
|
380
|
+
expect(a_request(:get, path)).to have_been_made
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'correct request should be made with stream' do
|
384
|
+
path = @containers_base_path + 'id/stats?stream=false'
|
385
|
+
|
386
|
+
stub_request(:get, path)
|
387
|
+
.to_return(body: fixture('container_stats.json'))
|
388
|
+
|
389
|
+
@client.container_stats(id: 'id', stream: false)
|
390
|
+
expect(a_request(:get, path)).to have_been_made
|
391
|
+
end
|
392
|
+
|
393
|
+
end
|
394
|
+
|
395
|
+
describe '#kill_container' do
|
396
|
+
|
397
|
+
it 'should raise ArgumentError when id is not provided' do
|
398
|
+
expect { @client.kill_container }.to raise_error(ArgumentError)
|
399
|
+
end
|
400
|
+
|
401
|
+
it 'correct request should be made' do
|
402
|
+
path = @containers_base_path + 'id/kill'
|
403
|
+
|
404
|
+
stub_request(:post, path)
|
405
|
+
.to_return(body: "")
|
406
|
+
|
407
|
+
@client.kill_container(id: 'id')
|
408
|
+
expect(a_request(:post, path)).to have_been_made
|
409
|
+
end
|
410
|
+
|
411
|
+
it 'correct request should be made with signal' do
|
412
|
+
path = @containers_base_path + 'id/kill?signal=signal'
|
413
|
+
|
414
|
+
stub_request(:post, path)
|
415
|
+
.to_return(body: "")
|
416
|
+
|
417
|
+
@client.kill_container(id: 'id', signal: 'signal')
|
418
|
+
expect(a_request(:post, path)).to have_been_made
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
describe '#rename_container' do
|
423
|
+
|
424
|
+
it 'should raise ArgumentError when id is not provided' do
|
425
|
+
expect { @client.rename_container id: 'id' }.to raise_error(ArgumentError)
|
426
|
+
end
|
427
|
+
|
428
|
+
it 'should raise ArgumentError when name is not provided' do
|
429
|
+
expect { @client.rename_container name: 'name' }.to raise_error(ArgumentError)
|
430
|
+
end
|
431
|
+
|
432
|
+
it 'correct request should be made' do
|
433
|
+
path = @containers_base_path + 'id/rename?name=name'
|
434
|
+
|
435
|
+
stub_request(:post, path)
|
436
|
+
.to_return(body: "")
|
437
|
+
|
438
|
+
@client.rename_container(id: 'id', name: 'name')
|
439
|
+
expect(a_request(:post, path)).to have_been_made
|
440
|
+
end
|
441
|
+
end
|
442
|
+
end
|