squall 0.0.3 → 1.0.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 (100) hide show
  1. data/.gitignore +10 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +100 -0
  7. data/LICENSE +1 -1
  8. data/README.md +69 -0
  9. data/Rakefile +48 -42
  10. data/lib/squall/base.rb +96 -0
  11. data/lib/squall/config.rb +26 -0
  12. data/lib/squall/exception.rb +13 -0
  13. data/lib/squall/hypervisor.rb +46 -16
  14. data/lib/squall/ip_address.rb +13 -0
  15. data/lib/squall/network.rb +42 -0
  16. data/lib/squall/params.rb +50 -0
  17. data/lib/squall/role.rb +56 -0
  18. data/lib/squall/statistic.rb +10 -0
  19. data/lib/squall/template.rb +22 -0
  20. data/lib/squall/transaction.rb +16 -0
  21. data/lib/squall/user.rb +87 -0
  22. data/lib/squall/version.rb +3 -0
  23. data/lib/squall/virtual_machine.rb +169 -41
  24. data/lib/squall.rb +76 -20
  25. data/spec/params_spec.rb +195 -0
  26. data/spec/spec_helper.rb +47 -0
  27. data/spec/squall/base_spec.rb +135 -0
  28. data/spec/squall/config_spec.rb +44 -0
  29. data/spec/squall/hypervisor_spec.rb +143 -0
  30. data/spec/squall/ip_address_spec.rb +32 -0
  31. data/spec/squall/network_spec.rb +121 -0
  32. data/spec/squall/role_spec.rb +123 -0
  33. data/spec/squall/statistic_spec.rb +23 -0
  34. data/spec/squall/template_spec.rb +59 -0
  35. data/spec/squall/transaction_spec.rb +42 -0
  36. data/spec/squall/user_spec.rb +195 -0
  37. data/spec/squall/virtual_machine_spec.rb +471 -0
  38. data/spec/squall_spec.rb +67 -0
  39. data/spec/vcr_cassettes/hypervisor/create.yml +77 -0
  40. data/spec/vcr_cassettes/hypervisor/delete.yml +77 -0
  41. data/spec/vcr_cassettes/hypervisor/edit.yml +79 -0
  42. data/spec/vcr_cassettes/hypervisor/list.yml +40 -0
  43. data/spec/vcr_cassettes/hypervisor/reboot.yml +77 -0
  44. data/spec/vcr_cassettes/hypervisor/show.yml +77 -0
  45. data/spec/vcr_cassettes/ipaddress/list.yml +77 -0
  46. data/spec/vcr_cassettes/network/create.yml +196 -0
  47. data/spec/vcr_cassettes/network/delete.yml +77 -0
  48. data/spec/vcr_cassettes/network/edit.yml +233 -0
  49. data/spec/vcr_cassettes/network/list.yml +40 -0
  50. data/spec/vcr_cassettes/role/create.yml +77 -0
  51. data/spec/vcr_cassettes/role/delete.yml +77 -0
  52. data/spec/vcr_cassettes/role/edit.yml +139 -0
  53. data/spec/vcr_cassettes/role/list.yml +40 -0
  54. data/spec/vcr_cassettes/role/permissions.yml +40 -0
  55. data/spec/vcr_cassettes/role/show.yml +77 -0
  56. data/spec/vcr_cassettes/statistic/usage_statistics.yml +40 -0
  57. data/spec/vcr_cassettes/template/download.yml +40 -0
  58. data/spec/vcr_cassettes/template/list.yml +40 -0
  59. data/spec/vcr_cassettes/template/make_public.yml +77 -0
  60. data/spec/vcr_cassettes/transaction/list.yml +40 -0
  61. data/spec/vcr_cassettes/transaction/show.yml +77 -0
  62. data/spec/vcr_cassettes/user/activate.yml +40 -0
  63. data/spec/vcr_cassettes/user/create.yml +116 -0
  64. data/spec/vcr_cassettes/user/delete.yml +77 -0
  65. data/spec/vcr_cassettes/user/edit_role.yml +116 -0
  66. data/spec/vcr_cassettes/user/generate_api_key.yml +40 -0
  67. data/spec/vcr_cassettes/user/list.yml +40 -0
  68. data/spec/vcr_cassettes/user/show.yml +77 -0
  69. data/spec/vcr_cassettes/user/stats.yml +40 -0
  70. data/spec/vcr_cassettes/user/suspend.yml +40 -0
  71. data/spec/vcr_cassettes/user/virtual_machines.yml +79 -0
  72. data/spec/vcr_cassettes/virtual_machine/build.yml +77 -0
  73. data/spec/vcr_cassettes/virtual_machine/change_owner.yml +108 -0
  74. data/spec/vcr_cassettes/virtual_machine/change_password.yml +77 -0
  75. data/spec/vcr_cassettes/virtual_machine/create.yml +40 -0
  76. data/spec/vcr_cassettes/virtual_machine/delete.yml +77 -0
  77. data/spec/vcr_cassettes/virtual_machine/edit.yml +77 -0
  78. data/spec/vcr_cassettes/virtual_machine/list.yml +40 -0
  79. data/spec/vcr_cassettes/virtual_machine/migrate.yml +116 -0
  80. data/spec/vcr_cassettes/virtual_machine/reboot.yml +77 -0
  81. data/spec/vcr_cassettes/virtual_machine/resize.yml +77 -0
  82. data/spec/vcr_cassettes/virtual_machine/show.yml +77 -0
  83. data/spec/vcr_cassettes/virtual_machine/shutdown.yml +77 -0
  84. data/spec/vcr_cassettes/virtual_machine/startup.yml +77 -0
  85. data/spec/vcr_cassettes/virtual_machine/stop.yml +77 -0
  86. data/spec/vcr_cassettes/virtual_machine/suspend.yml +77 -0
  87. data/spec/vcr_cassettes/virtual_machine/unlock.yml +77 -0
  88. data/spec/vcr_cassettes/virtual_machine/unsuspend.yml +77 -0
  89. data/squall.gemspec +25 -62
  90. metadata +224 -42
  91. data/.document +0 -5
  92. data/README.rdoc +0 -17
  93. data/VERSION.yml +0 -5
  94. data/lib/squall/client.rb +0 -87
  95. data/test/fixtures/virtual_machines.json +0 -1
  96. data/test/fixtures/virtual_machines_1.json +0 -1
  97. data/test/helper.rb +0 -31
  98. data/test/test_client.rb +0 -152
  99. data/test/test_squall.rb +0 -12
  100. data/test/test_virtual_machine.rb +0 -98
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe Squall::Template do
4
+ before(:each) do
5
+ default_config
6
+ @template = Squall::Template.new
7
+ @keys = ["label", "operating_system_distro", "operating_system_arch", "created_at",
8
+ "operating_system_tail", "operating_system", "updated_at", "operating_system_edition",
9
+ "allowed_swap", "allow_resize_without_reboot", "virtualization", "id", "file_name",
10
+ "checksum", "version", "user_id", "template_size", "allowed_hot_migrate", "min_disk_size", "state"]
11
+ end
12
+
13
+ describe "#list" do
14
+ use_vcr_cassette 'template/list'
15
+
16
+ it "returns a list" do
17
+ list = @template.list
18
+ list.size.should be(22)
19
+
20
+ first = list.first
21
+ first.keys.should include(*@keys)
22
+ first['label'].should == 'CentOS 5.5 x64'
23
+ end
24
+ end
25
+
26
+ describe "#make_public" do
27
+ use_vcr_cassette 'template/make_public'
28
+ it "requires an id" do
29
+ expect { @template.make_public }.to raise_error(ArgumentError)
30
+ @template.success.should be_false
31
+ end
32
+
33
+ it "404s on not found" do
34
+ expect { @template.make_public(404) }.to raise_error(Squall::NotFound)
35
+ @template.success.should be_false
36
+ end
37
+
38
+ it "makes the template public" do
39
+ pub = @template.make_public(1)
40
+ @template.success.should be_true
41
+ pub.keys.should include(*@keys)
42
+ end
43
+ end
44
+
45
+ describe "#download" do
46
+ use_vcr_cassette 'template/download'
47
+ it "requires an id" do
48
+ expect { @template.download }.to raise_error(ArgumentError)
49
+ @template.success.should be_false
50
+ end
51
+
52
+ it "404s on not found" do
53
+ pending "Broken in OnApp" do
54
+ expect { @template.download(404) }.to raise_error(Squall::NotFound)
55
+ @template.success.should be_false
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Squall::Transaction do
4
+ before(:each) do
5
+ default_config
6
+ @transaction = Squall::Transaction.new
7
+ @keys = ["pid", "created_at", "updated_at", "actor", "priority",
8
+ "parent_type", "action", "id", "user_id", "dependent_transaction_id",
9
+ "allowed_cancel", "parent_id", "params", "log_output", "status", "identifier"
10
+ ]
11
+ end
12
+
13
+ describe "#list" do
14
+ use_vcr_cassette 'transaction/list'
15
+ it "lists transactions" do
16
+ list = @transaction.list
17
+ list.size.should be(3)
18
+
19
+ first = list.first
20
+ first.keys.should include(*@keys)
21
+ end
22
+ end
23
+
24
+ describe "#show" do
25
+ use_vcr_cassette "transaction/show"
26
+ it "requires an id" do
27
+ expect { @transaction.show }.to raise_error(ArgumentError)
28
+ end
29
+
30
+ it "returns not found for invalid" do
31
+ expect { @transaction.show(5) }.to raise_error(Squall::NotFound)
32
+ end
33
+
34
+ it "returns a transaction" do
35
+ transaction = @transaction.show(1)
36
+ transaction.keys.should include(*@keys)
37
+
38
+ transaction['pid'].should == 2180
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,195 @@
1
+ require 'spec_helper'
2
+
3
+ describe Squall::User do
4
+ before(:each) do
5
+ default_config
6
+ @keys = ["total_amount", "activated_at", "created_at", "memory_available", "remember_token_expires_at",
7
+ "used_disk_size", "deleted_at", "updated_at", "used_ip_addresses", "activation_code", "used_cpu_shares",
8
+ "used_cpus", "group_id", "id", "used_memory", "payment_amount", "last_name", "remember_token",
9
+ "disk_space_available", "time_zone", "outstanding_amount", "login", "roles", "email", "first_name"]
10
+ @user = Squall::User.new
11
+ @valid = {:login => 'user', :email => 'me@example.com', :password => 'CD2480A3413F',
12
+ :first_name => 'John', :last_name => 'Doe', :group_id => 10 }
13
+ end
14
+
15
+ describe "#create" do
16
+ use_vcr_cassette "user/create"
17
+ it "requires login" do
18
+ requires_attr(:login) { @user.create }
19
+ end
20
+
21
+ it "requires email" do
22
+ requires_attr(:email) { @user.create(:login => @valid[:login]) }
23
+ end
24
+
25
+ it "requires password" do
26
+ requires_attr(:password) {
27
+ @user.create(:login => @valid[:login], :email => @valid[:email])
28
+ }
29
+ end
30
+
31
+ it "raises error on duplicate account" do
32
+ expect {
33
+ @user.create(@valid.merge(:login => 'usertaken', :email => 'metaken@example.com'))
34
+ }.to raise_error(Squall::RequestError)
35
+ @user.errors['login'].should include("has already been taken")
36
+ @user.errors['email'].should include("has already been taken")
37
+ end
38
+
39
+ it "creates a user" do
40
+ user = @user.create(@valid)
41
+ user['email'].should == @valid['email']
42
+ user['first_name'].should == @valid['first_name']
43
+ user['last_name'].should == @valid['last_name']
44
+ user['group_id'].should == @valid['group_id']
45
+ end
46
+ end
47
+
48
+ describe "#list" do
49
+ use_vcr_cassette "user/list"
50
+ it "returns a user list" do
51
+ users = @user.list
52
+ users.size.should be(2)
53
+ end
54
+
55
+ it "contains first users data" do
56
+ user = @user.list.first
57
+ user.keys.should include(*@keys)
58
+ user['email'].should == "user@example.com"
59
+ end
60
+ end
61
+
62
+ describe "#show" do
63
+ use_vcr_cassette "user/show"
64
+ it "requires an id" do
65
+ expect { @user.show }.to raise_error(ArgumentError)
66
+ end
67
+
68
+ it "returns not found for invalid users" do
69
+ expect { @user.show(5) }.to raise_error(Squall::NotFound)
70
+ end
71
+
72
+ it "returns a user" do
73
+ user = @user.show(1)
74
+ user['login'].should == 'user'
75
+ end
76
+ end
77
+
78
+ describe "#generate_api_key" do
79
+ use_vcr_cassette "user/generate_api_key"
80
+ it "requires an id" do
81
+ expect { @user.generate_api_key }.to raise_error(ArgumentError)
82
+ end
83
+
84
+ it "generates a new key" do
85
+ pending "Broken in OnApp" do
86
+ user = @user.generate_api_key(1)
87
+ user['api_key'].should == '7d97e98f8af710c7e7fe703abc8f639e0ee507c4'
88
+ end
89
+ end
90
+ end
91
+
92
+ describe "#suspend" do
93
+ use_vcr_cassette "user/suspend"
94
+ it "requires an id" do
95
+ expect { @user.suspend }.to raise_error(ArgumentError)
96
+ end
97
+
98
+ it "suspends a user" do
99
+ user = @user.suspend(2)
100
+ user['status'].should == "suspended"
101
+ end
102
+ end
103
+
104
+ describe "#activate" do
105
+ use_vcr_cassette "user/activate"
106
+ it "requires an id" do
107
+ expect { @user.activate }.to raise_error(ArgumentError)
108
+ end
109
+
110
+ it "activates a user" do
111
+ user = @user.activate(2)
112
+ user['status'].should == "active"
113
+ end
114
+
115
+ it "has a unsuspend alias" do
116
+ @user.should respond_to(:unsuspend)
117
+ end
118
+ end
119
+
120
+ describe "#delete" do
121
+ use_vcr_cassette "user/delete"
122
+ it "requires an id" do
123
+ expect { @user.delete }.to raise_error(ArgumentError)
124
+ end
125
+
126
+ it "deltes a user" do
127
+ delete = @user.delete(6)
128
+ delete.should be_true
129
+ end
130
+
131
+ it "returns NotFound for missing user" do
132
+ expect { @user.delete(22222) }.to raise_error(Squall::NotFound)
133
+ end
134
+ end
135
+
136
+ describe "#stats" do
137
+ use_vcr_cassette "user/stats"
138
+ it "requires an id" do
139
+ expect { @user.stats }.to raise_error(ArgumentError)
140
+ end
141
+
142
+ it "returns stats" do
143
+ stats = @user.stats(1)
144
+ stats['virtual_machine_id'].should == 55
145
+ keys = ["created_at", "cost", "updated_at", "stat_time", "id",
146
+ "user_id", "vm_billing_stat_id", "billing_stats", "virtual_machine_id"]
147
+ stats.keys.should include *keys
148
+ end
149
+ end
150
+
151
+ describe "#virtual_machines" do
152
+ use_vcr_cassette "user/virtual_machines"
153
+ it "requires an id" do
154
+ expect { @user.virtual_machines }.to raise_error(ArgumentError)
155
+ end
156
+
157
+ it "404s on not found" do
158
+ pending "Broken in OnApp" do
159
+ expect { @user.virtual_machines(500) }.to raise_error(Squall::NotFound)
160
+ end
161
+ end
162
+
163
+ it "returns the virtual_machines" do
164
+ virtual_machines = @user.virtual_machines(1)
165
+ virtual_machines.size.should be(2)
166
+ keys = ["monthly_bandwidth_used", "cpus", "label", "created_at", "operating_system_distro", "cpu_shares",
167
+ "operating_system", "template_id", "allowed_swap", "local_remote_access_port", "memory", "updated_at",
168
+ "allow_resize_without_reboot", "recovery_mode", "hypervisor_id", "id", "xen_id", "user_id", "total_disk_size",
169
+ "booted", "hostname", "template_label", "identifier", "initial_root_password", "min_disk_size",
170
+ "remote_access_password", "built", "locked", "ip_addresses"]
171
+ virtual_machines.first.should include(*keys)
172
+ end
173
+ end
174
+
175
+ describe "#edit_role" do
176
+ use_vcr_cassette "user/edit_role"
177
+ it "requires an id" do
178
+ expect { @user.edit_role }.to raise_error(ArgumentError)
179
+ end
180
+
181
+ it "404s on not found" do
182
+ expect { @user.edit_role(500, nil) }.to raise_error(Squall::NotFound)
183
+ end
184
+
185
+ it "edits one role for a user" do
186
+ @user.edit_role(7, 4)
187
+ @user.success.should be_true
188
+ end
189
+
190
+ it "edits two roles for a user" do
191
+ @user.edit_role(7, 4, 2)
192
+ @user.success.should be_true
193
+ end
194
+ end
195
+ end