1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

Refactor to use some utility classes.

This commit is contained in:
Ash Wilson 2013-12-17 15:05:43 -05:00
parent 0cc9b10666
commit 13099897a2
8 changed files with 86 additions and 29 deletions

View file

@ -1,6 +1,7 @@
module Fog
module Storage
class Rackspace
class Real
# Delete an existing container
@ -20,6 +21,28 @@ module Fog
end
end
class Mock
def delete_container(name)
escaped = Fog::Rackspace.escape(name)
container = data[escaped]
if container.nil?
raise Fog::Storage::Rackspace::NotFound.new
end
if !container.empty?
raise Excon::Errors::Conflict.new 'Conflict'
end
data.delete escaped
response = Excon::Response.new
response.status = 204
response
end
end
end
end
end

View file

@ -1,6 +1,7 @@
module Fog
module Storage
class Rackspace
class Real
# Get details for container and total bytes stored
@ -47,14 +48,11 @@ module Fog
class Mock
def get_container(container, options = {})
escaped = Fog::Rackspace.escape(container)
unless data.has_key?(escaped)
raise Fog::Storage::Rackspace::NotFound.new
end
c = data[escaped]
raise Fog::Storage::Rackspace::NotFound.new if c.nil?
results = []
data[escaped].each do |key, mock_file|
next if key == :meta
c.objects.each do |key, mock_file|
results << mock_file.to_h
end

View file

@ -35,17 +35,11 @@ module Fog
class Mock
def get_containers(options = {})
results = []
data.each do |container, files|
next if container == :meta
total = files.keys.
reject { |k| k == :meta }.
inject(0) { |sum, k| sum + files[k].bytes }
results << {
"name" => container,
"count" => files.size - 1,
"bytes" => total
results = data.map do |name, container|
{
"name" => name,
"count" => container.objects.size,
"bytes" => container.bytes_used
}
end
response = Excon::Response.new

View file

@ -31,14 +31,15 @@ module Fog
class Mock
def head_container(container)
escaped = Fog::Rackspace.escape(container)
c = data[escaped]
unless data.has_key?(escaped)
if c.nil?
raise Fog::Storage::Rackspace::NotFound.new
end
response = Excon::Response.new
response.status = 204
response.headers = data[escaped][:meta].dup
response.headers = c.headers
response
end
end

View file

@ -1,6 +1,7 @@
module Fog
module Storage
class Rackspace
class Real
# List number of containers and total bytes stored
@ -24,6 +25,22 @@ module Fog
end
end
class Mock
def head_containers
bytes_used = 0
container_count = data.size
response = Excon::Response.new
response.status = 204
response.headers = {
'X-Account-Bytes-Used' => bytes_used,
'X-Account-Container-Count' => container_count
}
response
end
end
end
end
end

View file

@ -1,6 +1,7 @@
module Fog
module Storage
class Rackspace
class Real
# Create a new container
@ -25,15 +26,14 @@ module Fog
class Mock
def put_container(name, options={})
escaped = Fog::Rackspace.escape(name)
response = Excon::Response.new
meta = {}
options.keys.each do |k|
meta[k] = options[k] if k =~ /^X-Container-Meta/
end
meta['X-Container-Object-Count'] = 0
meta['X-Container-Bytes-Used'] = 0
data[escaped] = { :meta => meta }
container = MockContainer.new
options.keys.each do |k|
container.meta[k] = options[k] if k =~ /^X-Container-Meta/
end
data[escaped] = container
response = Excon::Response.new
if data.has_key?(escaped)
response.status = 202 # Accepted
else

View file

@ -64,6 +64,32 @@ module Fog
class Mock < Fog::Rackspace::Service
include Utils
class MockContainer
attr_reader :objects, :meta
def initialize
@objects, @meta = {}, {}
end
def empty?
@objects.empty?
end
def bytes_used
@objects.values.map { |o| o.size }.inject(0) { |a, b| a + b }
end
def headers
@meta.merge({
'X-Container-Object-Count' => @objects.size,
'X-Container-Bytes-Used' => bytes_used
})
end
end
class MockObject
end
def self.data
@data ||= Hash.new do |hash, key|
hash[key] = {}

View file

@ -39,12 +39,10 @@ Shindo.tests('Fog::Storage[:rackspace] | container requests', ["rackspace"]) do
end
tests("#head_containers").succeeds do
pending if Fog.mocking?
Fog::Storage[:rackspace].head_containers
end
tests("#delete_container('fogcontainertests')").succeeds do
pending if Fog.mocking?
Fog::Storage[:rackspace].delete_container('fogcontainertests')
end