tugboat 3.1.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -1
- data/CODE_OF_CONDUCT.md +46 -0
- data/lib/tugboat/cli.rb +7 -1
- data/lib/tugboat/config.rb +11 -1
- data/lib/tugboat/middleware.rb +2 -0
- data/lib/tugboat/middleware/ask_for_credentials.rb +2 -1
- data/lib/tugboat/middleware/base.rb +31 -13
- data/lib/tugboat/middleware/check_snapshot_parameters.rb +16 -0
- data/lib/tugboat/middleware/info_droplet.rb +2 -2
- data/lib/tugboat/middleware/inject_client.rb +10 -1
- data/lib/tugboat/middleware/list_droplets.rb +5 -3
- data/lib/tugboat/version.rb +1 -1
- data/spec/cli/add_key_spec.rb +7 -9
- data/spec/cli/authorize_cli_spec.rb +4 -34
- data/spec/cli/config_cli_spec.rb +10 -5
- data/spec/cli/create_cli_spec.rb +20 -17
- data/spec/cli/debug_cli_spec.rb +11 -12
- data/spec/cli/destroy_cli_spec.rb +35 -12
- data/spec/cli/destroy_image_cli_spec.rb +12 -10
- data/spec/cli/droplets_cli_spec.rb +74 -48
- data/spec/cli/env_variable_spec.rb +4 -4
- data/spec/cli/halt_cli_spec.rb +16 -13
- data/spec/cli/help_cli_spec.rb +4 -4
- data/spec/cli/images_cli_spec.rb +9 -7
- data/spec/cli/info_cli_spec.rb +120 -50
- data/spec/cli/info_image_cli_spec.rb +24 -23
- data/spec/cli/keys_cli_spec.rb +3 -3
- data/spec/cli/password_reset_cli_spec.rb +12 -12
- data/spec/cli/rebuild_cli_spec.rb +31 -24
- data/spec/cli/regions_cli_spec.rb +3 -3
- data/spec/cli/resize_cli_spec.rb +16 -16
- data/spec/cli/restart_cli_spec.rb +32 -11
- data/spec/cli/sizes_cli_spec.rb +3 -3
- data/spec/cli/snapshot_cli_spec.rb +25 -9
- data/spec/cli/ssh_cli_spec.rb +10 -10
- data/spec/cli/start_cli_spec.rb +15 -15
- data/spec/cli/verify_cli_spec.rb +4 -7
- data/spec/cli/version_cli_spec.rb +1 -2
- data/spec/cli/wait_cli_spec.rb +16 -16
- data/spec/config_spec.rb +7 -1
- data/spec/fixtures/show_droplets.json +7 -4
- data/spec/fixtures/show_droplets_paginated_first.json +10 -7
- data/spec/fixtures/show_droplets_paginated_last.json +11 -5
- data/spec/fixtures/show_droplets_private_ip.json +7 -4
- data/spec/middleware/base_spec.rb +1 -2
- data/spec/middleware/check_configuration_spec.rb +1 -1
- data/spec/middleware/check_credentials_spec.rb +1 -1
- data/spec/middleware/check_droplet_active_spec.rb +1 -1
- data/spec/middleware/check_droplet_inactive_spec.rb +1 -1
- data/spec/middleware/find_droplet_spec.rb +3 -5
- data/spec/middleware/find_image_spec.rb +3 -5
- data/spec/middleware/ssh_droplet_spec.rb +5 -10
- data/spec/shared/environment.rb +2 -18
- data/tugboat.gemspec +1 -2
- metadata +8 -6
@@ -18,12 +18,12 @@ describe Tugboat::CLI do
|
|
18
18
|
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
19
19
|
to_return(status: 200, body: fixture('restart_response'), headers: {})
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
expect($stdout.string).to eq <<-eos
|
21
|
+
expected_string = <<-eos
|
24
22
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
25
23
|
Queuing restart for 6918990 (example.com)...Restart complete!
|
26
24
|
eos
|
25
|
+
|
26
|
+
expect { cli.restart('example.com') }.to output(expected_string).to_stdout
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'restarts a droplet hard when the hard option is used' do
|
@@ -41,12 +41,13 @@ Queuing restart for 6918990 (example.com)...Restart complete!
|
|
41
41
|
to_return(status: 200, body: '', headers: {})
|
42
42
|
|
43
43
|
cli.options = cli.options.merge(hard: true)
|
44
|
-
cli.restart('example.com')
|
45
44
|
|
46
|
-
|
45
|
+
expected_string = <<-eos
|
47
46
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
48
47
|
Queuing hard restart for 6918990 (example.com)...Restart complete!
|
49
48
|
eos
|
49
|
+
|
50
|
+
expect { cli.restart('example.com') }.to output(expected_string).to_stdout
|
50
51
|
end
|
51
52
|
|
52
53
|
it 'with an id' do
|
@@ -64,12 +65,13 @@ Queuing hard restart for 6918990 (example.com)...Restart complete!
|
|
64
65
|
to_return(status: 200, body: fixture('restart_response'), headers: {})
|
65
66
|
|
66
67
|
cli.options = cli.options.merge(id: '6918990')
|
67
|
-
cli.restart
|
68
68
|
|
69
|
-
|
69
|
+
expected_string = <<-eos
|
70
70
|
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
71
71
|
Queuing restart for 6918990 (example.com)...Restart complete!
|
72
72
|
eos
|
73
|
+
|
74
|
+
expect { cli.restart }.to output(expected_string).to_stdout
|
73
75
|
end
|
74
76
|
|
75
77
|
it 'with a name' do
|
@@ -86,13 +88,32 @@ Queuing restart for 6918990 (example.com)...Restart complete!
|
|
86
88
|
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
87
89
|
to_return(status: 200, body: fixture('restart_response'), headers: {})
|
88
90
|
|
89
|
-
|
90
|
-
cli.restart
|
91
|
-
|
92
|
-
expect($stdout.string).to eq <<-eos
|
91
|
+
expected_string = <<-eos
|
93
92
|
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
94
93
|
Queuing restart for 6918990 (example.com)...Restart complete!
|
95
94
|
eos
|
95
|
+
|
96
|
+
cli.options = cli.options.merge(name: 'example.com')
|
97
|
+
expect { cli.restart }.to output(expected_string).to_stdout
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'raises SystemExit when a request fails' do
|
101
|
+
stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1').
|
102
|
+
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
103
|
+
to_return(status: 200, body: fixture('show_droplets'), headers: {})
|
104
|
+
|
105
|
+
stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=200').
|
106
|
+
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
107
|
+
to_return(status: 200, body: fixture('show_droplets'), headers: { 'Content-Type' => 'application/json' })
|
108
|
+
|
109
|
+
stub_request(:post, 'https://api.digitalocean.com/v2/droplets/6918990/actions').
|
110
|
+
with(body: '{"type":"reboot"}',
|
111
|
+
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
112
|
+
to_return(headers: { 'Content-Type' => 'application/json' }, status: 500, body: '{"status":"ERROR","message":"Some error"}')
|
113
|
+
|
114
|
+
cli.options = cli.options.merge(name: 'example.com')
|
115
|
+
|
116
|
+
expect { cli.restart }.to raise_error(SystemExit).and output(%r{Failed to restart Droplet: Some error}).to_stdout
|
96
117
|
end
|
97
118
|
end
|
98
119
|
end
|
data/spec/cli/sizes_cli_spec.rb
CHANGED
@@ -9,9 +9,7 @@ describe Tugboat::CLI do
|
|
9
9
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
10
10
|
to_return(headers: { 'Content-Type' => 'application/json' }, status: 200, body: fixture('show_sizes'))
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
expect($stdout.string).to eq <<-eos
|
12
|
+
cli_sizes_output = <<-eos
|
15
13
|
Sizes:
|
16
14
|
Disk: 20GB, Memory: 512MB (slug: 512mb)
|
17
15
|
Disk: 30GB, Memory: 1024MB (slug: 1gb)
|
@@ -23,6 +21,8 @@ Disk: 320GB, Memory: 32768MB (slug: 32gb)
|
|
23
21
|
Disk: 480GB, Memory: 49152MB (slug: 48gb)
|
24
22
|
Disk: 640GB, Memory: 65536MB (slug: 64gb)
|
25
23
|
eos
|
24
|
+
|
25
|
+
expect { cli.sizes }.to output(cli_sizes_output).to_stdout
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -6,6 +6,19 @@ describe Tugboat::CLI do
|
|
6
6
|
let(:snapshot_name) { 'foo-snapshot' }
|
7
7
|
|
8
8
|
describe 'snapshots a droplet' do
|
9
|
+
it 'without a droplet parameter' do
|
10
|
+
stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1').
|
11
|
+
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
12
|
+
to_return(status: 200, body: fixture('show_droplets'), headers: {})
|
13
|
+
|
14
|
+
snapshot_no_droplet_parameter_stdout = <<-eos
|
15
|
+
You must provide a snapshot name followed by the droplet's name.
|
16
|
+
For example: `tugboat snapshot foo-snapshot example-node.com`
|
17
|
+
eos
|
18
|
+
|
19
|
+
expect { cli.snapshot(snapshot_name) }.to raise_error(SystemExit).and output(snapshot_no_droplet_parameter_stdout).to_stdout
|
20
|
+
end
|
21
|
+
|
9
22
|
it 'with a fuzzy name' do
|
10
23
|
stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1').
|
11
24
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
@@ -20,13 +33,13 @@ describe Tugboat::CLI do
|
|
20
33
|
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
21
34
|
to_return(status: 200, body: fixture('snapshot_response'), headers: {})
|
22
35
|
|
23
|
-
|
24
|
-
|
25
|
-
expect($stdout.string).to eq <<-eos
|
36
|
+
snapshot_fuzzy_stdout = <<-eos
|
26
37
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
27
38
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
28
39
|
Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful!
|
29
40
|
eos
|
41
|
+
|
42
|
+
expect { cli.snapshot(snapshot_name, 'example3.com') }.to output(snapshot_fuzzy_stdout).to_stdout
|
30
43
|
end
|
31
44
|
|
32
45
|
it 'with an id' do
|
@@ -44,13 +57,14 @@ Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful
|
|
44
57
|
to_return(status: 200, body: fixture('snapshot_response'), headers: {})
|
45
58
|
|
46
59
|
cli.options = cli.options.merge(id: '3164444')
|
47
|
-
cli.snapshot(snapshot_name)
|
48
60
|
|
49
|
-
|
61
|
+
snapshot_id_stdout = <<-eos
|
50
62
|
Droplet id provided. Finding Droplet...done\e[0m, 3164494 (example.com)
|
51
63
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
52
64
|
Queuing snapshot 'foo-snapshot' for 3164494 (example.com)...Snapshot successful!
|
53
65
|
eos
|
66
|
+
|
67
|
+
expect { cli.snapshot(snapshot_name) }.to output(snapshot_id_stdout).to_stdout
|
54
68
|
end
|
55
69
|
|
56
70
|
it 'with a name' do
|
@@ -68,13 +82,14 @@ Queuing snapshot 'foo-snapshot' for 3164494 (example.com)...Snapshot successful!
|
|
68
82
|
to_return(status: 200, body: fixture('snapshot_response'), headers: {})
|
69
83
|
|
70
84
|
cli.options = cli.options.merge(name: 'example3.com')
|
71
|
-
cli.snapshot(snapshot_name)
|
72
85
|
|
73
|
-
|
86
|
+
snapshot_name_stdout = <<-eos
|
74
87
|
Droplet name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
75
88
|
Warning: Droplet must be in a powered off state for snapshot to be successful
|
76
89
|
Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful!
|
77
90
|
eos
|
91
|
+
|
92
|
+
expect { cli.snapshot(snapshot_name) }.to output(snapshot_name_stdout).to_stdout
|
78
93
|
end
|
79
94
|
|
80
95
|
it 'does not snapshot a droplet that is active' do
|
@@ -87,12 +102,13 @@ Queuing snapshot 'foo-snapshot' for 3164444 (example3.com)...Snapshot successful
|
|
87
102
|
to_return(status: 200, body: fixture('show_droplets'), headers: {})
|
88
103
|
|
89
104
|
cli.options = cli.options.merge(name: 'example.com')
|
90
|
-
expect { cli.snapshot(snapshot_name) }.to raise_error(SystemExit)
|
91
105
|
|
92
|
-
|
106
|
+
snapshot_active_error_stdout = <<-eos
|
93
107
|
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
94
108
|
Droplet must be off for this operation to be successful.
|
95
109
|
eos
|
110
|
+
|
111
|
+
expect { cli.snapshot(snapshot_name) }.to raise_error(SystemExit).and output(snapshot_active_error_stdout).to_stdout
|
96
112
|
end
|
97
113
|
end
|
98
114
|
end
|
data/spec/cli/ssh_cli_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe Tugboat::CLI do
|
|
13
13
|
to_return(headers: { 'Content-Type' => 'application/json' }, status: 200, body: fixture('show_droplets'))
|
14
14
|
allow(Kernel).to receive(:exec).with('ssh', anything, anything, anything, anything, anything, anything, anything, anything, anything, anything, anything, anything, anything)
|
15
15
|
|
16
|
-
cli.ssh('example.com')
|
16
|
+
expect { cli.ssh('example.com') }.to output(%r{Attempting SSH: baz@104.236.32.182}).to_stdout
|
17
17
|
end
|
18
18
|
|
19
19
|
it "wait's until droplet active if -w command is given and droplet already active" do
|
@@ -31,9 +31,7 @@ describe Tugboat::CLI do
|
|
31
31
|
|
32
32
|
cli.options = cli.options.merge(wait: true)
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
expect($stdout.string).to eq <<-eos
|
34
|
+
expected_string = <<-eos
|
37
35
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
38
36
|
Executing SSH on Droplet (example.com)...
|
39
37
|
Wait flag given, waiting for droplet to become active
|
@@ -41,6 +39,8 @@ Wait flag given, waiting for droplet to become active
|
|
41
39
|
Attempting SSH: baz@104.236.32.182
|
42
40
|
SShing with options: -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i #{Dir.home}/.ssh/id_rsa2 -p 33 baz@104.236.32.182
|
43
41
|
eos
|
42
|
+
|
43
|
+
expect { cli.ssh('example.com') }.to output(expected_string).to_stdout
|
44
44
|
end
|
45
45
|
|
46
46
|
it "wait's until droplet active if -w command is given and droplet eventually active" do
|
@@ -61,9 +61,7 @@ SShing with options: -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownH
|
|
61
61
|
|
62
62
|
cli.options = cli.options.merge(wait: true)
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
expect($stdout.string).to eq <<-eos
|
64
|
+
expected_string = <<-eos
|
67
65
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
68
66
|
Executing SSH on Droplet (example.com)...
|
69
67
|
Wait flag given, waiting for droplet to become active
|
@@ -71,6 +69,8 @@ Wait flag given, waiting for droplet to become active
|
|
71
69
|
Attempting SSH: baz@104.236.32.182
|
72
70
|
SShing with options: -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i #{Dir.home}/.ssh/id_rsa2 -p 33 baz@104.236.32.182
|
73
71
|
eos
|
72
|
+
|
73
|
+
expect { cli.ssh('example.com') }.to output(expected_string).to_stdout
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'does not allow ssh into a droplet that is inactive' do
|
@@ -82,12 +82,12 @@ SShing with options: -o LogLevel=ERROR -o StrictHostKeyChecking=no -o UserKnownH
|
|
82
82
|
to_return(headers: { 'Content-Type' => 'application/json' }, status: 200, body: fixture('show_droplets'))
|
83
83
|
allow(Kernel).to receive(:exec)
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
expect($stdout.string).to eq <<-eos
|
85
|
+
expected_string = <<-eos
|
88
86
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
89
87
|
Droplet must be on for this operation to be successful.
|
90
88
|
eos
|
89
|
+
|
90
|
+
expect { expect { cli.ssh('example3.com') }.to raise_error(SystemExit) }.to output(expected_string).to_stdout
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
data/spec/cli/start_cli_spec.rb
CHANGED
@@ -18,12 +18,12 @@ describe Tugboat::CLI do
|
|
18
18
|
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
19
19
|
to_return(status: 200, body: fixture('droplet_start_response'), headers: {})
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
expect($stdout.string).to eq <<-eos
|
21
|
+
expected_string = <<-eos
|
24
22
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
25
23
|
Queuing start for 3164444 (example3.com)...Start complete!
|
26
24
|
eos
|
25
|
+
|
26
|
+
expect { cli.start('example3.com') }.to output(expected_string).to_stdout
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'starts the droplet with an id' do
|
@@ -39,13 +39,13 @@ Queuing start for 3164444 (example3.com)...Start complete!
|
|
39
39
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
40
40
|
to_return(headers: { 'Content-Type' => 'application/json' }, status: 200, body: fixture('show_droplet_inactive'))
|
41
41
|
|
42
|
-
|
43
|
-
cli.start
|
44
|
-
|
45
|
-
expect($stdout.string).to eq <<-eos
|
42
|
+
expected_string = <<-eos
|
46
43
|
Droplet id provided. Finding Droplet...done\e[0m, 3164494 (example.com)
|
47
44
|
Queuing start for 3164494 (example.com)...Start complete!
|
48
45
|
eos
|
46
|
+
|
47
|
+
cli.options = cli.options.merge(id: '3164494')
|
48
|
+
expect { cli.start }.to output(expected_string).to_stdout
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'starts the droplet with a name' do
|
@@ -62,13 +62,13 @@ Queuing start for 3164494 (example.com)...Start complete!
|
|
62
62
|
headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
63
63
|
to_return(status: 200, body: fixture('droplet_start_response'), headers: {})
|
64
64
|
|
65
|
-
|
66
|
-
cli.start
|
67
|
-
|
68
|
-
expect($stdout.string).to eq <<-eos
|
65
|
+
expected_string = <<-eos
|
69
66
|
Droplet name provided. Finding droplet ID...done\e[0m, 3164444 (example3.com)
|
70
67
|
Queuing start for 3164444 (example3.com)...Start complete!
|
71
68
|
eos
|
69
|
+
|
70
|
+
cli.options = cli.options.merge(name: 'example3.com')
|
71
|
+
expect { cli.start }.to output(expected_string).to_stdout
|
72
72
|
end
|
73
73
|
|
74
74
|
it 'does not start a droplet that is inactive' do
|
@@ -80,13 +80,13 @@ Queuing start for 3164444 (example3.com)...Start complete!
|
|
80
80
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
81
81
|
to_return(status: 200, body: fixture('show_droplets'), headers: {})
|
82
82
|
|
83
|
-
|
84
|
-
expect { cli.start }.to raise_error(SystemExit)
|
85
|
-
|
86
|
-
expect($stdout.string).to eq <<-eos
|
83
|
+
expected_string = <<-eos
|
87
84
|
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
88
85
|
Droplet must be off for this operation to be successful.
|
89
86
|
eos
|
87
|
+
|
88
|
+
cli.options = cli.options.merge(name: 'example.com')
|
89
|
+
expect { cli.start }.to raise_error(SystemExit).and output(expected_string).to_stdout
|
90
90
|
end
|
91
91
|
end
|
92
92
|
end
|
data/spec/cli/verify_cli_spec.rb
CHANGED
@@ -9,8 +9,7 @@ describe Tugboat::CLI do
|
|
9
9
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
10
10
|
to_return(status: 200, body: fixture('show_droplets'), headers: {})
|
11
11
|
|
12
|
-
cli.verify
|
13
|
-
expect($stdout.string).to eq "Authentication with DigitalOcean was successful.\n"
|
12
|
+
expect { cli.verify }.to output("Authentication with DigitalOcean was successful.\n").to_stdout
|
14
13
|
expect(a_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1')).to have_been_made
|
15
14
|
end
|
16
15
|
|
@@ -19,8 +18,7 @@ describe Tugboat::CLI do
|
|
19
18
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
20
19
|
to_return(headers: { 'Content-Type' => 'text/html' }, status: 401, body: fixture('401'))
|
21
20
|
|
22
|
-
expect { cli.verify }.to raise_error(SystemExit)
|
23
|
-
expect($stdout.string).to include 'Failed to connect to DigitalOcean. Reason given from API: unauthorized - Unable to authenticate you.'
|
21
|
+
expect { cli.verify }.to raise_error(SystemExit).and output(%r{Failed to connect to DigitalOcean. Reason given from API: unauthorized - Unable to authenticate you.}).to_stdout
|
24
22
|
expect(a_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1')).to have_been_made
|
25
23
|
end
|
26
24
|
|
@@ -29,9 +27,8 @@ describe Tugboat::CLI do
|
|
29
27
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
30
28
|
to_return(headers: { 'Content-Type' => 'text/html' }, status: 500, body: fixture('500', 'html'))
|
31
29
|
|
32
|
-
expect { cli.verify }.to raise_error(SystemExit)
|
33
|
-
|
34
|
-
expect($stdout.string).to include "<title>DigitalOcean - Seems we've encountered a problem!</title>"
|
30
|
+
expect { cli.verify }.to raise_error(SystemExit).and output(%r{<title>DigitalOcean - Seems we've encountered a problem!}).to_stdout
|
31
|
+
|
35
32
|
# TODO: Make it so this doesnt barf up a huge HTML file...
|
36
33
|
expect(a_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1')).to have_been_made
|
37
34
|
end
|
@@ -6,9 +6,8 @@ describe Tugboat::CLI do
|
|
6
6
|
describe 'version' do
|
7
7
|
it 'shows the correct version' do
|
8
8
|
cli.options = cli.options.merge(version: true)
|
9
|
-
cli.version
|
10
9
|
|
11
|
-
expect
|
10
|
+
expect { cli.version }.to output("Tugboat #{Tugboat::VERSION}\n").to_stdout
|
12
11
|
end
|
13
12
|
end
|
14
13
|
end
|
data/spec/cli/wait_cli_spec.rb
CHANGED
@@ -17,13 +17,13 @@ describe Tugboat::CLI do
|
|
17
17
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
18
18
|
to_return(status: 200, body: fixture('show_droplet'), headers: {})
|
19
19
|
|
20
|
-
|
21
|
-
cli.wait('example.com')
|
22
|
-
|
23
|
-
expect($stdout.string).to eq <<-eos
|
20
|
+
expected_string = <<-eos
|
24
21
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
25
22
|
Waiting for droplet to become active..done\e[0m (0s)
|
26
23
|
eos
|
24
|
+
|
25
|
+
cli.options = cli.options.merge(state: 'active')
|
26
|
+
expect { cli.wait('example.com') }.to output(expected_string).to_stdout
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'loops whilst it waits for state' do
|
@@ -42,13 +42,13 @@ eos
|
|
42
42
|
status: 200, body: fixture('show_droplet'), headers: {}
|
43
43
|
)
|
44
44
|
|
45
|
-
|
46
|
-
cli.wait('example.com')
|
47
|
-
|
48
|
-
expect($stdout.string).to eq <<-eos
|
45
|
+
expected_string = <<-eos
|
49
46
|
Droplet fuzzy name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
50
47
|
Waiting for droplet to become active...done\e[0m (2s)
|
51
48
|
eos
|
49
|
+
|
50
|
+
cli.options = cli.options.merge(state: 'active')
|
51
|
+
expect { cli.wait('example.com') }.to output(expected_string).to_stdout
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'waits for a droplet with an id' do
|
@@ -60,13 +60,13 @@ eos
|
|
60
60
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
61
61
|
to_return(status: 200, body: fixture('show_droplet'), headers: {})
|
62
62
|
|
63
|
-
|
64
|
-
cli.wait
|
65
|
-
|
66
|
-
expect($stdout.string).to eq <<-eos
|
63
|
+
expected_string = <<-eos
|
67
64
|
Droplet id provided. Finding Droplet...done\e[0m, 6918990 (example.com)
|
68
65
|
Waiting for droplet to become active..done\e[0m (0s)
|
69
66
|
eos
|
67
|
+
|
68
|
+
cli.options = cli.options.merge(id: '6918990', state: 'active')
|
69
|
+
expect { cli.wait }.to output(expected_string).to_stdout
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'waits for a droplet with a name' do
|
@@ -82,13 +82,13 @@ Waiting for droplet to become active..done\e[0m (0s)
|
|
82
82
|
with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.9.2' }).
|
83
83
|
to_return(status: 200, body: fixture('show_droplet'), headers: {})
|
84
84
|
|
85
|
-
|
86
|
-
cli.wait
|
87
|
-
|
88
|
-
expect($stdout.string).to eq <<-eos
|
85
|
+
expected_string = <<-eos
|
89
86
|
Droplet name provided. Finding droplet ID...done\e[0m, 6918990 (example.com)
|
90
87
|
Waiting for droplet to become active..done\e[0m (0s)
|
91
88
|
eos
|
89
|
+
|
90
|
+
cli.options = cli.options.merge(name: 'example.com', state: 'active')
|
91
|
+
expect { cli.wait }.to output(expected_string).to_stdout
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -34,12 +34,13 @@ describe Tugboat::Configuration do
|
|
34
34
|
let(:private_networking) { 'false' }
|
35
35
|
let(:backups_enabled) { 'false' }
|
36
36
|
let(:ip6) { 'false' }
|
37
|
+
let(:timeout) { '30' }
|
37
38
|
|
38
39
|
let(:config) { described_class.instance }
|
39
40
|
|
40
41
|
before do
|
41
42
|
# Create a temporary file
|
42
|
-
config.create_config_file(access_token, ssh_key_path, ssh_user, ssh_port, region, image, size, ssh_key_id, private_networking, backups_enabled, ip6)
|
43
|
+
config.create_config_file(access_token, ssh_key_path, ssh_user, ssh_port, region, image, size, ssh_key_id, private_networking, backups_enabled, ip6, timeout)
|
43
44
|
end
|
44
45
|
|
45
46
|
it 'can be created' do
|
@@ -91,6 +92,11 @@ describe Tugboat::Configuration do
|
|
91
92
|
backups_enabled = data['defaults']
|
92
93
|
expect(backups_enabled).to have_key('backups_enabled')
|
93
94
|
end
|
95
|
+
|
96
|
+
it 'has timeout set' do
|
97
|
+
timeout_set = data['connection']
|
98
|
+
expect(timeout_set).to have_key('timeout')
|
99
|
+
end
|
94
100
|
end
|
95
101
|
describe 'backwards compatible' do
|
96
102
|
let(:client_key) { 'foo' }
|