Class: Fog::Storage::Softlayer::Mock

Inherits:
Object
  • Object
show all
Includes:
Integrity
Defined in:
lib/fog/softlayer/storage.rb,
lib/fog/softlayer/requests/storage/get_object.rb,
lib/fog/softlayer/requests/storage/put_object.rb,
lib/fog/softlayer/requests/storage/copy_object.rb,
lib/fog/softlayer/requests/storage/delete_object.rb,
lib/fog/softlayer/requests/storage/get_container.rb,
lib/fog/softlayer/requests/storage/put_container.rb,
lib/fog/softlayer/requests/storage/get_containers.rb,
lib/fog/softlayer/requests/storage/delete_container.rb,
lib/fog/softlayer/requests/storage/get_object_https_url.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Integrity

#validate_username!

Constructor Details

#initialize(options = {}) ⇒ Mock

Returns a new instance of Mock.



61
62
63
64
65
66
67
# File 'lib/fog/softlayer/storage.rb', line 61

def initialize(options={})
  @softlayer_api_key = options[:softlayer_api_key]
  @softlayer_username = options[:softlayer_username]
  validate_username! @softlayer_username
  @path = '/v1/AUTH_1234'
  @containers = {}
end

Class Method Details

.dataObject



51
52
53
54
55
# File 'lib/fog/softlayer/storage.rb', line 51

def self.data
  @data ||= Hash.new do |hash, key|
    hash[key] = {}
  end
end

.resetObject



57
58
59
# File 'lib/fog/softlayer/storage.rb', line 57

def self.reset
  @data = nil
end

Instance Method Details

#change_account(account) ⇒ Object



77
78
79
80
81
# File 'lib/fog/softlayer/storage.rb', line 77

def ()
  @original_path ||= @path
  version_string = @original_path.split('/')[1]
  @path = "/#{version_string}/#{}"
end

#copy_object(source_container, source_object, target_container, target_object, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/fog/softlayer/requests/storage/copy_object.rb', line 5

def copy_object(source_container, source_object, target_container, target_object, options={})
  response = Excon::Response.new
  if @containers[source_container].nil? || @containers[source_container][source_object].nil? || @containers[target_container].nil?
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
  else # Success
    @containers[target_container][target_object] = @containers[source_container][source_object]
    response.body = ''
    response.status = 201
  end
  response
end

#dataObject



69
70
71
# File 'lib/fog/softlayer/storage.rb', line 69

def data
  self.class.data[@softlayer_username]
end

#delete_container(name) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/fog/softlayer/requests/storage/delete_container.rb', line 5

def delete_container(name)
  response = Excon::Response.new
  if @containers[name].nil? # Container doesn't exist.
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
  elsif @containers[name].length > 0  # Container not empty
    response.body = '<html><h1>Conflict</h1><p>There was a conflict when trying to complete your request.</p></html>'
    response.status = 409
  else # Success
    response.body = ''
    response.status = 204
  end
  response
end

#delete_object(container, object) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/fog/softlayer/requests/storage/delete_object.rb', line 6

def delete_object(container, object)
  response = Excon::Response.new
  if @containers[container].nil? || @containers[container][object].nil? # Container or object doesn't exist.
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
  else # Success
    response.body = ''
    response.status = 204
  end
  response
end

#get_container(container, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/fog/softlayer/requests/storage/get_container.rb', line 5

def get_container(container, options = {})
  if @containers[container]
    response = Excon::Response.new
    response.body = @containers[container].map do |name, object|
      {
          'hash' => object.respond_to?(:to_s) ? Digest::MD5.hexdigest(object.to_s) : 'e4d909c290d0fb1ca068ffaddf22cbd0',
          'last_modified' => Time.now,
          'bytes' => Memory.analyze(container).bytes,
          'content/type' => 'application/json'
      }
    end
    response.status = 200
    response
  else
    response = Excon::Response.new
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
    response.headers = {"Content-Length"=>"70", "Content-Type"=>"text/html; charset=UTF-8", "X-Trans-Id"=>"abcdefghijklmnopqrstuvwx-0123456789", "Date"=>Time.now}
    response
  end
end

#get_containers(options = {}) ⇒ Object



5
6
7
8
9
10
# File 'lib/fog/softlayer/requests/storage/get_containers.rb', line 5

def get_containers(options = {})
  response = Excon::Response.new
  response.body = _format_containers(@containers)
  response.status = 200
  response
end

#get_object(container, object, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/fog/softlayer/requests/storage/get_object.rb', line 5

def get_object(container, object, &block)
  if @containers[container] && @containers[container][object]
    response = Excon::Response.new
    response.body = @containers[container][object]
    response.status = 200
    response
  else
    response = Excon::Response.new
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
    response.headers = {"Content-Length"=>"70", "Content-Type"=>"text/html; charset=UTF-8", "X-Trans-Id"=>"abcdefghijklmnopqrstuvwx-0123456789", "Date"=>Time.now}
    response
  end
end

#get_object_https_url(container, object, expires, options = {}) ⇒ Object



5
6
7
# File 'lib/fog/softlayer/requests/storage/get_object_https_url.rb', line 5

def get_object_https_url(container, object, expires, options = {})
  "https://cluster.objectstorage.softlayer.net:443/v1/AUTH_abcdefghijklmnopqrstuvwxyz/#{container}/#{object}?temp_url_sig=1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a&temp_url_expires=1111111111111"
end

#put_container(name, public = false) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/fog/softlayer/requests/storage/put_container.rb', line 5

def put_container(name, public=false)
  @containers[name] = {} unless @containers[name]
  response = Excon::Response.new
  response.body = ''
  response.status = 201
  response
end

#put_object(container, object, data, options = {}, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/fog/softlayer/requests/storage/put_object.rb', line 5

def put_object(container, object, data, options = {}, &block)
  if @containers[container]
    @containers[container][object] = data
    response = Excon::Response.new
    response.body = ''
    response.status = 201
    response.headers = {"Last-Modified"=>Time.now, "Content-Length"=>0}
    response
  else
    response = Excon::Response.new
    response.body = '<html><h1>Not Found</h1><p>The resource could not be found.</p></html>'
    response.status = 404
    response.headers = {"Content-Length"=>"70", "Content-Type"=>"text/html; charset=UTF-8", "X-Trans-Id"=>"abcdefghijklmnopqrstuvwx-0123456789", "Date"=>Time.now}
    response
  end
end

#reset_account_nameObject



83
84
85
# File 'lib/fog/softlayer/storage.rb', line 83

def 
  @path = @original_path
end

#reset_dataObject



73
74
75
# File 'lib/fog/softlayer/storage.rb', line 73

def reset_data
  self.class.data.delete(@softlayer_username)
end