From 4ff115c1de1af410eda6b429139f161b8425648b Mon Sep 17 00:00:00 2001 From: Kevin Chan Date: Tue, 21 Feb 2012 17:29:36 +0800 Subject: [PATCH] - Fixes tests to run in both mock and non-mock mode - Clean ups and fixes --- lib/fog/joyent/compute.rb | 17 +++++++ lib/fog/joyent/requests/compute/create_key.rb | 6 ++- lib/fog/joyent/requests/compute/delete_key.rb | 6 +-- .../joyent/requests/compute/get_machine.rb | 4 +- .../joyent/requests/compute/get_package.rb | 6 ++- .../joyent/requests/compute/list_packages.rb | 3 +- tests/joyent/requests/compute/keys_tests.rb | 51 +++++++++---------- .../joyent/requests/compute/machines_tests.rb | 34 +++++++------ .../joyent/requests/compute/packages_tests.rb | 20 +++++--- 9 files changed, 92 insertions(+), 55 deletions(-) diff --git a/lib/fog/joyent/compute.rb b/lib/fog/joyent/compute.rb index 0dc486dfe..f236c87b6 100644 --- a/lib/fog/joyent/compute.rb +++ b/lib/fog/joyent/compute.rb @@ -147,6 +147,7 @@ module Fog if response.headers["Content-Type"] == "application/json" response.body = MultiJson.decode(response.body) + response.body = decode_time_props(response.body) end response @@ -171,6 +172,22 @@ module Fog } end + def decode_time_props(obj) + if obj.kind_of?(Hash) + if obj["created"] + obj["created"] = Time.parse(obj["created"]) + end + + if obj["updated"] + obj["updated"] = Time.parse(obj["updated"]) + end + elsif obj.kind_of?(Array) + obj.map do |o| + decode_time_props(o) + end + end + obj + end end # Real end end diff --git a/lib/fog/joyent/requests/compute/create_key.rb b/lib/fog/joyent/requests/compute/create_key.rb index 53fa59516..4975f36a4 100644 --- a/lib/fog/joyent/requests/compute/create_key.rb +++ b/lib/fog/joyent/requests/compute/create_key.rb @@ -8,10 +8,12 @@ module Fog def create_key(params) name = params[:name] key = params[:key] + record = { "name" => name, "key" => key, - "created" => Time.now.utc + "created" => Time.now.utc, + "updated" => Time.now.utc } self.data[:keys][name] = record @@ -43,7 +45,7 @@ module Fog request( :method => "POST", :path => "/my/keys", - :body => { "name" => params[:name], "body" => params[:body] }, + :body => { "name" => params[:name], "key" => params[:key] }, :expects => 201 ) end diff --git a/lib/fog/joyent/requests/compute/delete_key.rb b/lib/fog/joyent/requests/compute/delete_key.rb index d7b16df5b..3c5a6fbd4 100644 --- a/lib/fog/joyent/requests/compute/delete_key.rb +++ b/lib/fog/joyent/requests/compute/delete_key.rb @@ -6,7 +6,7 @@ module Fog def delete_key(keyname) if self.data[:keys].delete(keyname) response = Excon::Response.new - response.status = 200 + response.status = 204 response else raise Excon::Errors::NotFound, "Not Found" @@ -15,11 +15,11 @@ module Fog end class Real - def delete_key(keyname) + def delete_key(name) request( :method => "DELETE", :path => "/my/keys/#{name}", - :expects => 200 + :expects => 204 ) end end # Real diff --git a/lib/fog/joyent/requests/compute/get_machine.rb b/lib/fog/joyent/requests/compute/get_machine.rb index 90b6c9497..08fd2cf56 100644 --- a/lib/fog/joyent/requests/compute/get_machine.rb +++ b/lib/fog/joyent/requests/compute/get_machine.rb @@ -8,6 +8,7 @@ module Fog res = Excon::Response.new res.status = 200 res.body = machine + res else raise Excon::Errors::NotFound, "Not Found" end @@ -18,7 +19,8 @@ module Fog def get_machine(uuid) request( :method => "GET", - :path => "/my/machines/#{uuid}" + :path => "/my/machines/#{uuid}", + :expects => 200 ) end end diff --git a/lib/fog/joyent/requests/compute/get_package.rb b/lib/fog/joyent/requests/compute/get_package.rb index ab4f0312a..adc5cfc15 100644 --- a/lib/fog/joyent/requests/compute/get_package.rb +++ b/lib/fog/joyent/requests/compute/get_package.rb @@ -1,3 +1,5 @@ +require 'uri' + module Fog module Compute class Joyent @@ -17,9 +19,11 @@ module Fog class Real def get_package(name) + name = URI.escape(name) request( :method => "GET", - :path => "/my/packages/#{name}" + :path => "/my/packages/#{name}", + :expects => 200 ) end diff --git a/lib/fog/joyent/requests/compute/list_packages.rb b/lib/fog/joyent/requests/compute/list_packages.rb index 66cad6010..e08b91e30 100644 --- a/lib/fog/joyent/requests/compute/list_packages.rb +++ b/lib/fog/joyent/requests/compute/list_packages.rb @@ -24,7 +24,8 @@ module Fog def list_packages request( :path => "/my/packages", - :method => "GET" + :method => "GET", + :expects => 200 ) end end # Real diff --git a/tests/joyent/requests/compute/keys_tests.rb b/tests/joyent/requests/compute/keys_tests.rb index ae26b9ee5..e2ad64be9 100644 --- a/tests/joyent/requests/compute/keys_tests.rb +++ b/tests/joyent/requests/compute/keys_tests.rb @@ -3,45 +3,44 @@ Shindo.tests("Fog::Compute::Joyent | key requests", ['joyent']) do @key_format = { "name" => String, "key" => String, - "created" => Time + "created" => Time, + "updated" => Time } before do - Fog::Compute[:joyent].create_key( - :name => "key1", - :key => "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlau1...") - - Fog::Compute[:joyent].create_key( - :name => "key2", - :key => "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlau1...") - end - - tests("#list_keys").formats([@key_format]) do - Fog::Compute[:joyent].list_keys.body - end - - tests("#list_keys") do - returns(2) do - Fog::Compute[:joyent].list_keys.body.length + # + # Clear out all the test keys on the account in prep for test + # + Fog::Compute[:joyent].list_keys.body.each do |key| + if key["name"] =~ /^fog-test/ + Fog::Compute[:joyent].delete_key(key["name"]) + end end + + @test_key_name = "fog-test-#{Time.now.utc.to_i}" + + Fog::Compute[:joyent].create_key( + :name => @test_key_name, + :key => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWxSNYngOTeu0pYd+2tpfYGISuMfMUNGyAIh4yRprAbacVddRq4Nyr12vDklzaRTzgd9PgX/82JMb4RARbVTtUKXJXmaBLvg2epGM+ScanZIitzL53whJrlGx+7nT+TnRdkB1XG7uIf2EpTQBaKrT4iG0magCXh5bmOqCyWte2gV8fArMg5bZclUT1p2E7qEW0htaLOiMSyGkjBlxb6vYQCA/Pa8VWETHehIF46S942gCj0aaL81gTocfyTm5/F+AgvUAsjHzRVkB/Dlhwq7Q7sK+4iAhlKPYMflkKC8r+nF0/LL9S3lllLZvbkEWJfEqlMCAbgmjTpYlBzQEqf/eN" + ) + end + + tests("#list_keys").formats(@key_format) do + Fog::Compute[:joyent].list_keys.body.first end tests("#get_key").formats(@key_format) do - Fog::Compute[:joyent].get_key('key1').body - end - - tests("#get_key").formats(@key_format) do - Fog::Compute[:joyent].get_key('key2').body + Fog::Compute[:joyent].get_key(@test_key_name).body end tests("#delete_key") do - returns(200, "returns status code 200") do - Fog::Compute[:joyent].delete_key("key1").status + returns(204 , "returns status code 204") do + Fog::Compute[:joyent].delete_key(@test_key_name).status end raises(Excon::Errors::NotFound, "when a key no longer exists") do - Fog::Compute[:joyent].delete_key("key1") - Fog::Compute[:joyent].delete_key("key1") + Fog::Compute[:joyent].delete_key(@test_key_name) + Fog::Compute[:joyent].delete_key(@test_key_name) end end diff --git a/tests/joyent/requests/compute/machines_tests.rb b/tests/joyent/requests/compute/machines_tests.rb index 3276c7122..5256d7a51 100644 --- a/tests/joyent/requests/compute/machines_tests.rb +++ b/tests/joyent/requests/compute/machines_tests.rb @@ -14,26 +14,30 @@ Shindo.tests("Fog::Compute[:joyent] | machine requests", ["joyent"]) do "updated" => Time } - @machines = Fog::Compute[:joyent].data[:machines] = { - "15080eca-3786-4bb8-a4d0-f43e1981cd72" => { - "id" => "15080eca-3786-4bb8-a4d0-f43e1981cd72", - "name" => "getting-started", - "type" => "smartmachine", - "state" => "running", - "dataset" => "sdc:sdc:smartos:1.3.15", - "memory" => 256, - "disk" => 5120, - "ips" => ["10.88.88.50"], - "metadata" => {}, - "created" => Time.parse("2011-06-03T00:02:31+00:00"), - "updated" => Time.parse("2011-06-03T00:02:31+00:00") + if Fog.mock? + @machines = Fog::Compute[:joyent].data[:machines] = { + "15080eca-3786-4bb8-a4d0-f43e1981cd72" => { + "id" => "15080eca-3786-4bb8-a4d0-f43e1981cd72", + "name" => "getting-started", + "type" => "smartmachine", + "state" => "running", + "dataset" => "sdc:sdc:smartos:1.3.15", + "memory" => 256, + "disk" => 5120, + "ips" => ["10.88.88.50"], + "metadata" => {}, + "created" => Time.parse("2011-06-03T00:02:31+00:00"), + "updated" => Time.parse("2011-06-03T00:02:31+00:00") + } } - } + end @provider = Fog::Compute[:joyent] + # # https://us-west-1.api.joyentcloud.com/docs#ListMachines + # tests("#list_machines") do if Fog.mock? returns(@machines.length, "correct number of machines") do @@ -54,7 +58,7 @@ Shindo.tests("Fog::Compute[:joyent] | machine requests", ["joyent"]) do tests("#get_machine") do formats(@machine_format) do id = @provider.list_machines.body.first["id"] - @provider.get_machine(id) + @provider.get_machine(id).body end end end diff --git a/tests/joyent/requests/compute/packages_tests.rb b/tests/joyent/requests/compute/packages_tests.rb index 7121dc107..4bd46a6ef 100644 --- a/tests/joyent/requests/compute/packages_tests.rb +++ b/tests/joyent/requests/compute/packages_tests.rb @@ -1,6 +1,4 @@ Shindo.tests("Fog::Compute[:joyent] | package requests", ["joyent"]) do - @data = Fog::Compute[:joyent].data - @package_format = { 'name' => String, 'vcpus' => Integer, @@ -11,6 +9,8 @@ Shindo.tests("Fog::Compute[:joyent] | package requests", ["joyent"]) do } if Fog.mock? + @data = Fog::Compute[:joyent].data + @data[:packages] = { "regular_128" => { "name" => "regular_128", @@ -43,15 +43,23 @@ Shindo.tests("Fog::Compute[:joyent] | package requests", ["joyent"]) do formats([@package_format]) do Fog::Compute[:joyent].list_packages.body end + end - actual = @data[:packages].values.length - returns(actual, "has correct number of packages") do - Fog::Compute[:joyent].list_packages.body.length + if Fog.mock? + tests("#list_packages") do + actual = @data[:packages].values.length + returns(actual, "has correct number of packages") do + Fog::Compute[:joyent].list_packages.body.length + end end end tests("#get_package") do - pkgid = @data[:packages].keys.first + pkgid = if Fog.mock? + @data[:packages].keys.first + else + Fog::Compute[:joyent].list_packages.body.first["name"] + end formats(@package_format) do Fog::Compute[:joyent].get_package(pkgid).body