squall 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/.rbenv-version +1 -0
- data/.rspec +1 -1
- data/.rvmrc +41 -1
- data/.travis.yml +13 -3
- data/README.md +122 -27
- data/Rakefile +5 -34
- data/lib/squall/data_store_zone.rb +58 -0
- data/lib/squall/firewall_rule.rb +66 -0
- data/lib/squall/hypervisor.rb +63 -11
- data/lib/squall/hypervisor_zone.rb +135 -0
- data/lib/squall/ip_address.rb +50 -3
- data/lib/squall/ip_address_join.rb +46 -0
- data/lib/squall/network.rb +21 -4
- data/lib/squall/network_zone.rb +73 -0
- data/lib/squall/payment.rb +59 -0
- data/lib/squall/role.rb +28 -11
- data/lib/squall/statistic.rb +3 -3
- data/lib/squall/{base.rb → support/base.rb} +8 -4
- data/lib/squall/{config.rb → support/config.rb} +4 -0
- data/lib/squall/{exception.rb → support/exception.rb} +0 -0
- data/lib/squall/{params.rb → support/params.rb} +0 -0
- data/lib/squall/support/version.rb +3 -0
- data/lib/squall/support/yaml.rb +5 -0
- data/lib/squall/template.rb +4 -0
- data/lib/squall/transaction.rb +4 -0
- data/lib/squall/user.rb +126 -30
- data/lib/squall/user_group.rb +56 -0
- data/lib/squall/virtual_machine.rb +176 -52
- data/lib/squall/whitelist.rb +74 -0
- data/lib/squall.rb +21 -12
- data/spec/spec_helper.rb +21 -16
- data/spec/squall/data_store_zone_spec.rb +97 -0
- data/spec/squall/firewall_rule_spec.rb +112 -0
- data/spec/squall/hypervisor_spec.rb +101 -48
- data/spec/squall/hypervisor_zone_spec.rb +190 -0
- data/spec/squall/ip_address_join_spec.rb +67 -0
- data/spec/squall/ip_address_spec.rb +68 -6
- data/spec/squall/network_spec.rb +0 -1
- data/spec/squall/network_zone_spec.rb +147 -0
- data/spec/squall/payment_spec.rb +98 -0
- data/spec/squall/role_spec.rb +31 -46
- data/spec/squall/statistic_spec.rb +7 -9
- data/spec/squall/{base_spec.rb → support/base_spec.rb} +5 -7
- data/spec/squall/{config_spec.rb → support/config_spec.rb} +0 -0
- data/spec/{params_spec.rb → squall/support/params_spec.rb} +0 -0
- data/spec/squall/template_spec.rb +0 -1
- data/spec/squall/transaction_spec.rb +0 -1
- data/spec/squall/user_group_spec.rb +74 -0
- data/spec/squall/user_spec.rb +142 -59
- data/spec/squall/virtual_machine_spec.rb +179 -67
- data/spec/squall/whitelist_spec.rb +113 -0
- data/spec/squall_spec.rb +4 -8
- data/spec/vcr_cassettes/data_store_zone/create.yml +40 -0
- data/spec/vcr_cassettes/data_store_zone/delete.yml +77 -0
- data/spec/vcr_cassettes/data_store_zone/edit.yml +77 -0
- data/spec/vcr_cassettes/data_store_zone/list.yml +40 -0
- data/spec/vcr_cassettes/data_store_zone/show.yml +77 -0
- data/spec/vcr_cassettes/firewall_rule/create.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/delete.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/edit.yml +75 -0
- data/spec/vcr_cassettes/firewall_rule/list.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/add_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/add_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/create.yml +7 -44
- data/spec/vcr_cassettes/hypervisor/data_store_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/delete.yml +11 -11
- data/spec/vcr_cassettes/hypervisor/edit.yml +7 -46
- data/spec/vcr_cassettes/hypervisor/list.yml +7 -7
- data/spec/vcr_cassettes/hypervisor/network_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/reboot.yml +13 -13
- data/spec/vcr_cassettes/hypervisor/remove_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/remove_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor/show.yml +13 -13
- data/spec/vcr_cassettes/hypervisor_zones/add_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/add_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/create.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/data_store_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/delete.yml +77 -0
- data/spec/vcr_cassettes/hypervisor_zones/edit.yml +77 -0
- data/spec/vcr_cassettes/hypervisor_zones/hypervisors.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/list.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/network_joins.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/remove_data_store_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/remove_network_join.yml +40 -0
- data/spec/vcr_cassettes/hypervisor_zones/show.yml +77 -0
- data/spec/vcr_cassettes/ipaddress/create.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/delete.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/edit.yml +40 -0
- data/spec/vcr_cassettes/ipaddress/list.yml +17 -17
- data/spec/vcr_cassettes/ipaddress_join/assign.yml +77 -0
- data/spec/vcr_cassettes/ipaddress_join/delete.yml +77 -0
- data/spec/vcr_cassettes/ipaddress_join/list.yml +77 -0
- data/spec/vcr_cassettes/network/create.yml +15 -15
- data/spec/vcr_cassettes/network/delete.yml +6 -6
- data/spec/vcr_cassettes/network/edit.yml +18 -18
- data/spec/vcr_cassettes/network/list.yml +3 -3
- data/spec/vcr_cassettes/network_zones/attach.yml +114 -0
- data/spec/vcr_cassettes/network_zones/create.yml +40 -0
- data/spec/vcr_cassettes/network_zones/delete.yml +77 -0
- data/spec/vcr_cassettes/network_zones/detach.yml +114 -0
- data/spec/vcr_cassettes/network_zones/edit.yml +77 -0
- data/spec/vcr_cassettes/network_zones/list.yml +40 -0
- data/spec/vcr_cassettes/network_zones/show.yml +77 -0
- data/spec/vcr_cassettes/payment/create.yml +78 -0
- data/spec/vcr_cassettes/payment/delete.yml +77 -0
- data/spec/vcr_cassettes/payment/edit.yml +77 -0
- data/spec/vcr_cassettes/payment/list.yml +41 -0
- data/spec/vcr_cassettes/role/create.yml +7 -44
- data/spec/vcr_cassettes/role/delete.yml +6 -6
- data/spec/vcr_cassettes/role/edit.yml +13 -75
- data/spec/vcr_cassettes/role/list.yml +7 -7
- data/spec/vcr_cassettes/role/permissions.yml +7 -7
- data/spec/vcr_cassettes/role/show.yml +13 -13
- data/spec/vcr_cassettes/statistic/usage_statistics.yml +7 -7
- data/spec/vcr_cassettes/template/list.yml +3 -3
- data/spec/vcr_cassettes/template/make_public.yml +6 -6
- data/spec/vcr_cassettes/transaction/list.yml +3 -3
- data/spec/vcr_cassettes/transaction/show.yml +6 -6
- data/spec/vcr_cassettes/user/activate.yml +7 -7
- data/spec/vcr_cassettes/user/create.yml +7 -83
- data/spec/vcr_cassettes/user/data_store_zones.yml +79 -0
- data/spec/vcr_cassettes/user/delete.yml +11 -11
- data/spec/vcr_cassettes/user/edit.yml +40 -0
- data/spec/vcr_cassettes/user/edit_role.yml +9 -9
- data/spec/vcr_cassettes/user/generate_api_key.yml +7 -7
- data/spec/vcr_cassettes/user/hypervisors.yml +77 -0
- data/spec/vcr_cassettes/user/limits.yml +77 -0
- data/spec/vcr_cassettes/user/list.yml +8 -8
- data/spec/vcr_cassettes/user/monthly_bills.yml +40 -0
- data/spec/vcr_cassettes/user/network_zones.yml +79 -0
- data/spec/vcr_cassettes/user/show.yml +29 -29
- data/spec/vcr_cassettes/user/stats.yml +6 -6
- data/spec/vcr_cassettes/user/suspend.yml +7 -7
- data/spec/vcr_cassettes/user/virtual_machines.yml +18 -20
- data/spec/vcr_cassettes/user_group/create.yml +40 -0
- data/spec/vcr_cassettes/user_group/delete.yml +77 -0
- data/spec/vcr_cassettes/user_group/edit.yml +77 -0
- data/spec/vcr_cassettes/user_group/list.yml +40 -0
- data/spec/vcr_cassettes/virtual_machine/build.yml +7 -7
- data/spec/vcr_cassettes/virtual_machine/change_owner.yml +8 -8
- data/spec/vcr_cassettes/virtual_machine/change_password.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/console.yml +63 -0
- data/spec/vcr_cassettes/virtual_machine/create.yml +9 -11
- data/spec/vcr_cassettes/virtual_machine/delete.yml +11 -11
- data/spec/vcr_cassettes/virtual_machine/edit.yml +16 -18
- data/spec/vcr_cassettes/virtual_machine/list.yml +3 -3
- data/spec/vcr_cassettes/virtual_machine/migrate.yml +22 -24
- data/spec/vcr_cassettes/virtual_machine/reboot.yml +22 -22
- data/spec/vcr_cassettes/virtual_machine/resize.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/segregate.yml +114 -0
- data/spec/vcr_cassettes/virtual_machine/set_ssh_keys.yml +77 -0
- data/spec/vcr_cassettes/virtual_machine/set_vip.yml +77 -0
- data/spec/vcr_cassettes/virtual_machine/show.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/shutdown.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/startup.yml +6 -6
- data/spec/vcr_cassettes/virtual_machine/stats.yml +63 -0
- data/spec/vcr_cassettes/virtual_machine/stop.yml +22 -22
- data/spec/vcr_cassettes/virtual_machine/suspend.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/unlock.yml +13 -13
- data/spec/vcr_cassettes/virtual_machine/unsuspend.yml +6 -6
- data/spec/vcr_cassettes/whitelist/create.yml +77 -0
- data/spec/vcr_cassettes/whitelist/delete.yml +77 -0
- data/spec/vcr_cassettes/whitelist/edit.yml +77 -0
- data/spec/vcr_cassettes/whitelist/list.yml +40 -0
- data/spec/vcr_cassettes/whitelist/show.yml +77 -0
- data/squall.gemspec +3 -2
- metadata +247 -131
- data/Gemfile.lock +0 -100
- data/lib/squall/version.rb +0 -3
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Squall::HypervisorZone do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@hypervisor_zone = Squall::HypervisorZone.new
|
|
6
|
+
@valid = {:label => "My zone"}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#list" do
|
|
10
|
+
use_vcr_cassette "hypervisor_zones/list"
|
|
11
|
+
|
|
12
|
+
it "returns all hypervisor zones" do
|
|
13
|
+
hypervisor_zoness = @hypervisor_zone.list
|
|
14
|
+
hypervisor_zoness.should be_an(Array)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "contains the hypervisor zone data" do
|
|
18
|
+
hypervisor_zoness = @hypervisor_zone.list
|
|
19
|
+
hypervisor_zoness.all? {|w| w.is_a?(Hash) }.should be_true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "#show" do
|
|
24
|
+
use_vcr_cassette "hypervisor_zones/show"
|
|
25
|
+
it "requires an id" do
|
|
26
|
+
expect { @hypervisor_zone.show }.to raise_error(ArgumentError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns not found for invalid hypervisor zone id" do
|
|
30
|
+
expect { @hypervisor_zone.show(404) }.to raise_error(Squall::NotFound)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns a hypervisor zone" do
|
|
34
|
+
hypervisor_zones = @hypervisor_zone.show(1)
|
|
35
|
+
hypervisor_zones.should be_a(Hash)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "#create" do
|
|
40
|
+
use_vcr_cassette "hypervisor_zones/create"
|
|
41
|
+
it "requires label" do
|
|
42
|
+
invalid = @valid.reject{|k,v| k == :label }
|
|
43
|
+
requires_attr(:label) { @hypervisor_zone.create(invalid) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "raises error on unknown params" do
|
|
47
|
+
expect { @hypervisor_zone.create(@valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "creates a hypervisor zone" do
|
|
51
|
+
@hypervisor_zone.create(@valid)
|
|
52
|
+
@hypervisor_zone.success.should be_true
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "#edit" do
|
|
57
|
+
use_vcr_cassette "hypervisor_zones/edit"
|
|
58
|
+
|
|
59
|
+
it "allows select params" do
|
|
60
|
+
optional = [:label]
|
|
61
|
+
@hypervisor_zone.should_receive(:request).exactly(optional.size).times.and_return Hash.new()
|
|
62
|
+
optional.each do |param|
|
|
63
|
+
@hypervisor_zone.edit(1, param => "test")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "raises error on unknown params" do
|
|
68
|
+
expect { @hypervisor_zone.edit(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "edits a hypervisor zone" do
|
|
72
|
+
@hypervisor_zone.edit(1, :label => "Updated zone")
|
|
73
|
+
@hypervisor_zone.success.should be_true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "raises an error for an invalid hypervisor zone id" do
|
|
77
|
+
expect { @hypervisor_zone.edit(404, @valid) }.to raise_error(Squall::NotFound)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "#delete" do
|
|
82
|
+
use_vcr_cassette "hypervisor_zones/delete"
|
|
83
|
+
it "requires an id" do
|
|
84
|
+
expect { @hypervisor_zone.delete }.to raise_error(ArgumentError)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "deletes a hypervisor zone" do
|
|
88
|
+
@hypervisor_zone.delete(1)
|
|
89
|
+
@hypervisor_zone.success.should be_true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "returns NotFound for invalid hypervisor zone id" do
|
|
93
|
+
expect { @hypervisor_zone.delete(404) }.to raise_error(Squall::NotFound)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe "#hypervisors" do
|
|
98
|
+
use_vcr_cassette "hypervisor_zones/hypervisors"
|
|
99
|
+
|
|
100
|
+
it "returns a list of hypervisors" do
|
|
101
|
+
hypervisors = @hypervisor_zone.hypervisors(1)
|
|
102
|
+
hypervisors.should be_an(Array)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "contains the hypervisor data" do
|
|
106
|
+
hypervisors = @hypervisor_zone.hypervisors(1)
|
|
107
|
+
hypervisors.all? {|w| w.is_a?(Hash) }.should be_true
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
describe "#data_store_joins" do
|
|
113
|
+
use_vcr_cassette "hypervisor_zones/data_store_joins"
|
|
114
|
+
|
|
115
|
+
it "returns a list of data store joins" do
|
|
116
|
+
joins = @hypervisor_zone.data_store_joins(1)
|
|
117
|
+
joins.should be_an(Array)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "contains the data store join data" do
|
|
121
|
+
joins = @hypervisor_zone.data_store_joins(1)
|
|
122
|
+
joins.all? {|w| w.is_a?(Hash) }.should be_true
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
describe "#add_data_store_join" do
|
|
128
|
+
use_vcr_cassette "hypervisor_zones/add_data_store_join"
|
|
129
|
+
|
|
130
|
+
it "adds the data store to the hypervisor zone" do
|
|
131
|
+
@hypervisor_zone.add_data_store_join(1, 1)
|
|
132
|
+
@hypervisor_zone.success.should be_true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
describe "#remove_data_store_join" do
|
|
138
|
+
use_vcr_cassette "hypervisor_zones/remove_data_store_join"
|
|
139
|
+
|
|
140
|
+
it "removes the data store from the hypervisor zone" do
|
|
141
|
+
@hypervisor_zone.remove_data_store_join(1, 1)
|
|
142
|
+
@hypervisor_zone.success.should be_true
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe "#network_joins" do
|
|
148
|
+
use_vcr_cassette "hypervisor_zones/network_joins"
|
|
149
|
+
|
|
150
|
+
it "returns a list of network joins" do
|
|
151
|
+
joins = @hypervisor_zone.network_joins(1)
|
|
152
|
+
joins.should be_an(Array)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "contains the network join data" do
|
|
156
|
+
joins = @hypervisor_zone.network_joins(1)
|
|
157
|
+
joins.all? {|w| w.is_a?(Hash) }.should be_true
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
describe "#add_network_join" do
|
|
163
|
+
use_vcr_cassette "hypervisor_zones/add_network_join"
|
|
164
|
+
|
|
165
|
+
it "requires network id" do
|
|
166
|
+
requires_attr(:network_id) { @hypervisor_zone.add_network_join(1, :interface => "interface") }
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it "requires interface" do
|
|
170
|
+
requires_attr(:interface) { @hypervisor_zone.add_network_join(1, :network_id => 1) }
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "adds the network to the hypervisor zone" do
|
|
174
|
+
@hypervisor_zone.add_network_join(1, :network_id => 1, :interface => "interface")
|
|
175
|
+
@hypervisor_zone.success.should be_true
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
describe "#remove_network_join" do
|
|
181
|
+
use_vcr_cassette "hypervisor_zones/remove_network_join"
|
|
182
|
+
|
|
183
|
+
it "removes the network from the hypervisor zone" do
|
|
184
|
+
@hypervisor_zone.remove_network_join(1, 1)
|
|
185
|
+
@hypervisor_zone.success.should be_true
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Squall::IpAddressJoin do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@join = Squall::IpAddressJoin.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe "#list" do
|
|
9
|
+
use_vcr_cassette 'ipaddress_join/list'
|
|
10
|
+
|
|
11
|
+
it "requires virtual machine ID" do
|
|
12
|
+
expect { @join.list }.to raise_error(ArgumentError)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "raises NotFound with an invalid virtual machine ID" do
|
|
16
|
+
expect { @join.list(404) }.to raise_error(Squall::NotFound)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "returns list of ip_addresses" do
|
|
20
|
+
ips = @join.list(1)
|
|
21
|
+
ips.should be_an(Array)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "contains IP address data" do
|
|
25
|
+
ips = @join.list(1)
|
|
26
|
+
ips.all?.should be_true
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "#assign" do
|
|
31
|
+
use_vcr_cassette "ipaddress_join/assign"
|
|
32
|
+
|
|
33
|
+
it "raises ArgumentError without required arguments" do
|
|
34
|
+
expect { @join.assign }.to raise_error(ArgumentError)
|
|
35
|
+
expect { @join.assign(1) }.to raise_error(ArgumentError)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "raises NotFound with an invalid virtual machine ID" do
|
|
39
|
+
expect {
|
|
40
|
+
@join.assign(404, {:ip_address_id => 1, :network_interface_id => 1})
|
|
41
|
+
}.to raise_error(Squall::NotFound)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "assigns the IP join" do
|
|
45
|
+
join = @join.assign(1, {:ip_address_id => 1, :network_interface_id => 1})
|
|
46
|
+
@join.success.should be_true
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "#delete" do
|
|
51
|
+
use_vcr_cassette "ipaddress_join/delete"
|
|
52
|
+
|
|
53
|
+
it "raises ArgumentError without required arguments" do
|
|
54
|
+
expect { @join.delete }.to raise_error(ArgumentError)
|
|
55
|
+
expect { @join.delete(1) }.to raise_error(ArgumentError)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "raises NotFound with an invalid ID" do
|
|
59
|
+
expect { @join.delete(404, 1) }.to raise_error(Squall::NotFound)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "deletes the IP join" do
|
|
63
|
+
@join.delete(1, 1)
|
|
64
|
+
@join.success.should be_true
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -2,7 +2,6 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Squall::IpAddress do
|
|
4
4
|
before(:each) do
|
|
5
|
-
default_config
|
|
6
5
|
@ip = Squall::IpAddress.new
|
|
7
6
|
@keys = ["netmask", "disallowed_primary", "address", "created_at", "updated_at", "network_id",
|
|
8
7
|
"network_address", "broadcast", "id", "gateway"]
|
|
@@ -21,12 +20,75 @@ describe Squall::IpAddress do
|
|
|
21
20
|
|
|
22
21
|
it "returns ip_addresses" do
|
|
23
22
|
ips = @ip.list(1)
|
|
24
|
-
ips.
|
|
23
|
+
ips.should be_an(Array)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "contains ip address data" do
|
|
27
|
+
ips = @ip.list(1)
|
|
28
|
+
ips.all?.should be_true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "#edit" do
|
|
33
|
+
use_vcr_cassette 'ipaddress/edit'
|
|
34
|
+
|
|
35
|
+
ip_params = {
|
|
36
|
+
:address => '109.123.91.67',
|
|
37
|
+
:netmask => '255.255.255.193',
|
|
38
|
+
:broadcast => '109.123.91.128',
|
|
39
|
+
:network_address => '109.123.91.65',
|
|
40
|
+
:gateway => '109.123.91.66'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
it "raises ArgumentError without required arguments" do
|
|
44
|
+
expect { @ip.edit }.to raise_error(ArgumentError)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "raises ArgumentError without id argument" do
|
|
48
|
+
expect { @ip.edit(1) }.to raise_error(ArgumentError)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "edits the IpAddress" do
|
|
52
|
+
ip = @ip.edit(1, 1, ip_params)
|
|
53
|
+
@ip.success.should be_true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "#create" do
|
|
58
|
+
use_vcr_cassette 'ipaddress/create'
|
|
59
|
+
|
|
60
|
+
it "raises ArgumentError without network_id" do
|
|
61
|
+
expect { @ip.create }.to raise_error(ArgumentError)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "raises ArgumentError without required options" do
|
|
65
|
+
expect { @ip.create(1, {}) }.to raise_error(ArgumentError)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "creates a new IP" do
|
|
69
|
+
new_ip = @ip.create(1,
|
|
70
|
+
:address => '109.123.91.24',
|
|
71
|
+
:netmask => '255.255.255.194',
|
|
72
|
+
:broadcast => '109.123.91.129',
|
|
73
|
+
:network_address => '109.123.91.66',
|
|
74
|
+
:gateway => '109.123.91.67'
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
@ip.success.should be_true
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "#delete" do
|
|
82
|
+
use_vcr_cassette 'ipaddress/delete'
|
|
83
|
+
|
|
84
|
+
it "raises ArgumentError without network_id or id" do
|
|
85
|
+
expect { @ip.delete }.to raise_error(ArgumentError)
|
|
86
|
+
expect { @ip.delete(1) }.to raise_error(ArgumentError)
|
|
87
|
+
end
|
|
25
88
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
first['address'].should == '127.2.2.2'
|
|
89
|
+
it "deletes the IP" do
|
|
90
|
+
@ip.delete(1, 1)
|
|
91
|
+
@ip.success.should be_true
|
|
30
92
|
end
|
|
31
93
|
end
|
|
32
94
|
end
|
data/spec/squall/network_spec.rb
CHANGED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Squall::NetworkZone do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@network_zone = Squall::NetworkZone.new
|
|
6
|
+
@valid = {:label => "My zone"}
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#list" do
|
|
10
|
+
use_vcr_cassette "network_zones/list"
|
|
11
|
+
|
|
12
|
+
it "returns all network zones" do
|
|
13
|
+
network_zoness = @network_zone.list
|
|
14
|
+
network_zoness.should be_an(Array)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "contains the network zone data" do
|
|
18
|
+
network_zoness = @network_zone.list
|
|
19
|
+
network_zoness.all? {|w| w.is_a?(Hash) }.should be_true
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "#show" do
|
|
24
|
+
use_vcr_cassette "network_zones/show"
|
|
25
|
+
it "requires an id" do
|
|
26
|
+
expect { @network_zone.show }.to raise_error(ArgumentError)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "returns not found for invalid network zone id" do
|
|
30
|
+
expect { @network_zone.show(404) }.to raise_error(Squall::NotFound)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns a network zone" do
|
|
34
|
+
network_zones = @network_zone.show(1)
|
|
35
|
+
network_zones.should be_a(Hash)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "#create" do
|
|
40
|
+
use_vcr_cassette "network_zones/create"
|
|
41
|
+
it "requires label" do
|
|
42
|
+
invalid = @valid.reject{|k,v| k == :label }
|
|
43
|
+
requires_attr(:label) { @network_zone.create(invalid) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "raises error on unknown params" do
|
|
47
|
+
expect { @network_zone.create(@valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "creates a network zone" do
|
|
51
|
+
@network_zone.create(@valid)
|
|
52
|
+
@network_zone.success.should be_true
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "#edit" do
|
|
57
|
+
use_vcr_cassette "network_zones/edit"
|
|
58
|
+
|
|
59
|
+
it "allows select params" do
|
|
60
|
+
optional = [:label]
|
|
61
|
+
@network_zone.should_receive(:request).exactly(optional.size).times.and_return Hash.new()
|
|
62
|
+
optional.each do |param|
|
|
63
|
+
@network_zone.edit(1, param => "test")
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "raises error on unknown params" do
|
|
68
|
+
expect { @network_zone.edit(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "edits a network zone" do
|
|
72
|
+
@network_zone.edit(1, :label => "Updated zone")
|
|
73
|
+
@network_zone.success.should be_true
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "raises an error for an invalid network zone id" do
|
|
77
|
+
expect { @network_zone.edit(404, @valid) }.to raise_error(Squall::NotFound)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "#delete" do
|
|
82
|
+
use_vcr_cassette "network_zones/delete"
|
|
83
|
+
it "requires an id" do
|
|
84
|
+
expect { @network_zone.delete }.to raise_error(ArgumentError)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "deletes a network zone" do
|
|
88
|
+
@network_zone.delete(1)
|
|
89
|
+
@network_zone.success.should be_true
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "returns NotFound for invalid network zone id" do
|
|
93
|
+
expect { @network_zone.delete(404) }.to raise_error(Squall::NotFound)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe "#attach" do
|
|
98
|
+
use_vcr_cassette "network_zones/attach"
|
|
99
|
+
|
|
100
|
+
it "requires an id" do
|
|
101
|
+
expect { @network_zone.attach }.to raise_error(ArgumentError)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "requires a network id" do
|
|
105
|
+
expect { @network_zone.attach(1) }.to raise_error(ArgumentError)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "returns NotFound error for invalid id" do
|
|
109
|
+
expect { @network_zone.attach(404, 1) }.to raise_error(Squall::NotFound)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "returns NotFound error for invalid network id" do
|
|
113
|
+
expect { @network_zone.attach(1, 404) }.to raise_error(Squall::NotFound)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "attaches a network to the network zone" do
|
|
117
|
+
request = @network_zone.attach(1, 2)
|
|
118
|
+
@network_zone.success.should be_true
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
describe "#detach" do
|
|
123
|
+
use_vcr_cassette "network_zones/detach"
|
|
124
|
+
|
|
125
|
+
it "requires an id" do
|
|
126
|
+
expect { @network_zone.detach }.to raise_error(ArgumentError)
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "requires a network id" do
|
|
130
|
+
expect { @network_zone.detach(1) }.to raise_error(ArgumentError)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "returns NotFound error for invalid id" do
|
|
134
|
+
expect { @network_zone.detach(404, 1) }.to raise_error(Squall::NotFound)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "returns NotFound error for invalid network id" do
|
|
138
|
+
expect { @network_zone.detach(1, 404) }.to raise_error(Squall::NotFound)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "detaches a network to the network zone" do
|
|
142
|
+
request = @network_zone.detach(1, 2)
|
|
143
|
+
@network_zone.success.should be_true
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Squall::Payment do
|
|
4
|
+
before(:each) do
|
|
5
|
+
@keys = ["amount", "invoice_number"]
|
|
6
|
+
@payment = Squall::Payment.new
|
|
7
|
+
@valid = {:amount => 500}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "#list" do
|
|
11
|
+
use_vcr_cassette "payment/list"
|
|
12
|
+
|
|
13
|
+
it "requires user id" do
|
|
14
|
+
expect { @payment.list }.to raise_error(ArgumentError)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns a user list" do
|
|
18
|
+
payments = @payment.list(1)
|
|
19
|
+
payments.should be_an(Array)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "contains first payment's data" do
|
|
23
|
+
payment = @payment.list(1).first
|
|
24
|
+
payment.should be_a(Hash)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "#create" do
|
|
29
|
+
use_vcr_cassette "payment/create"
|
|
30
|
+
it "requires amount" do
|
|
31
|
+
invalid = @valid.reject{|k,v| k == :amount }
|
|
32
|
+
requires_attr(:amount) { @payment.create(1, invalid) }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "allows all optional params" do
|
|
36
|
+
optional = [:invoice_number]
|
|
37
|
+
@payment.should_receive(:request).exactly(optional.size).times.and_return Hash.new("payment" => {})
|
|
38
|
+
optional.each do |param|
|
|
39
|
+
@payment.create(1, @valid.merge(param => "test"))
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "raises error on unknown params" do
|
|
44
|
+
expect { @payment.create(1, @valid.merge(:what => 'what')) }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "raises an error for an invalid user id" do
|
|
48
|
+
expect { @payment.create(404, @valid) }.to raise_error(Squall::NotFound)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "creates a payment for a user" do
|
|
52
|
+
user = @payment.create(1, @valid)
|
|
53
|
+
@payment.success.should be_true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "#edit" do
|
|
58
|
+
use_vcr_cassette "payment/edit"
|
|
59
|
+
|
|
60
|
+
it "allows select params" do
|
|
61
|
+
optional = [:amount, :invoice_number]
|
|
62
|
+
@payment.should_receive(:request).exactly(optional.size).times.and_return Hash.new()
|
|
63
|
+
optional.each do |param|
|
|
64
|
+
@payment.edit(1, 1, param => "test")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "raises error on unknown params" do
|
|
69
|
+
expect { @payment.edit(1, 1, :what => 'what') }.to raise_error(ArgumentError, 'Unknown params: what')
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "edits a payment" do
|
|
73
|
+
user = @payment.edit(1, 1, :amount => 100)
|
|
74
|
+
@payment.success.should be_true
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "raises an error for an invalid payment id" do
|
|
78
|
+
expect { @payment.edit(1, 404, @valid) }.to raise_error(Squall::NotFound)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe "#delete" do
|
|
83
|
+
use_vcr_cassette "payment/delete"
|
|
84
|
+
it "requires an id" do
|
|
85
|
+
expect { @payment.delete }.to raise_error(ArgumentError)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "deletes a payment" do
|
|
89
|
+
@payment.delete(1, 1)
|
|
90
|
+
@payment.success.should be_true
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "returns NotFound for missing user" do
|
|
94
|
+
expect { @payment.delete(1, 404) }.to raise_error(Squall::NotFound)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|