diff --git a/lib/fog/rackspace/mock_data.rb b/lib/fog/rackspace/mock_data.rb index 1bfa37036..07aa4921c 100644 --- a/lib/fog/rackspace/mock_data.rb +++ b/lib/fog/rackspace/mock_data.rb @@ -89,7 +89,7 @@ module Fog 'cidr' => '192.168.0.0/24' } - key_pair1 = { + key_pair = { 'public_key' => "ssh-rsa ".concat(Fog::Mock.random_letters(372)).concat(" Generated by Nova\n"), 'private_key' => "-----BEGIN RSA PRIVATE KEY-----\n".concat(Fog::Mock.random_letters(1635)).concat("\n-----END RSA PRIVATE KEY-----\n"), 'user_id' => user_id, @@ -97,14 +97,6 @@ module Fog 'fingerprint' => "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" } - key_pair2 = { - 'public_key' => "ssh-rsa ".concat(Fog::Mock.random_letters(372)).concat(" Generated by Nova\n"), - 'private_key' => "-----BEGIN RSA PRIVATE KEY-----\n".concat(Fog::Mock.random_letters(1635)).concat("\n-----END RSA PRIVATE KEY-----\n"), - 'user_id' => user_id, - 'name' => Fog::Mock.random_letters(32), - 'fingerprint' => "11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11" - } - #Block Storage volume_type1_id = Fog::Mock.random_numbers(3).to_s volume_type2_id = Fog::Mock.random_numbers(3).to_s @@ -127,7 +119,8 @@ module Fog :images => Hash.new { |h,k| h[k] = image unless k == NOT_FOUND_ID }, :networks => Hash.new { |h,k| h[k] = network unless k == NOT_FOUND_ID }, :keys => [], - :keypairs => [{'keypair' => key_pair1}, {'keypair' => key_pair2}], + :keypair => key_pair, + :keypairs => [], :servers => {}, #Block Storage @@ -141,7 +134,7 @@ module Fog mock_data[:flavors][flavor_id] = flavor mock_data[:images][image_id] = image mock_data[:networks][network_id] = network - + mock_data end end[@rackspace_api_key] diff --git a/lib/fog/rackspace/requests/compute_v2/create_keypair.rb b/lib/fog/rackspace/requests/compute_v2/create_keypair.rb index 5d0e2ed48..4601d444c 100644 --- a/lib/fog/rackspace/requests/compute_v2/create_keypair.rb +++ b/lib/fog/rackspace/requests/compute_v2/create_keypair.rb @@ -34,13 +34,13 @@ module Fog class Mock def create_keypair(name, public_key=nil) - - k = self.data[:keypairs][0] - k['keypair']['name'] = name + k = self.data[:keypair] + k['name'] = name + self.data[:keypairs] << { 'keypair' => k } response = Excon::Response.new response.status = 200 - response.body = k + response.body = { 'keypair' => k } response end end diff --git a/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb b/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb index 03144dc0e..010b53248 100644 --- a/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb +++ b/lib/fog/rackspace/requests/compute_v2/delete_keypair.rb @@ -10,8 +10,7 @@ module Fog # # ==== Returns # * response<~Excon::Response>: - # * body<~Hash>: - # *'success'<~Bool>: true or false for success + # def delete_keypair(key_name) request( :method => 'DELETE', @@ -21,6 +20,17 @@ module Fog end end + class Mock + def delete_keypair(name) + if self.data[:keypairs].select { |k| name.include? k['keypair']['name'] }.empty? + raise Fog::Compute::RackspaceV2::NotFound + else + self.data[:keypairs].reject! { |k| name.include? k['keypair']['name'] } + response(:status => 202) + end + end + end + end end end diff --git a/lib/fog/rackspace/requests/compute_v2/get_keypair.rb b/lib/fog/rackspace/requests/compute_v2/get_keypair.rb index f91c65ede..8eb3a3f67 100644 --- a/lib/fog/rackspace/requests/compute_v2/get_keypair.rb +++ b/lib/fog/rackspace/requests/compute_v2/get_keypair.rb @@ -24,6 +24,18 @@ module Fog ) end end + + class Mock + def get_keypair(name) + key = self.data[:keypairs].select { |k| name.include? k['keypair']['name'] }.first + if key.nil? + raise Fog::Compute::RackspaceV2::NotFound + end + + response(:body => key, :status => 200) + end + end + end end end diff --git a/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb b/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb index 7e83f9f7f..9c927e3a6 100644 --- a/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb +++ b/lib/fog/rackspace/requests/compute_v2/list_keypairs.rb @@ -26,9 +26,7 @@ module Fog def list_keypairs response = Excon::Response.new response.status = 200 - response.body = { - "keypairs" => self.data[:keypairs] - } + response.body = { 'keypairs' => self.data[:keypairs] } response end end diff --git a/tests/rackspace/requests/compute_v2/keypair_tests.rb b/tests/rackspace/requests/compute_v2/keypair_tests.rb new file mode 100644 index 000000000..1590df0c3 --- /dev/null +++ b/tests/rackspace/requests/compute_v2/keypair_tests.rb @@ -0,0 +1,55 @@ +Shindo.tests('Fog::Compute::RackspaceV2 | keypair_tests', ['rackspace']) do + + keypair_format = { + 'name' => String, + 'public_key' => String, + 'fingerprint' => String, + } + + create_keypair_format = { + 'keypair' => keypair_format.merge({ + 'user_id' => String, + 'private_key' => String + }) + } + + list_keypair_format = { + 'keypairs' => [ 'keypair' => keypair_format ] + } + + get_keypair_format = { + 'keypair' => keypair_format + } + + service = Fog::Compute.new(:provider => 'Rackspace', :version => 'V2') + keypair_name = Fog::Mock.random_letters(32) + + tests('success') do + tests('#create_keypair').formats(create_keypair_format) do + service.create_keypair(keypair_name).body + end + + tests('#list_keypairs').formats(list_keypair_format) do + service.list_keypairs.body + end + + tests('#get_keypair').formats(get_keypair_format) do + service.get_keypair(keypair_name).body + end + + tests('#delete_keypair') do + service.delete_keypair(keypair_name).body + end + end + + unknown_keypair_name = Fog::Mock.random_letters(32) + tests('failure') do + tests('#get_unknown_keypair').raises(Fog::Compute::RackspaceV2::NotFound) do + service.get_keypair(unknown_keypair_name).body + end + + tests('#delete_unknown_keypair').raises(Fog::Compute::RackspaceV2::NotFound) do + service.delete_keypair(unknown_keypair_name).body + end + end +end