icontrol 0.0.2
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/LICENSE +20 -0
- data/README.markdown +9 -0
- data/README.rdoc +16 -0
- data/lib/icontrol.rb +17 -0
- data/lib/icontrol/attributable.rb +36 -0
- data/lib/icontrol/base.rb +197 -0
- data/lib/icontrol/common.rb +109 -0
- data/lib/icontrol/local_lb/common.rb +47 -0
- data/lib/icontrol/local_lb/monitor.rb +17 -0
- data/lib/icontrol/local_lb/monitor_rule.rb +22 -0
- data/lib/icontrol/local_lb/pool.rb +76 -0
- data/lib/icontrol/local_lb/pool_member.rb +5 -0
- data/lib/icontrol/local_lb/profile_auth.rb +6 -0
- data/lib/icontrol/local_lb/profile_http_class.rb +242 -0
- data/lib/icontrol/local_lb/rate_class.rb +4 -0
- data/lib/icontrol/local_lb/rule.rb +4 -0
- data/lib/icontrol/local_lb/snat_pool.rb +4 -0
- data/lib/icontrol/local_lb/virtual_server.rb +611 -0
- data/lib/icontrol/mappings.rb +62 -0
- data/lib/icontrol/statistic_type.rb +508 -0
- data/spec/fixtures/endpoint_helper.rb +14 -0
- data/spec/fixtures/soap/soap_fixture.rb +14 -0
- data/spec/fixtures/wsdl/wsdl_fixture.rb +15 -0
- data/spec/icontrol_local_lb_pool_spec.rb +119 -0
- data/spec/icontrol_local_lb_profile_http_class_spec.rb +271 -0
- data/spec/icontrol_local_lb_rule_spec.rb +22 -0
- data/spec/icontrol_local_lb_virtual_server_spec.rb +664 -0
- data/spec/icontrol_spec.rb +79 -0
- data/spec/spec_helper.rb +54 -0
- metadata +150 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
class EndpointHelper
|
2
|
+
# returns an endpoint to be passed to fakeweb
|
3
|
+
def self.wsdl_endpoint(class_name)
|
4
|
+
fqn = class_name.split("::")
|
5
|
+
return self.soap_endpoint + "?WSDL=#{fqn[1]}.#{fqn[2]}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.soap_endpoint
|
9
|
+
icontrol_base = IControl.config[:base_url].split("://")
|
10
|
+
return icontrol_base[0] + "://" + IControl.config[:user] + ":" + IControl.config[:password] + "@" + icontrol_base[1..-1].join
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "erb"
|
3
|
+
|
4
|
+
class SOAPFixture
|
5
|
+
|
6
|
+
@@responses = {}
|
7
|
+
|
8
|
+
def self.response(operation)
|
9
|
+
return @@responses[operation] if @@responses[operation]
|
10
|
+
file = File.read File.dirname(__FILE__) + "/xml/#{operation}_response.xml"
|
11
|
+
@@responses[operation] = file
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
describe IControl::LocalLB::Pool do
|
3
|
+
|
4
|
+
before do
|
5
|
+
@pool = IControl::LocalLB::Pool.find("pool_test1")
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "constructor" do
|
9
|
+
it "has an initializer that the attributes" do
|
10
|
+
pool = IControl::LocalLB::Pool.new(:id => "pool_test1")
|
11
|
+
pool.class.should be(IControl::LocalLB::Pool)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "find method" do
|
16
|
+
|
17
|
+
describe "when pool is not found" do
|
18
|
+
it "should return nil" do
|
19
|
+
IControl::LocalLB::Pool.find("none").should be(nil)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "when pool is found" do
|
24
|
+
it "has to return a Pool Object" do
|
25
|
+
@pool.class.should be(IControl::LocalLB::Pool)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
describe "create method" do
|
33
|
+
|
34
|
+
it "should return the created object if the creation was successful" do
|
35
|
+
@pools = IControl::LocalLB::Pool.find(:all)
|
36
|
+
@pools.map(&:id).include?("new_test_pool").should be(false)
|
37
|
+
new_created = IControl::LocalLB::Pool.create(
|
38
|
+
:id => "new_test_pool",
|
39
|
+
:lb_method => "LB_METHOD_ROUND_ROBIN",
|
40
|
+
:members => [
|
41
|
+
IControl::Common::IPPortDefinition.new(:address => "192.168.6.122",:port=>"4036"),
|
42
|
+
IControl::Common::IPPortDefinition.new(:address => "192.168.6.123",:port=>"4036")
|
43
|
+
]
|
44
|
+
)
|
45
|
+
|
46
|
+
new_created.id.should == "new_test_pool"
|
47
|
+
new_created.lb_method.should == "LB_METHOD_ROUND_ROBIN"
|
48
|
+
new_created.members.class.should be(Array)
|
49
|
+
new_created.members[0].class.should be(IControl::Common::IPPortDefinition)
|
50
|
+
# @pools = IControl::LocalLB::Pool.find(:all)
|
51
|
+
# @pools.map(&:id).include?("new_test_pool").should be(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
it "should raise an exception when the pool already existed" do
|
56
|
+
lambda{
|
57
|
+
IControl::LocalLB::Pool.create(
|
58
|
+
:id => "new_test_pool",
|
59
|
+
:lb_method => "LB_METHOD_ROUND_ROBIN",
|
60
|
+
:members => [IControl::Common::IPPortDefinition.new(:address => "192.168.6.122",:port=>"4036")]
|
61
|
+
)
|
62
|
+
}.should raise_exception
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "status_for method" do
|
69
|
+
it "should return the status of a given pool member given its address and port" do
|
70
|
+
status = @pool.status_for IControl::LocalLB::PoolMember.new(:address => "192.168.6.3",:port => "5050")
|
71
|
+
status.class.should be(Hash)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should return nil if the member is not found in the pool" do
|
75
|
+
status = @pool.status_for IControl::LocalLB::PoolMember.new(:address => "112.168.6.111",:port => "5050")
|
76
|
+
status.should be(nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
describe "monitor_rule method" do
|
83
|
+
it "should return an instance of MonitorRule" do
|
84
|
+
monitor_rule = @pool.monitor_rule
|
85
|
+
monitor_rule.class.should be(IControl::LocalLB::MonitorRule)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
describe "monitor_rule= method" do
|
91
|
+
it "should allow the assignment of a monitor rule to a pool" do
|
92
|
+
@monitor_rule_before = @pool.monitor_rule
|
93
|
+
monitor_rule = IControl::LocalLB::MonitorRule.new(:monitor_templates => ["tcp"])
|
94
|
+
@pool.monitor_rule = monitor_rule
|
95
|
+
@monitor_rule_after = @pool.monitor_rule
|
96
|
+
# A state should exists in the mock in order to make these tests
|
97
|
+
# @monitor_rule_after.monitor_templates.should_not == @monitor_rule_before.monitor_templates
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
describe "member method" do
|
103
|
+
|
104
|
+
it "should exists" do
|
105
|
+
@pool.member.should_not be(nil)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should return an array of PoolMembers" do
|
109
|
+
@pool.member.class.should be(Array)
|
110
|
+
@pool.member.first.class.should be(IControl::LocalLB::PoolMember)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "lb_method method" do
|
115
|
+
it "should return a String with a valid lb_method constant" do
|
116
|
+
@pool.lb_method.class.should be(String)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,271 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe IControl::LocalLB::ProfileHttpClass do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@profile = IControl::LocalLB::ProfileHttpClass.find("test_profile1")
|
7
|
+
@profile2 = IControl::LocalLB::ProfileHttpClass.find("test_profile2")
|
8
|
+
@arguments = {"host" => "test.com","cookie" => "test_cookie","header" => "test_header", "path" => "/test/path"}
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "find method" do
|
12
|
+
|
13
|
+
it "should have a find class method called find" do
|
14
|
+
IControl::LocalLB::ProfileHttpClass.methods.should include(:find)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return an array of IControl::LocalLB::ProfileHttpClass instances when find(:all) is called" do
|
18
|
+
profiles = IControl::LocalLB::ProfileHttpClass.find(:all)
|
19
|
+
profiles.class.should be(Array)
|
20
|
+
profiles[0].class.should be(IControl::LocalLB::ProfileHttpClass)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return the first element when called with :first argument" do
|
24
|
+
@profile.class.should be(IControl::LocalLB::ProfileHttpClass)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "path_match_pattern" do
|
30
|
+
|
31
|
+
it "should allow retreive its associated path_match_patterns" do
|
32
|
+
@profile.path_match_pattern.class.should be(Array)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
it "should allow retreive its associated path_match_patterns" do
|
37
|
+
@profile.host_match_pattern.class.should be(Array)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
describe "base_profile? method" do
|
43
|
+
|
44
|
+
it "should return a boolean value" do
|
45
|
+
@profile.base_profile?.should be_equal(false)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "default_profile method" do
|
51
|
+
|
52
|
+
it "should exist" do
|
53
|
+
@profile.default_profile.should_not be_nil
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should result another profile" do
|
57
|
+
@profile.default_profile.class.should be(IControl::LocalLB::ProfileHttpClass)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return a base profile" do
|
61
|
+
@profile.default_profile.base_profile?.should be_equal(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
["host","cookie","header","path"].each do |type|
|
67
|
+
|
68
|
+
describe "#{type}_match_pattern method" do
|
69
|
+
|
70
|
+
it "should exist" do
|
71
|
+
@profile2.methods.should include("#{type}_match_pattern".to_sym)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should return an Array" do
|
75
|
+
@profile2.send("#{type}_match_pattern").class.should be(Array)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should not contents any nil value in the Array" do
|
79
|
+
@profile2.send("#{type}_match_pattern").should_not include(nil)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should return valid values" do
|
83
|
+
patterns = @profile2.send("#{type}_match_pattern")
|
84
|
+
patterns.length.should be_>(1)
|
85
|
+
patterns.first[:pattern].should_not be nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe "set_default_#{type}_match_pattern method" do
|
90
|
+
|
91
|
+
it "should exist" do
|
92
|
+
@profile2.methods.should include("set_default_#{type}_match_pattern".to_sym)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should return an empty array" do
|
96
|
+
value = @profile2.send("set_default_#{type}_match_pattern")
|
97
|
+
value.class.should be(Array)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should empty the contents of the array after called" do
|
101
|
+
register_conversation ["IControl.LocalLB.ProfileHttpClass_before_deletion.get_#{type}_match_pattern",
|
102
|
+
"IControl.LocalLB.ProfileHttpClass_after_deletion.get_#{type}_match_pattern"]
|
103
|
+
pattern = @profile.send"get_#{type}_match_pattern"
|
104
|
+
pattern.length.should_not be 0
|
105
|
+
pattern = @profile.send("set_default_#{type}_match_pattern")
|
106
|
+
pattern.length.should be 0
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
["add","remove"].each do |op|
|
111
|
+
|
112
|
+
describe "#{op}_#{type}_host_match_pattern method" do
|
113
|
+
|
114
|
+
it "should exist" do
|
115
|
+
@profile2.methods.should include("#{op}_#{type}_match_pattern".to_sym)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "sould return the recently created pattern if it correctly adds it" do
|
119
|
+
pattern = "test_#{type}"
|
120
|
+
result = @profile2.send("#{op}_#{type}_match_pattern",pattern,true)
|
121
|
+
result["pattern"].should ==(pattern)
|
122
|
+
result["is_glob"].should be(true)
|
123
|
+
end
|
124
|
+
|
125
|
+
it "sould allow the addition of string patterns as well" do
|
126
|
+
pattern = "test_#{type}-regexp"
|
127
|
+
result = @profile2.send("#{op}_#{type}_match_pattern",pattern)
|
128
|
+
result["pattern"].should ==(pattern)
|
129
|
+
result["is_glob"].should be(false)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should #{op} a new #{type} pattern" do
|
133
|
+
register_conversation ["IControl.LocalLB.ProfileHttpClass_before_#{op}.get_#{type}_match_pattern",
|
134
|
+
"IControl.LocalLB.ProfileHttpClass_after_#{op}.get_#{type}_match_pattern"]
|
135
|
+
match_pattern = @profile.send("#{type}_match_pattern")
|
136
|
+
case op
|
137
|
+
when "add" then
|
138
|
+
match_pattern.length.should be 0
|
139
|
+
when "remove" then
|
140
|
+
match_pattern.length.should > 0
|
141
|
+
match_pattern.first[:pattern].should ==@arguments[type]
|
142
|
+
end
|
143
|
+
lambda { @profile.send("#{op}_#{type}_match_pattern",@arguments[type])}.should_not raise_exception
|
144
|
+
match_pattern = @profile.send("#{type}_match_pattern")
|
145
|
+
case op
|
146
|
+
when "add" then
|
147
|
+
match_pattern.length.should_not be 0
|
148
|
+
match_pattern.first[:pattern].should ==@arguments[type]
|
149
|
+
when "remove" then
|
150
|
+
match_pattern.length.should be 0
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
describe "default_profile= method" do
|
159
|
+
|
160
|
+
it "should exist" do
|
161
|
+
@profile.methods.should include(:default_profile=)
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should allow asignment of another profile " do
|
165
|
+
@profile.default_profile = IControl::LocalLB::ProfileHttpClass.find("anythingelse")
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
describe "pool method" do
|
171
|
+
|
172
|
+
it "should return a Pool instance or nil if none found" do
|
173
|
+
|
174
|
+
@profile.pool.should be(nil)
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
describe "pool assignment" do
|
182
|
+
it "should allow to assign a new pool overwriting the one before" do
|
183
|
+
first_pool = nil
|
184
|
+
first_pool = IControl::LocalLB::Pool.find("test_pool1")
|
185
|
+
before_pool = @profile.pool
|
186
|
+
before_pool.should be(nil)
|
187
|
+
after_pool = nil
|
188
|
+
after_pool = @profile.pool = first_pool
|
189
|
+
after_pool.class.should be(IControl::LocalLB::Pool)
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should raise an exception when then pool does not exist" do
|
193
|
+
lambda{
|
194
|
+
@profile.pool = IControl::LocalLB::Pool.new(:id => "I-Dont-Exist")
|
195
|
+
}.should raise_exception
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "rewrite_url method" do
|
200
|
+
it "should exist" do
|
201
|
+
@profile.methods.should include("rewrite_url".to_sym)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should return a hash containing the rewritting rule and the " do
|
205
|
+
rewrite_url = @profile2.rewrite_url
|
206
|
+
rewrite_url.class.should be(Hash)
|
207
|
+
rewrite_url[:rule].class.should be(String)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
describe "unset_rewrite_url" do
|
212
|
+
it "should exist" do
|
213
|
+
@profile.methods.should include("unset_rewrite_url".to_sym)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should leave the field empty" do
|
217
|
+
@profile.unset_rewrite_url.should be(nil)
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
221
|
+
|
222
|
+
describe "set_rewrite_url method" do
|
223
|
+
|
224
|
+
it "should exist" do
|
225
|
+
@profile.methods.should include("set_rewrite_url".to_sym)
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should allow the assignment of a new rewrite url" do
|
229
|
+
rewrite_url = @profile2.set_rewrite_url "/new_url_test"
|
230
|
+
rewrite_url[:rule].class.should be(String)
|
231
|
+
end
|
232
|
+
|
233
|
+
end
|
234
|
+
|
235
|
+
describe "redirect_location method" do
|
236
|
+
it "should exist" do
|
237
|
+
@profile.methods.should include("redirect_location".to_sym)
|
238
|
+
end
|
239
|
+
|
240
|
+
it "should return a hash containing the redirect_location " do
|
241
|
+
rewrite_url = @profile2.redirect_location
|
242
|
+
rewrite_url.class.should be(Hash)
|
243
|
+
rewrite_url[:rule].class.should be(String)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
describe "set_redirect_location method" do
|
249
|
+
|
250
|
+
it "should exist" do
|
251
|
+
@profile.methods.should include("set_redirect_location".to_sym)
|
252
|
+
end
|
253
|
+
|
254
|
+
it "should allow the assignment of a new redirect_location" do
|
255
|
+
rewrite_url = @profile2.set_redirect_location "new_host"
|
256
|
+
rewrite_url[:rule].class.should be(String)
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
describe "create method" do
|
262
|
+
it "should exist" do
|
263
|
+
IControl::LocalLB::ProfileHttpClass.methods.should include(:create!)
|
264
|
+
end
|
265
|
+
|
266
|
+
it "should return the created Profile" do
|
267
|
+
IControl::LocalLB::ProfileHttpClass.create!("new_created_profile")
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe IControl::LocalLB::Rule do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@rule = IControl::LocalLB::Rule.find(:first)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "find method" do
|
10
|
+
|
11
|
+
it "should have a find class method called find" do
|
12
|
+
IControl::LocalLB::Rule.methods.should include(:find)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have retreive an object when find is call with id or nil it the object does not exists" do
|
16
|
+
IControl::LocalLB::Rule.find("irule_test").class.should be(IControl::LocalLB::Rule)
|
17
|
+
IControl::LocalLB::VirtualServer.find("unknown_rule").class.should_not be(IControl::LocalLB::Rule)
|
18
|
+
IControl::LocalLB::VirtualServer.find("unknown_rule").should be(nil)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|