profitbricks-sdk-ruby 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +202 -0
  5. data/README.md +44 -0
  6. data/Rakefile +7 -0
  7. data/docs/guide.md +223 -0
  8. data/docs/reference.md +376 -0
  9. data/lib/profitbricks/config.rb +30 -0
  10. data/lib/profitbricks/datacenter.rb +113 -0
  11. data/lib/profitbricks/firewall.rb +65 -0
  12. data/lib/profitbricks/image.rb +51 -0
  13. data/lib/profitbricks/ipblock.rb +74 -0
  14. data/lib/profitbricks/lan.rb +75 -0
  15. data/lib/profitbricks/loadbalancer.rb +126 -0
  16. data/lib/profitbricks/location.rb +28 -0
  17. data/lib/profitbricks/model.rb +116 -0
  18. data/lib/profitbricks/nic.rb +86 -0
  19. data/lib/profitbricks/profitbricks.rb +137 -0
  20. data/lib/profitbricks/request.rb +36 -0
  21. data/lib/profitbricks/server.rb +165 -0
  22. data/lib/profitbricks/snapshot.rb +78 -0
  23. data/lib/profitbricks/version.rb +3 -0
  24. data/lib/profitbricks/volume.rb +199 -0
  25. data/lib/profitbricks/wait_for.rb +16 -0
  26. data/lib/profitbricks.rb +24 -0
  27. data/profitbricks-sdk-ruby.gemspec +26 -0
  28. data/spec/datacenter_spec.rb +230 -0
  29. data/spec/firewall_spec.rb +95 -0
  30. data/spec/image_spec.rb +49 -0
  31. data/spec/ipblock_spec.rb +52 -0
  32. data/spec/lan_spec.rb +70 -0
  33. data/spec/loadbalancer_spec.rb +117 -0
  34. data/spec/location_spec.rb +20 -0
  35. data/spec/nic_spec.rb +88 -0
  36. data/spec/profitbricks_spec.rb +1 -0
  37. data/spec/request_spec.rb +37 -0
  38. data/spec/server_spec.rb +209 -0
  39. data/spec/snapshot_spec.rb +113 -0
  40. data/spec/spec_helper.rb +18 -0
  41. data/spec/support/resource_helper.rb +64 -0
  42. data/spec/volume_spec.rb +113 -0
  43. metadata +172 -0
@@ -0,0 +1,230 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::Datacenter do
4
+ before(:all) do
5
+ @datacenter = ProfitBricks::Datacenter.create(options[:datacenter])
6
+ @datacenter.wait_for { ready? }
7
+
8
+ @server = @datacenter.create_server(options[:server])
9
+ @server.wait_for { ready? }
10
+
11
+ @volume = @datacenter.create_volume(options[:volume])
12
+ @volume.wait_for { ready? }
13
+
14
+ @loadbalancer = @datacenter.create_loadbalancer(options[:loadbalancer])
15
+ @loadbalancer.wait_for { ready? }
16
+
17
+ @lan = @datacenter.create_lan(options[:lan])
18
+ @lan.wait_for { ready? }
19
+ end
20
+
21
+ after(:all) do
22
+ @datacenter.delete
23
+ end
24
+
25
+ it '#create' do
26
+ expect(@datacenter.type).to eq('datacenter')
27
+ expect(@datacenter.id).to match(
28
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
29
+ )
30
+ expect(@datacenter.properties['name']).to eq('My New Datacenter')
31
+ expect(@datacenter.properties['description']).to eq('Production environment')
32
+ expect(@datacenter.properties['location']).to eq('de/fkb')
33
+ end
34
+
35
+ it '#list' do
36
+ datacenters = ProfitBricks::Datacenter.list
37
+
38
+ expect(datacenters.count).to be > 0
39
+ expect(datacenters[0].type).to eq('datacenter')
40
+ expect(datacenters[0].id).to match(
41
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
42
+ )
43
+ end
44
+
45
+ it '#get' do
46
+ datacenter = ProfitBricks::Datacenter.get(@datacenter.id)
47
+
48
+ expect(datacenter.type).to eq('datacenter')
49
+ expect(datacenter.id).to eq(@datacenter.id)
50
+ expect(datacenter.properties['name']).to eq('My New Datacenter')
51
+ expect(datacenter.properties['description']).to eq('Production environment')
52
+ expect(datacenter.properties['location']).to eq('de/fkb')
53
+ expect(datacenter.properties['version']).to be_kind_of(Integer)
54
+ end
55
+
56
+ it '#update' do
57
+ datacenter = ProfitBricks::Datacenter.get(@datacenter.id)
58
+ datacenter.update(name: 'datacenter1', description: 'Production environment')
59
+
60
+ expect(datacenter.id).to eq(@datacenter.id)
61
+ expect(datacenter.properties['name']).to eq('datacenter1')
62
+ expect(datacenter.properties['description']).to eq('Production environment')
63
+ expect(datacenter.properties['location']).to eq('de/fkb')
64
+ expect(datacenter.properties['version']).to be_kind_of(Integer)
65
+ end
66
+
67
+ it '#delete' do
68
+ datacenter = ProfitBricks::Datacenter.create(options[:datacenter])
69
+ datacenter.wait_for { ready? }
70
+
71
+ expect(datacenter.delete).to be_kind_of(Hash)
72
+ expect(datacenter.wait_for { ready? }).to be_kind_of(Hash)
73
+ end
74
+
75
+ it '#list_servers' do
76
+ servers = @datacenter.list_servers
77
+
78
+ expect(servers[0].type).to eq('server')
79
+ expect(servers[0].id).to match(
80
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
81
+ )
82
+ expect(servers[0].properties['name']).to eq('New Server')
83
+ expect(servers[0].properties['cores']).to be_kind_of(Integer)
84
+ expect(servers[0].properties['ram']).to eq(1024)
85
+ expect(servers[0].properties['availabilityZone']).to eq('AUTO')
86
+ expect(servers[0].properties['vmState']).to eq('RUNNING')
87
+ expect(servers[0].properties['bootVolume']).to be nil
88
+ expect(servers[0].properties['bootCdrom']).to be nil
89
+ end
90
+
91
+ it '#get_server' do
92
+ server = @datacenter.get_server(@server.id)
93
+
94
+ expect(server.type).to eq('server')
95
+ expect(server.id).to match(
96
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
97
+ )
98
+ expect(server.properties['name']).to eq('New Server')
99
+ expect(server.properties['cores']).to be_kind_of(Integer)
100
+ expect(server.properties['ram']).to eq(1024)
101
+ expect(server.properties['availabilityZone']).to eq('AUTO')
102
+ expect(server.properties['vmState']).to eq('RUNNING')
103
+ expect(server.properties['bootVolume']).to be nil
104
+ expect(server.properties['bootCdrom']).to be nil
105
+ end
106
+
107
+ it '#create_server' do
108
+ server = @datacenter.get_server(@server.id)
109
+
110
+ expect(server.type).to eq('server')
111
+ expect(server.id).to eq(@server.id)
112
+ expect(server.properties['name']).to eq('New Server')
113
+ expect(server.properties['cores']).to be_kind_of(Integer)
114
+ expect(server.properties['ram']).to eq(1024)
115
+ expect(server.properties['availabilityZone']).to eq('AUTO')
116
+ expect(server.properties['vmState']).to eq('RUNNING')
117
+ expect(server.properties['bootVolume']).to be nil
118
+ expect(server.properties['bootCdrom']).to be nil
119
+ end
120
+
121
+ it '#list_volumes' do
122
+ volumes = @datacenter.list_volumes
123
+
124
+ expect(volumes[0].type).to eq('volume')
125
+ expect(volumes[0].id).to match(
126
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
127
+ )
128
+ expect(volumes[0].properties['name']).to eq('my boot volume for server 1')
129
+ expect(volumes[0].properties['size']).to eq(10)
130
+ expect(volumes[0].properties['bus']).to be nil
131
+ expect(volumes[0].properties['image']).to be nil
132
+ expect(volumes[0].properties['imagePassword']).to be nil
133
+ expect(volumes[0].properties['type']).to eq('HDD')
134
+ expect(volumes[0].properties['discVirtioHotPlug']).to be false
135
+ expect(volumes[0].properties['discVirtioHotUnplug']).to be false
136
+ end
137
+
138
+ it '#get_volume' do
139
+ volume = @datacenter.get_volume(@volume.id)
140
+
141
+ expect(volume.type).to eq('volume')
142
+ expect(volume.id).to match(
143
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
144
+ )
145
+ expect(volume.properties['name']).to eq('my boot volume for server 1')
146
+ expect(volume.properties['size']).to eq(10)
147
+ expect(volume.properties['bus']).to be nil
148
+ expect(volume.properties['image']).to be nil
149
+ expect(volume.properties['imagePassword']).to be nil
150
+ expect(volume.properties['type']).to eq('HDD')
151
+ expect(volume.properties['discVirtioHotPlug']).to be false
152
+ expect(volume.properties['discVirtioHotUnplug']).to be false
153
+ end
154
+
155
+ it '#create_volume' do
156
+ # Tests should pass as volume as already been created.
157
+ volume = @datacenter.get_volume(@volume.id)
158
+
159
+ expect(volume.type).to eq('volume')
160
+ expect(volume.id).to match(
161
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
162
+ )
163
+ expect(volume.properties['name']).to eq('my boot volume for server 1')
164
+ expect(volume.properties['size']).to eq(10)
165
+ expect(volume.properties['bus']).to be nil
166
+ expect(volume.properties['image']).to be nil
167
+ expect(volume.properties['imagePassword']).to be nil
168
+ expect(volume.properties['type']).to eq('HDD')
169
+ expect(volume.properties['discVirtioHotPlug']).to be false
170
+ expect(volume.properties['discVirtioHotUnplug']).to be false
171
+ end
172
+
173
+ it '#list_loadbalancers' do
174
+ loadbalancers = @datacenter.list_loadbalancers
175
+
176
+ expect(loadbalancers[0].type).to eq('loadbalancer')
177
+ expect(loadbalancers[0].id).to be_kind_of(String)
178
+ expect(loadbalancers[0].properties['name']).to eq('My LB')
179
+ expect(loadbalancers[0].properties['ip']).to be nil
180
+ expect(loadbalancers[0].properties['dhcp']).to be true
181
+ end
182
+
183
+ it '#get_loadbalancer' do
184
+ loadbalancer = @datacenter.get_loadbalancer(@loadbalancer.id)
185
+
186
+ expect(loadbalancer.type).to eq('loadbalancer')
187
+ expect(loadbalancer.id).to be_kind_of(String)
188
+ expect(loadbalancer.properties['name']).to eq('My LB')
189
+ expect(loadbalancer.properties['ip']).to be nil
190
+ expect(loadbalancer.properties['dhcp']).to be true
191
+ end
192
+
193
+ it '#create_loadbalancer' do
194
+ # Tests should pass as the loadbalancer has already been created.
195
+ loadbalancer = @datacenter.get_loadbalancer(@loadbalancer.id)
196
+
197
+ expect(loadbalancer.type).to eq('loadbalancer')
198
+ expect(loadbalancer.id).to be_kind_of(String)
199
+ expect(loadbalancer.properties['name']).to eq('My LB')
200
+ expect(loadbalancer.properties['ip']).to be nil
201
+ expect(loadbalancer.properties['dhcp']).to be true
202
+ end
203
+
204
+ it '#list_lans' do
205
+ lans = @datacenter.list_lans
206
+
207
+ expect(lans[0].type).to eq('lan')
208
+ expect(lans[0].id).to match(/^\d+$/)
209
+ expect(lans[0].properties['name']).to eq('Switch for LAN 0')
210
+ expect(lans[0].properties['public']).to be false
211
+ end
212
+
213
+ it '#get_lan' do
214
+ lan = @datacenter.get_lan(@lan.id)
215
+
216
+ expect(lan.type).to eq('lan')
217
+ expect(lan.id).to match(/^\d+$/)
218
+ expect(lan.properties['name']).to eq('public Lan 4')
219
+ expect(lan.properties['public']).to be true
220
+ end
221
+
222
+ it '#create_lan' do
223
+ lan = @datacenter.get_lan(@lan.id)
224
+
225
+ expect(lan.type).to eq('lan')
226
+ expect(lan.id).to match(/^\d+$/)
227
+ expect(lan.properties['name']).to eq('public Lan 4')
228
+ expect(lan.properties['public']).to be true
229
+ end
230
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::Firewall do
4
+ before(:all) do
5
+ @datacenter = ProfitBricks::Datacenter.create(options[:datacenter])
6
+ @datacenter.wait_for { ready? }
7
+
8
+ @server = ProfitBricks::Server.create(@datacenter.id, options[:server])
9
+ @server.wait_for { ready? }
10
+
11
+ @nic = ProfitBricks::NIC.create(@datacenter.id, @server.id, options[:nic])
12
+ @nic.wait_for { ready? }
13
+
14
+ @fwrule = ProfitBricks::Firewall.create(@datacenter.id, @server.id, @nic.id, options[:fwrule])
15
+ @fwrule.wait_for { ready? }
16
+ end
17
+
18
+ after(:all) do
19
+ @datacenter.delete
20
+ end
21
+
22
+ it '#create' do
23
+ expect(@fwrule.type).to eq('firewall-rule')
24
+ expect(@fwrule.id).to be_kind_of(String)
25
+ expect(@fwrule.properties['name']).to eq('Open SSH port')
26
+ expect(@fwrule.properties['protocol']).to eq('TCP')
27
+ expect(@fwrule.properties['sourceMac']).to eq('01:23:45:67:89:00')
28
+ expect(@fwrule.properties['sourceIp']).to be nil
29
+ expect(@fwrule.properties['targetIp']).to be nil
30
+ expect(@fwrule.properties['portRangeStart']).to eq(22)
31
+ expect(@fwrule.properties['portRangeEnd']).to eq(22)
32
+ expect(@fwrule.properties['icmpType']).to be nil
33
+ expect(@fwrule.properties['icmpCode']).to be nil
34
+ end
35
+
36
+ it '#list' do
37
+ fwrules = ProfitBricks::Firewall.list(@datacenter.id, @server.id, @nic.id)
38
+
39
+ expect(fwrules.count).to be > 0
40
+ expect(fwrules[0].type).to eq('firewall-rule')
41
+ expect(fwrules[0].id).to eq(@fwrule.id)
42
+ expect(fwrules[0].properties['name']).to eq('Open SSH port')
43
+ expect(fwrules[0].properties['protocol']).to eq('TCP')
44
+ expect(fwrules[0].properties['sourceMac']).to eq('01:23:45:67:89:00')
45
+ expect(fwrules[0].properties['sourceIp']).to be nil
46
+ expect(fwrules[0].properties['targetIp']).to be nil
47
+ expect(fwrules[0].properties['portRangeStart']).to eq(22)
48
+ expect(fwrules[0].properties['portRangeEnd']).to eq(22)
49
+ expect(fwrules[0].properties['icmpType']).to be nil
50
+ expect(fwrules[0].properties['icmpCode']).to be nil
51
+ end
52
+
53
+ it '#get' do
54
+ fwrule = ProfitBricks::Firewall.get(@datacenter.id, @server.id, @nic.id, @fwrule.id)
55
+
56
+ expect(fwrule.type).to eq('firewall-rule')
57
+ expect(fwrule.id).to eq(@fwrule.id)
58
+ expect(fwrule.properties['name']).to eq('Open SSH port')
59
+ expect(fwrule.properties['protocol']).to eq('TCP')
60
+ expect(fwrule.properties['sourceMac']).to eq('01:23:45:67:89:00')
61
+ expect(fwrule.properties['sourceIp']).to be nil
62
+ expect(fwrule.properties['targetIp']).to be nil
63
+ expect(fwrule.properties['portRangeStart']).to eq(22)
64
+ expect(fwrule.properties['portRangeEnd']).to eq(22)
65
+ expect(fwrule.properties['icmpType']).to be nil
66
+ expect(fwrule.properties['icmpCode']).to be nil
67
+ end
68
+
69
+ it '#update' do
70
+ fwrule = @fwrule.update(
71
+ sourceMac: '01:98:22:22:44:22',
72
+ targetIp: '123.100.101.102'
73
+ )
74
+ fwrule.wait_for { ready? }
75
+
76
+ expect(fwrule.type).to eq('firewall-rule')
77
+ expect(fwrule.id).to eq(@fwrule.id)
78
+ expect(fwrule.properties['name']).to eq('Open SSH port')
79
+ expect(fwrule.properties['protocol']).to eq('TCP')
80
+ expect(fwrule.properties['sourceMac']).to eq('01:98:22:22:44:22')
81
+ expect(fwrule.properties['sourceIp']).to be nil
82
+ expect(fwrule.properties['targetIp']).to eq('123.100.101.102')
83
+ expect(fwrule.properties['portRangeStart']).to eq(22)
84
+ expect(fwrule.properties['portRangeEnd']).to eq(22)
85
+ expect(fwrule.properties['icmpType']).to be nil
86
+ expect(fwrule.properties['icmpCode']).to be nil
87
+ end
88
+
89
+ it '#delete' do
90
+ fwrule = ProfitBricks::Firewall.create(@datacenter.id, @server.id, @nic.id, options[:fwrule])
91
+ fwrule.wait_for { ready? }
92
+
93
+ expect(fwrule.delete).to have_key(:requestId)
94
+ end
95
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::Image do
4
+ before(:all) do
5
+ @images = ProfitBricks::Image.list
6
+ end
7
+
8
+ it '#list' do
9
+ expect(@images.count).to be > 0
10
+ expect(@images[0].type).to eq('image')
11
+ expect(@images[0].id).to be_kind_of(String)
12
+ expect(@images[0].properties['name']).to be_kind_of(String)
13
+ expect(@images[0].properties['description']).to be nil
14
+ expect(@images[0].properties['location']).to match(/\w+\/\w+/)
15
+ expect(@images[0].properties['size']).to be_kind_of(Integer)
16
+ end
17
+
18
+ it '#get' do
19
+ image = ProfitBricks::Image.get(@images[0].id)
20
+
21
+ expect(image.type).to eq('image')
22
+ expect(image.id).to be_kind_of(String)
23
+ expect(image.properties['name']).to be_kind_of(String)
24
+ expect(image.properties['description']).to be nil
25
+ expect(image.properties['location']).to match(/\w+\/\w+/)
26
+ expect(image.properties['size']).to be_kind_of(Integer)
27
+ end
28
+
29
+ # Unable to test in production due to public images.
30
+ #
31
+ # it '#update' do
32
+ # image = @images[0]
33
+ # image = image.update(name: 'New name')
34
+ #
35
+ # expect(image.type).to eq('image')
36
+ # expect(image.id).to be_kind_of(String)
37
+ # expect(image.properties['name']).to eq('New name')
38
+ # expect(image.properties['description']).to be nil
39
+ # expect(image.properties['location']).to match(/\w+\/\w+/)
40
+ # expect(image.properties['size']).to be_kind_of(Integer)
41
+ # end
42
+
43
+ # Unable to test in production at the moment. Images must be uploaded
44
+ # via FTP in production before a delete can be performed.
45
+ #
46
+ # it '#delete' do
47
+ # skip 'Not sure how to test against production API.'
48
+ # end
49
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::IPBlock do
4
+ before(:all) do
5
+ @ipblock = ProfitBricks::IPBlock.reserve(options[:ipblock])
6
+ end
7
+
8
+ after(:all) do
9
+ @ipblock.release
10
+ end
11
+
12
+ # alias: create
13
+ it '#reserve' do
14
+ expect(@ipblock.type).to eq('ipblock')
15
+ expect(@ipblock.id).to match(
16
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
17
+ )
18
+ expect(@ipblock.properties['ips'].count).to be > 0
19
+ expect(@ipblock.properties['location']).to eq('de/fra')
20
+ expect(@ipblock.properties['size']).to eq(1)
21
+ end
22
+
23
+ it '#list' do
24
+ ipblocks = ProfitBricks::IPBlock.list
25
+
26
+ expect(ipblocks.count).to be > 0
27
+ expect(ipblocks[0].type).to eq('ipblock')
28
+ expect(ipblocks[0].id).to match(
29
+ /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i
30
+ )
31
+ expect(ipblocks[0].properties['ips'].count).to be > 0
32
+ expect(ipblocks[0].properties['location']).to eq('de/fra')
33
+ expect(ipblocks[0].properties['size']).to be_kind_of(Integer)
34
+ end
35
+
36
+ it '#get' do
37
+ ipblock = ProfitBricks::IPBlock.get(@ipblock.id)
38
+
39
+ expect(ipblock.type).to eq('ipblock')
40
+ expect(ipblock.id).to eq(@ipblock.id)
41
+ expect(ipblock.properties['ips'].count).to be > 0
42
+ expect(ipblock.properties['location']).to eq('de/fra')
43
+ expect(ipblock.properties['size']).to eq(1)
44
+ end
45
+
46
+ # alias: delete
47
+ it '#release' do
48
+ ipblock = ProfitBricks::IPBlock.reserve(options[:ipblock])
49
+
50
+ expect(ipblock.release).to be_kind_of(Hash)
51
+ end
52
+ end
data/spec/lan_spec.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::LAN do
4
+ before(:all) do
5
+ @datacenter = ProfitBricks::Datacenter.create(options[:datacenter])
6
+ @datacenter.wait_for { ready? }
7
+
8
+ @server = ProfitBricks::Server.create(@datacenter.id, options[:server])
9
+ @server.wait_for { ready? }
10
+
11
+ @lan = ProfitBricks::LAN.create(@datacenter.id, options[:lan])
12
+ @lan.wait_for { ready? }
13
+
14
+ @nic = ProfitBricks::NIC.create(@datacenter.id, @server.id, lan: @lan.id)
15
+ @nic.wait_for { ready? }
16
+ end
17
+
18
+ after(:all) do
19
+ @datacenter.delete
20
+ end
21
+
22
+ it '#create' do
23
+ expect(@lan.type).to eq('lan')
24
+ expect(@lan.id).to match(/^\d+$/)
25
+ expect(@lan.properties['name']).to eq('public Lan 4')
26
+ expect(@lan.properties['public']).to be true
27
+ end
28
+
29
+ it '#list' do
30
+ lans = ProfitBricks::LAN.list(@datacenter.id)
31
+
32
+ expect(lans.count).to be > 0
33
+ expect(lans[0].type).to eq('lan')
34
+ expect(lans[0].id).to match(/^\d+$/)
35
+ expect(lans[0].properties['name']).to eq('public Lan 4')
36
+ expect(lans[0].properties['public']).to be true
37
+ end
38
+
39
+ it '#get' do
40
+ lan = ProfitBricks::LAN.get(@datacenter.id, @lan.id)
41
+
42
+ expect(lan.type).to eq('lan')
43
+ expect(lan.id).to eq(@lan.id)
44
+ expect(lan.properties['name']).to eq('public Lan 4')
45
+ expect(lan.properties['public']).to be true
46
+ end
47
+
48
+ it '#update' do
49
+ lan = @lan.update(public: 'false')
50
+
51
+ expect(lan.type).to eq('lan')
52
+ expect(lan.id).to eq(@lan.id)
53
+ expect(lan.properties['name']).to eq('public Lan 4')
54
+ expect(lan.properties['public']).to be false
55
+ end
56
+
57
+ it '#delete' do
58
+ lan = ProfitBricks::LAN.create(@datacenter.id, options[:lan])
59
+ lan.wait_for { ready? }
60
+
61
+ expect(lan.delete).to be_kind_of(Hash)
62
+ end
63
+
64
+ it '#list_members' do
65
+ members = @lan.list_members
66
+
67
+ expect(members.count).to be > 0
68
+ expect(members[0].type).to eq('nic')
69
+ end
70
+ end
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::Loadbalancer do
4
+ before(:all) do
5
+ @datacenter = ProfitBricks::Datacenter.create(options[:datacenter])
6
+ @datacenter.wait_for { ready? }
7
+
8
+ @server = ProfitBricks::Server.create(@datacenter.id, options[:server])
9
+ @server.wait_for { ready? }
10
+
11
+ @lan = ProfitBricks::LAN.create(@datacenter.id, options[:lan])
12
+ @lan.wait_for { ready? }
13
+
14
+ @nic = ProfitBricks::NIC.create(@datacenter.id, @server.id, options[:nic])
15
+ @nic.wait_for { ready? }
16
+
17
+ @loadbalancer = ProfitBricks::Loadbalancer.create(@datacenter.id, options[:loadbalancer])
18
+ @loadbalancer.wait_for { ready? }
19
+
20
+ @balanced_nic = @loadbalancer.associate_balanced_nic(@nic.id)
21
+ @balanced_nic.wait_for { ready? }
22
+ end
23
+
24
+ after(:all) do
25
+ @datacenter.delete
26
+ end
27
+
28
+ it '#create' do
29
+ expect(@loadbalancer.type).to eq('loadbalancer')
30
+ expect(@loadbalancer.id).to be_kind_of(String)
31
+ expect(@loadbalancer.properties['name']).to eq('My LB')
32
+ expect(@loadbalancer.properties['ip']).to be nil
33
+ expect(@loadbalancer.properties['dhcp']).to be true
34
+ expect(@loadbalancer.entities).to be nil
35
+ end
36
+
37
+ it '#list' do
38
+ loadbalancers = ProfitBricks::Loadbalancer.list(@datacenter.id)
39
+
40
+ expect(loadbalancers.count).to be > 0
41
+ expect(loadbalancers[0].type).to eq('loadbalancer')
42
+ expect(loadbalancers[0].id).to eq(@loadbalancer.id)
43
+ expect(loadbalancers[0].properties['name']).to eq('My LB')
44
+ expect(loadbalancers[0].properties['ip']).to be_kind_of(String)
45
+ expect(loadbalancers[0].properties['dhcp']).to be true
46
+ expect(loadbalancers[0].entities).to be_kind_of(Hash)
47
+ end
48
+
49
+ it '#get' do
50
+ loadbalancer = ProfitBricks::Loadbalancer.get(@datacenter.id, @loadbalancer.id)
51
+
52
+ expect(loadbalancer.type).to eq('loadbalancer')
53
+ expect(loadbalancer.id).to eq(@loadbalancer.id)
54
+ expect(loadbalancer.properties['name']).to eq('My LB')
55
+ expect(loadbalancer.properties['ip']).to be_kind_of(String)
56
+ expect(loadbalancer.properties['dhcp']).to be true
57
+ expect(loadbalancer.entities).to be_kind_of(Hash)
58
+ end
59
+
60
+ it '#update' do
61
+ loadbalancer = @loadbalancer.update(
62
+ ip: '10.1.1.2'
63
+ )
64
+ loadbalancer.wait_for { ready? }
65
+
66
+ expect(loadbalancer.type).to eq('loadbalancer')
67
+ expect(loadbalancer.id).to eq(@loadbalancer.id)
68
+ expect(loadbalancer.properties['name']).to eq('My LB')
69
+ expect(loadbalancer.properties['ip']).to eq('10.1.1.2')
70
+ expect(loadbalancer.properties['dhcp']).to be true
71
+ expect(loadbalancer.entities).to be nil
72
+ end
73
+
74
+ it '#delete' do
75
+ loadbalancer = ProfitBricks::Loadbalancer.create(@datacenter.id, options[:loadbalancer])
76
+ loadbalancer.wait_for { ready? }
77
+
78
+ expect(loadbalancer.delete).to have_key(:requestId)
79
+ end
80
+
81
+ it '#list_balanced_nics' do
82
+ balanced_nics = @loadbalancer.list_balanced_nics
83
+
84
+ expect(balanced_nics.count).to be > 0
85
+ expect(balanced_nics[0].type).to eq('nic')
86
+ expect(balanced_nics[0].properties['name']).to eq('nic1')
87
+ expect(balanced_nics[0].properties['ips']).to be_kind_of(Array)
88
+ expect(balanced_nics[0].properties['dhcp']).to be true
89
+ expect(balanced_nics[0].properties['lan']).to be_kind_of(Integer)
90
+ end
91
+
92
+ it '#get_balanced_nic' do
93
+ balanced_nic = @loadbalancer.get_balanced_nic(@nic.id)
94
+
95
+ expect(balanced_nic.type).to eq('nic')
96
+ expect(balanced_nic.properties['name']).to eq('nic1')
97
+ expect(balanced_nic.properties['ips']).to be_kind_of(Array)
98
+ expect(balanced_nic.properties['dhcp']).to be true
99
+ expect(balanced_nic.properties['lan']).to be_kind_of(Integer)
100
+ end
101
+
102
+ it '#associate_balanced_nic' do
103
+ balanced_nic = @loadbalancer.associate_balanced_nic(@nic.id)
104
+
105
+ expect(balanced_nic.type).to eq('nic')
106
+ expect(balanced_nic.properties['name']).to eq('nic1')
107
+ expect(balanced_nic.properties['ips']).to be_kind_of(Array)
108
+ expect(balanced_nic.properties['dhcp']).to be true
109
+ expect(balanced_nic.properties['lan']).to be_kind_of(Integer)
110
+ end
111
+
112
+ it '#remove_balanced_nic' do
113
+ @loadbalancer.associate_balanced_nic(@nic.id)
114
+
115
+ expect(@loadbalancer.remove_balanced_nic(@nic.id)).to have_key(:requestId)
116
+ end
117
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe ProfitBricks::Location do
4
+ it '#list' do
5
+ @locations = ProfitBricks::Location.list
6
+
7
+ expect(@locations.count).to be > 0
8
+ expect(@locations[0].type).to eq('location')
9
+ expect(@locations[0].id).to match(/^\w+\/\w+$/)
10
+ expect(@locations[0].properties['name']).to be_kind_of(String)
11
+ end
12
+
13
+ it '#get' do
14
+ location = ProfitBricks::Location.get('us/las')
15
+
16
+ expect(location.type).to eq('location')
17
+ expect(location.id).to match(/^\w+\/\w+$/)
18
+ expect(location.properties['name']).to be_kind_of(String)
19
+ end
20
+ end