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.
Files changed (170) hide show
  1. data/.gitignore +3 -0
  2. data/.rbenv-version +1 -0
  3. data/.rspec +1 -1
  4. data/.rvmrc +41 -1
  5. data/.travis.yml +13 -3
  6. data/README.md +122 -27
  7. data/Rakefile +5 -34
  8. data/lib/squall/data_store_zone.rb +58 -0
  9. data/lib/squall/firewall_rule.rb +66 -0
  10. data/lib/squall/hypervisor.rb +63 -11
  11. data/lib/squall/hypervisor_zone.rb +135 -0
  12. data/lib/squall/ip_address.rb +50 -3
  13. data/lib/squall/ip_address_join.rb +46 -0
  14. data/lib/squall/network.rb +21 -4
  15. data/lib/squall/network_zone.rb +73 -0
  16. data/lib/squall/payment.rb +59 -0
  17. data/lib/squall/role.rb +28 -11
  18. data/lib/squall/statistic.rb +3 -3
  19. data/lib/squall/{base.rb → support/base.rb} +8 -4
  20. data/lib/squall/{config.rb → support/config.rb} +4 -0
  21. data/lib/squall/{exception.rb → support/exception.rb} +0 -0
  22. data/lib/squall/{params.rb → support/params.rb} +0 -0
  23. data/lib/squall/support/version.rb +3 -0
  24. data/lib/squall/support/yaml.rb +5 -0
  25. data/lib/squall/template.rb +4 -0
  26. data/lib/squall/transaction.rb +4 -0
  27. data/lib/squall/user.rb +126 -30
  28. data/lib/squall/user_group.rb +56 -0
  29. data/lib/squall/virtual_machine.rb +176 -52
  30. data/lib/squall/whitelist.rb +74 -0
  31. data/lib/squall.rb +21 -12
  32. data/spec/spec_helper.rb +21 -16
  33. data/spec/squall/data_store_zone_spec.rb +97 -0
  34. data/spec/squall/firewall_rule_spec.rb +112 -0
  35. data/spec/squall/hypervisor_spec.rb +101 -48
  36. data/spec/squall/hypervisor_zone_spec.rb +190 -0
  37. data/spec/squall/ip_address_join_spec.rb +67 -0
  38. data/spec/squall/ip_address_spec.rb +68 -6
  39. data/spec/squall/network_spec.rb +0 -1
  40. data/spec/squall/network_zone_spec.rb +147 -0
  41. data/spec/squall/payment_spec.rb +98 -0
  42. data/spec/squall/role_spec.rb +31 -46
  43. data/spec/squall/statistic_spec.rb +7 -9
  44. data/spec/squall/{base_spec.rb → support/base_spec.rb} +5 -7
  45. data/spec/squall/{config_spec.rb → support/config_spec.rb} +0 -0
  46. data/spec/{params_spec.rb → squall/support/params_spec.rb} +0 -0
  47. data/spec/squall/template_spec.rb +0 -1
  48. data/spec/squall/transaction_spec.rb +0 -1
  49. data/spec/squall/user_group_spec.rb +74 -0
  50. data/spec/squall/user_spec.rb +142 -59
  51. data/spec/squall/virtual_machine_spec.rb +179 -67
  52. data/spec/squall/whitelist_spec.rb +113 -0
  53. data/spec/squall_spec.rb +4 -8
  54. data/spec/vcr_cassettes/data_store_zone/create.yml +40 -0
  55. data/spec/vcr_cassettes/data_store_zone/delete.yml +77 -0
  56. data/spec/vcr_cassettes/data_store_zone/edit.yml +77 -0
  57. data/spec/vcr_cassettes/data_store_zone/list.yml +40 -0
  58. data/spec/vcr_cassettes/data_store_zone/show.yml +77 -0
  59. data/spec/vcr_cassettes/firewall_rule/create.yml +75 -0
  60. data/spec/vcr_cassettes/firewall_rule/delete.yml +75 -0
  61. data/spec/vcr_cassettes/firewall_rule/edit.yml +75 -0
  62. data/spec/vcr_cassettes/firewall_rule/list.yml +40 -0
  63. data/spec/vcr_cassettes/hypervisor/add_data_store_join.yml +40 -0
  64. data/spec/vcr_cassettes/hypervisor/add_network_join.yml +40 -0
  65. data/spec/vcr_cassettes/hypervisor/create.yml +7 -44
  66. data/spec/vcr_cassettes/hypervisor/data_store_joins.yml +40 -0
  67. data/spec/vcr_cassettes/hypervisor/delete.yml +11 -11
  68. data/spec/vcr_cassettes/hypervisor/edit.yml +7 -46
  69. data/spec/vcr_cassettes/hypervisor/list.yml +7 -7
  70. data/spec/vcr_cassettes/hypervisor/network_joins.yml +40 -0
  71. data/spec/vcr_cassettes/hypervisor/reboot.yml +13 -13
  72. data/spec/vcr_cassettes/hypervisor/remove_data_store_join.yml +40 -0
  73. data/spec/vcr_cassettes/hypervisor/remove_network_join.yml +40 -0
  74. data/spec/vcr_cassettes/hypervisor/show.yml +13 -13
  75. data/spec/vcr_cassettes/hypervisor_zones/add_data_store_join.yml +40 -0
  76. data/spec/vcr_cassettes/hypervisor_zones/add_network_join.yml +40 -0
  77. data/spec/vcr_cassettes/hypervisor_zones/create.yml +40 -0
  78. data/spec/vcr_cassettes/hypervisor_zones/data_store_joins.yml +40 -0
  79. data/spec/vcr_cassettes/hypervisor_zones/delete.yml +77 -0
  80. data/spec/vcr_cassettes/hypervisor_zones/edit.yml +77 -0
  81. data/spec/vcr_cassettes/hypervisor_zones/hypervisors.yml +40 -0
  82. data/spec/vcr_cassettes/hypervisor_zones/list.yml +40 -0
  83. data/spec/vcr_cassettes/hypervisor_zones/network_joins.yml +40 -0
  84. data/spec/vcr_cassettes/hypervisor_zones/remove_data_store_join.yml +40 -0
  85. data/spec/vcr_cassettes/hypervisor_zones/remove_network_join.yml +40 -0
  86. data/spec/vcr_cassettes/hypervisor_zones/show.yml +77 -0
  87. data/spec/vcr_cassettes/ipaddress/create.yml +40 -0
  88. data/spec/vcr_cassettes/ipaddress/delete.yml +40 -0
  89. data/spec/vcr_cassettes/ipaddress/edit.yml +40 -0
  90. data/spec/vcr_cassettes/ipaddress/list.yml +17 -17
  91. data/spec/vcr_cassettes/ipaddress_join/assign.yml +77 -0
  92. data/spec/vcr_cassettes/ipaddress_join/delete.yml +77 -0
  93. data/spec/vcr_cassettes/ipaddress_join/list.yml +77 -0
  94. data/spec/vcr_cassettes/network/create.yml +15 -15
  95. data/spec/vcr_cassettes/network/delete.yml +6 -6
  96. data/spec/vcr_cassettes/network/edit.yml +18 -18
  97. data/spec/vcr_cassettes/network/list.yml +3 -3
  98. data/spec/vcr_cassettes/network_zones/attach.yml +114 -0
  99. data/spec/vcr_cassettes/network_zones/create.yml +40 -0
  100. data/spec/vcr_cassettes/network_zones/delete.yml +77 -0
  101. data/spec/vcr_cassettes/network_zones/detach.yml +114 -0
  102. data/spec/vcr_cassettes/network_zones/edit.yml +77 -0
  103. data/spec/vcr_cassettes/network_zones/list.yml +40 -0
  104. data/spec/vcr_cassettes/network_zones/show.yml +77 -0
  105. data/spec/vcr_cassettes/payment/create.yml +78 -0
  106. data/spec/vcr_cassettes/payment/delete.yml +77 -0
  107. data/spec/vcr_cassettes/payment/edit.yml +77 -0
  108. data/spec/vcr_cassettes/payment/list.yml +41 -0
  109. data/spec/vcr_cassettes/role/create.yml +7 -44
  110. data/spec/vcr_cassettes/role/delete.yml +6 -6
  111. data/spec/vcr_cassettes/role/edit.yml +13 -75
  112. data/spec/vcr_cassettes/role/list.yml +7 -7
  113. data/spec/vcr_cassettes/role/permissions.yml +7 -7
  114. data/spec/vcr_cassettes/role/show.yml +13 -13
  115. data/spec/vcr_cassettes/statistic/usage_statistics.yml +7 -7
  116. data/spec/vcr_cassettes/template/list.yml +3 -3
  117. data/spec/vcr_cassettes/template/make_public.yml +6 -6
  118. data/spec/vcr_cassettes/transaction/list.yml +3 -3
  119. data/spec/vcr_cassettes/transaction/show.yml +6 -6
  120. data/spec/vcr_cassettes/user/activate.yml +7 -7
  121. data/spec/vcr_cassettes/user/create.yml +7 -83
  122. data/spec/vcr_cassettes/user/data_store_zones.yml +79 -0
  123. data/spec/vcr_cassettes/user/delete.yml +11 -11
  124. data/spec/vcr_cassettes/user/edit.yml +40 -0
  125. data/spec/vcr_cassettes/user/edit_role.yml +9 -9
  126. data/spec/vcr_cassettes/user/generate_api_key.yml +7 -7
  127. data/spec/vcr_cassettes/user/hypervisors.yml +77 -0
  128. data/spec/vcr_cassettes/user/limits.yml +77 -0
  129. data/spec/vcr_cassettes/user/list.yml +8 -8
  130. data/spec/vcr_cassettes/user/monthly_bills.yml +40 -0
  131. data/spec/vcr_cassettes/user/network_zones.yml +79 -0
  132. data/spec/vcr_cassettes/user/show.yml +29 -29
  133. data/spec/vcr_cassettes/user/stats.yml +6 -6
  134. data/spec/vcr_cassettes/user/suspend.yml +7 -7
  135. data/spec/vcr_cassettes/user/virtual_machines.yml +18 -20
  136. data/spec/vcr_cassettes/user_group/create.yml +40 -0
  137. data/spec/vcr_cassettes/user_group/delete.yml +77 -0
  138. data/spec/vcr_cassettes/user_group/edit.yml +77 -0
  139. data/spec/vcr_cassettes/user_group/list.yml +40 -0
  140. data/spec/vcr_cassettes/virtual_machine/build.yml +7 -7
  141. data/spec/vcr_cassettes/virtual_machine/change_owner.yml +8 -8
  142. data/spec/vcr_cassettes/virtual_machine/change_password.yml +13 -13
  143. data/spec/vcr_cassettes/virtual_machine/console.yml +63 -0
  144. data/spec/vcr_cassettes/virtual_machine/create.yml +9 -11
  145. data/spec/vcr_cassettes/virtual_machine/delete.yml +11 -11
  146. data/spec/vcr_cassettes/virtual_machine/edit.yml +16 -18
  147. data/spec/vcr_cassettes/virtual_machine/list.yml +3 -3
  148. data/spec/vcr_cassettes/virtual_machine/migrate.yml +22 -24
  149. data/spec/vcr_cassettes/virtual_machine/reboot.yml +22 -22
  150. data/spec/vcr_cassettes/virtual_machine/resize.yml +13 -13
  151. data/spec/vcr_cassettes/virtual_machine/segregate.yml +114 -0
  152. data/spec/vcr_cassettes/virtual_machine/set_ssh_keys.yml +77 -0
  153. data/spec/vcr_cassettes/virtual_machine/set_vip.yml +77 -0
  154. data/spec/vcr_cassettes/virtual_machine/show.yml +6 -6
  155. data/spec/vcr_cassettes/virtual_machine/shutdown.yml +6 -6
  156. data/spec/vcr_cassettes/virtual_machine/startup.yml +6 -6
  157. data/spec/vcr_cassettes/virtual_machine/stats.yml +63 -0
  158. data/spec/vcr_cassettes/virtual_machine/stop.yml +22 -22
  159. data/spec/vcr_cassettes/virtual_machine/suspend.yml +13 -13
  160. data/spec/vcr_cassettes/virtual_machine/unlock.yml +13 -13
  161. data/spec/vcr_cassettes/virtual_machine/unsuspend.yml +6 -6
  162. data/spec/vcr_cassettes/whitelist/create.yml +77 -0
  163. data/spec/vcr_cassettes/whitelist/delete.yml +77 -0
  164. data/spec/vcr_cassettes/whitelist/edit.yml +77 -0
  165. data/spec/vcr_cassettes/whitelist/list.yml +40 -0
  166. data/spec/vcr_cassettes/whitelist/show.yml +77 -0
  167. data/squall.gemspec +3 -2
  168. metadata +247 -131
  169. data/Gemfile.lock +0 -100
  170. 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.size.should be(2)
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
- first = ips.first
27
- first.keys.should include(*@keys)
28
- first['netmask'].should == '255.255.255.0'
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
@@ -2,7 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe Squall::Network do
4
4
  before(:each) do
5
- default_config
6
5
  @network = Squall::Network.new
7
6
  @keys = ["label", "created_at", "updated_at", "network_group_id", "vlan", "id", "identifier"]
8
7
  end
@@ -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