From 23cded277b7fc1e0da5b8a0ba6e0cce9235cb4da Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Tue, 20 Aug 2013 16:45:48 -0500 Subject: [PATCH] [Rackspace|Load Balancers] Added get_stats and mock for create_load_balancer --- lib/fog/rackspace/load_balancers.rb | 1 + .../models/load_balancers/load_balancer.rb | 5 +++ .../load_balancers/create_load_balancer.rb | 12 +++++++ .../requests/load_balancers/get_stats.rb | 31 +++++++++++++++++++ .../load_balancers/load_balancer_tests.rb | 5 +++ .../load_balancers/get_stats_tests.rb | 13 ++++++++ .../requests/load_balancers/helper.rb | 9 ++++++ 7 files changed, 76 insertions(+) create mode 100644 lib/fog/rackspace/requests/load_balancers/get_stats.rb create mode 100644 tests/rackspace/requests/load_balancers/get_stats_tests.rb diff --git a/lib/fog/rackspace/load_balancers.rb b/lib/fog/rackspace/load_balancers.rb index d14f20a56..fe8adb96d 100644 --- a/lib/fog/rackspace/load_balancers.rb +++ b/lib/fog/rackspace/load_balancers.rb @@ -73,6 +73,7 @@ module Fog request :get_error_page request :set_error_page request :remove_error_page + request :get_stats module Shared diff --git a/lib/fog/rackspace/models/load_balancers/load_balancer.rb b/lib/fog/rackspace/models/load_balancers/load_balancer.rb index 4891f9375..cca2b6ac2 100644 --- a/lib/fog/rackspace/models/load_balancers/load_balancer.rb +++ b/lib/fog/rackspace/models/load_balancers/load_balancer.rb @@ -196,6 +196,11 @@ module Fog service.get_load_balancer_usage(identity, options).body end + def stats + requires :identity + service.get_stats(identity).body + end + def error_page requires :identity service.get_error_page(identity).body['errorpage']['content'] diff --git a/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb b/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb index 304b09aa3..5f36f5bc1 100644 --- a/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb +++ b/lib/fog/rackspace/requests/load_balancers/create_load_balancer.rb @@ -24,6 +24,18 @@ module Fog ) end end + + class Mock + def create_load_balancer(name, protocol, port, virtual_ips, nodes, options = {}) + data = {"loadBalancer"=>{"name"=>name, "id"=>uniq_id, "protocol"=>protocol, "port"=>port, "algorithm"=>"RANDOM", "status"=>"BUILD", + "cluster"=>{"name"=>"ztm-n13.dfw1.lbaas.rackspace.net"}, "timeout"=>30, "created"=>{"time"=>"2013-08-20T20:52:44Z"}, + "updated"=>{"time"=>"2013-08-20T20:52:44Z"}, "halfClosed"=>false, "connectionLogging"=>{"enabled"=>false}, "contentCaching"=>{"enabled"=>false}}} + data["virtual_ips"] = virtual_ips.collect {|n| {"virtualIps"=>[{"address"=>"192.237.192.152", "id"=>uniq_id, "type"=>n[:type], "ipVersion"=>"IPV4"}, {"address"=>"2001:4800:7901:0000:ba81:a6a5:0000:0002", "id"=>9153169, "type"=>"PUBLIC", "ipVersion"=>"IPV6"}], "sourceAddresses"=>{"ipv6Public"=>"2001:4800:7901::13/64", "ipv4Servicenet"=>"10.189.254.5", "ipv4Public"=>"166.78.44.5"}} + data["nodes"] = nodes.collect {|n| {"address"=>n[:address], "id"=>uniq_id, "type"=>"PRIMARY", "port"=>n[:port], "status"=>"ONLINE", "condition"=>"ENABLED", "weight"=>1}} + data = Excon::Response.new(:body => data, :status => 202) + } + end + end end end end diff --git a/lib/fog/rackspace/requests/load_balancers/get_stats.rb b/lib/fog/rackspace/requests/load_balancers/get_stats.rb new file mode 100644 index 000000000..ddb4aeefa --- /dev/null +++ b/lib/fog/rackspace/requests/load_balancers/get_stats.rb @@ -0,0 +1,31 @@ +module Fog + module Rackspace + class LoadBalancers + class Real + def get_stats(load_balancer_id) + + request( + :expects => 200, + :path => "loadbalancers/#{load_balancer_id}/stats", + :method => 'GET' + ) + end + end + + class Mock + def get_stats(load_balancer_id) + mock_data = { + 'connectTimeOut' => 0, + 'connectError' => 1, + 'connectFailure' => 2, + 'dataTimedOut' => 3, + 'keepAliveTimedOut' => 4, + 'maxConn' => 5 + } + + Excon::Response.new(:body => mock_data, :status => 200) + end + end + end + end +end \ No newline at end of file diff --git a/tests/rackspace/models/load_balancers/load_balancer_tests.rb b/tests/rackspace/models/load_balancers/load_balancer_tests.rb index 1397324ec..bea275406 100644 --- a/tests/rackspace/models/load_balancers/load_balancer_tests.rb +++ b/tests/rackspace/models/load_balancers/load_balancer_tests.rb @@ -20,6 +20,11 @@ Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer', ['rackspace']) do end @instance.wait_for { ready? } + + tests('#stats').succeeds do + @instance.stats + end + tests('#enable_connection_logging').succeeds do @instance.enable_connection_logging returns(true) { @instance.connection_logging } diff --git a/tests/rackspace/requests/load_balancers/get_stats_tests.rb b/tests/rackspace/requests/load_balancers/get_stats_tests.rb new file mode 100644 index 000000000..ebb8b344f --- /dev/null +++ b/tests/rackspace/requests/load_balancers/get_stats_tests.rb @@ -0,0 +1,13 @@ +Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer_get_stats', ['rackspace']) do + + given_a_load_balancer_service do + given_a_load_balancer do + tests('success') do + @lb.wait_for { ready? } + tests("#get_stats(#{@lb.id})").formats(LOAD_BALANCER_STATS_FORMAT) do + @service.get_stats(@lb.id).body + end + end + end + end +end \ No newline at end of file diff --git a/tests/rackspace/requests/load_balancers/helper.rb b/tests/rackspace/requests/load_balancers/helper.rb index 7f79f9250..407462b23 100644 --- a/tests/rackspace/requests/load_balancers/helper.rb +++ b/tests/rackspace/requests/load_balancers/helper.rb @@ -32,6 +32,15 @@ LOAD_BALANCER_USAGE_FORMAT = { ] } +LOAD_BALANCER_STATS_FORMAT = { + 'connectTimeOut' => Integer, + 'connectError' => Integer, + 'connectFailure' => Integer, + 'dataTimedOut' => Integer, + 'keepAliveTimedOut' => Integer, + 'maxConn' => Integer +} + SSL_TERMINATION_FORMAT = { 'sslTermination' => { 'certificate' => String,