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:
parent
0cc9b10666
commit
13099897a2
8 changed files with 86 additions and 29 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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] = {}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue