class Fog::Identity::OpenStack::V2::Mock

Attributes

auth_token[R]
auth_token_expiration[R]
current_tenant[R]
current_user[R]
unscoped_token[R]

Public Class Methods

data() click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 79
def self.data
  @users ||= {}
  @roles ||= {}
  @tenants ||= {}
  @ec2_credentials ||= Hash.new { |hash, key| hash[key] = {} }
  @user_tenant_membership ||= {}

  @data ||= Hash.new do |hash, key|
    hash[key] = {
        :users => @users,
        :roles => @roles,
        :tenants => @tenants,
        :ec2_credentials => @ec2_credentials,
        :user_tenant_membership => @user_tenant_membership
    }
  end
end
new(options={}) click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 105
def initialize(options={})
  @openstack_username = options[:openstack_username] || 'admin'
  @openstack_tenant = options[:openstack_tenant] || 'admin'
  @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
  @openstack_management_url = @openstack_auth_uri.to_s

  @auth_token = Fog::Mock.random_base64(64)
  @auth_token_expiration = (Time.now.utc + 86400).iso8601

  @admin_tenant = self.data[:tenants].values.find do |u|
    u['name'] == 'admin'
  end

  if @openstack_tenant
    @current_tenant = self.data[:tenants].values.find do |u|
      u['name'] == @openstack_tenant
    end

    unless @current_tenant
      @current_tenant_id = Fog::Mock.random_hex(32)
      @current_tenant = self.data[:tenants][@current_tenant_id] = {
          'id' => @current_tenant_id,
          'name' => @openstack_tenant
      }
    else
      @current_tenant_id = @current_tenant['id']
    end
  else
    @current_tenant = @admin_tenant
  end

  @current_user = self.data[:users].values.find do |u|
    u['name'] == @openstack_username
  end
  @current_tenant_id = Fog::Mock.random_hex(32)

  unless @current_user
    @current_user_id = Fog::Mock.random_hex(32)
    @current_user = self.data[:users][@current_user_id] = {
        'id' => @current_user_id,
        'name' => @openstack_username,
        'email' => "#{@openstack_username}@mock.com",
        'tenantId' => Fog::Mock.random_numbers(6).to_s,
        'enabled' => true
    }
  else
    @current_user_id = @current_user['id']
  end
end
reset!() click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 97
def self.reset!
  @data = nil
  @users = nil
  @roles = nil
  @tenants = nil
  @ec2_credentials = nil
end

Public Instance Methods

add_user_to_tenant(tenant_id, user_id, role_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/add_user_to_tenant.rb, line 16
def add_user_to_tenant(tenant_id, user_id, role_id)
  role = self.data[:roles][role_id]
  self.data[:user_tenant_membership][tenant_id] ||= {}
  self.data[:user_tenant_membership][tenant_id][user_id] ||= []
  self.data[:user_tenant_membership][tenant_id][user_id].push(role['id']).uniq!

  response = Excon::Response.new
  response.status = 200
  response.body = {
      'role' => {
          'id' => role['id'],
          'name' => role['name']
      }
  }
  response
end
check_token(token_id, tenant_id=nil) click to toggle source
# File lib/fog/openstack/requests/identity_v2/check_token.rb, line 16
def check_token(token_id, tenant_id=nil)
end
create_ec2_credential(user_id, tenant_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/create_ec2_credential.rb, line 38
def create_ec2_credential(user_id, tenant_id)
  response = Excon::Response.new
  response.status = 200

  data = {
      'access' => Fog::Mock.random_hex(32),
      'secret' => Fog::Mock.random_hex(32),
      'tenant_id' => tenant_id,
      'user_id' => user_id,
  }

  self.data[:ec2_credentials][user_id][data['access']] = data

  response.body = {'credential' => data}

  response
end
create_role(name) click to toggle source
# File lib/fog/openstack/requests/identity_v2/create_role.rb, line 23
def create_role(name)
  data = {
      'id' => Fog::Mock.random_hex(32),
      'name' => name
  }
  self.data[:roles][data['id']] = data
  Excon::Response.new(
      :body => {'role' => data},
      :status => 202
  )
end
create_tenant(attributes) click to toggle source
# File lib/fog/openstack/requests/identity_v2/create_tenant.rb, line 17
def create_tenant(attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(1)]
  response.body = {
      'tenant' => {
          'id' => "df9a815161eba9b76cc748fd5c5af73e",
          'description' => attributes[:description] || 'normal tenant',
          'enabled' => true,
          'name' => attributes[:name] || 'default'
      }
  }
  response
end
create_user(name, password, email, tenantId=nil, enabled=true) click to toggle source
# File lib/fog/openstack/requests/identity_v2/create_user.rb, line 27
def create_user(name, password, email, tenantId=nil, enabled=true)
  response = Excon::Response.new
  response.status = 200
  data = {
      'id' => Fog::Mock.random_hex(32),
      'name' => name,
      'email' => email,
      'tenantId' => tenantId,
      'enabled' => enabled
  }
  self.data[:users][data['id']] = data
  response.body = {'user' => data}
  response
end
create_user_role(tenant_id, user_id, role_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/create_user_role.rb, line 16
def create_user_role(tenant_id, user_id, role_id)
  Excon::Response.new(
      :body => {'role' => self.data[:roles][role_id]},
      :status => 200
  )
end
credentials() click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 163
def credentials
  {:provider => 'openstack',
   :openstack_auth_url => @openstack_auth_uri.to_s,
   :openstack_auth_token => @auth_token,
   :openstack_management_url => @openstack_management_url,
   :openstack_current_user_id => @openstack_current_user_id,
   :current_user => @current_user,
   :current_tenant => @current_tenant}
end
data() click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 155
def data
  self.class.data[@openstack_username]
end
delete_ec2_credential(user_id, access) click to toggle source
# File lib/fog/openstack/requests/identity_v2/delete_ec2_credential.rb, line 29
def delete_ec2_credential(user_id, access)
  raise Fog::Identity::OpenStack::NotFound unless self.data[:ec2_credentials][user_id][access]

  self.data[:ec2_credentials][user_id].delete access

  response = Excon::Response.new
  response.status = 204
  response
rescue
end
delete_role(role_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/delete_role.rb, line 16
def delete_role(role_id)
  response = Excon::Response.new
  if self.data[:roles][role_id]
    self.data[:roles].delete(role_id)
    response.status = 204
    response
  else
    raise Fog::Identity::OpenStack::NotFound
  end
end
delete_tenant(attributes) click to toggle source
# File lib/fog/openstack/requests/identity_v2/delete_tenant.rb, line 16
def delete_tenant(attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(1)]
  response.body = {
      'tenant' => {
          'id' => '1',
          'description' => 'Has access to everything',
          'enabled' => true,
          'name' => 'admin'
      }
  }
  response
end
delete_user(user_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/delete_user.rb, line 16
def delete_user(user_id)
  self.data[:users].delete(
      list_users.body['users'].find { |x| x['id'] == user_id }['id'])

  response = Excon::Response.new
  response.status = 204
  response
rescue
  raise Fog::Identity::OpenStack::NotFound
end
delete_user_role(tenant_id, user_id, role_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/delete_user_role.rb, line 16
def delete_user_role(tenant_id, user_id, role_id)
  response = Excon::Response.new
  response.status = 204
  response
end
get_ec2_credential(user_id, access) click to toggle source
# File lib/fog/openstack/requests/identity_v2/get_ec2_credential.rb, line 36
def get_ec2_credential(user_id, access)
  ec2_credential = self.data[:ec2_credentials][user_id][access]

  raise Fog::OpenStack::Identity::NotFound unless ec2_credential

  response = Excon::Response.new
  response.status = 200
  response.body = {'credential' => ec2_credential}
  response
end
get_role(id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/get_role.rb, line 16
def get_role(id)
  response = Excon::Response.new
  if data = self.data[:roles][id]
    response.status = 200
    response.body = {'role' => data}
    response
  else
    raise Fog::Identity::OpenStack::NotFound
  end
end
get_tenant(id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/get_tenant.rb, line 16
def get_tenant(id)
  response = Excon::Response.new
  response.status = [200, 204][rand(1)]
  response.body = {
      'tenant' => {
          'id' => id,
          'description' => 'Has access to everything',
          'enabled' => true,
          'name' => 'admin'
      }
  }
  response
end
get_user_by_id(user_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/get_user_by_id.rb, line 16
def get_user_by_id(user_id)
  response = Excon::Response.new
  response.status = 200

  existing_user = self.data[:users].find do |u|
    u[0] == user_id || u[1]['name'] == 'mock'
  end
  existing_user = existing_user[1] if existing_user

  response.body = {
      'user' => existing_user || create_user('mock', 'mock', 'mock@email.com').body['user']
  }
  response
end
get_user_by_name(name) click to toggle source
# File lib/fog/openstack/requests/identity_v2/get_user_by_name.rb, line 16
def get_user_by_name(name)
  response = Excon::Response.new
  response.status = 200
  user = self.data[:users].values.select { |user| user['name'] == name }[0]
  response.body = {
      'user' => user
  }
  response
end
list_ec2_credentials(options = {}) click to toggle source
# File lib/fog/openstack/requests/identity_v2/list_ec2_credentials.rb, line 43
def list_ec2_credentials(options = {})
  if options.is_a?(Hash)
    user_id = options.delete(:user_id)
  else
    user_id = options
  end

  ec2_credentials = self.data[:ec2_credentials][user_id].values

  response = Excon::Response.new
  response.status = 200
  response.body = {'credentials' => ec2_credentials}
  response
end
list_roles(options = {}) click to toggle source
# File lib/fog/openstack/requests/identity_v2/list_roles.rb, line 17
def list_roles(options = {})
  if self.data[:roles].empty?
    ['admin', 'Member'].each do |name|
      id = Fog::Mock.random_hex(32)
      self.data[:roles][id] = {'id' => id, 'name' => name}
    end
  end

  Excon::Response.new(
      :body => {'roles' => self.data[:roles].values},
      :status => 200
  )
end
list_roles_for_user_on_tenant(tenant_id, user_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/list_roles_for_user_on_tenant.rb, line 16
def list_roles_for_user_on_tenant(tenant_id, user_id)
  self.data[:user_tenant_membership][tenant_id] ||= {}
  self.data[:user_tenant_membership][tenant_id][user_id] ||= []
  roles = self.data[:user_tenant_membership][tenant_id][user_id].map do |role_id|
    self.data[:roles][role_id]
  end

  Excon::Response.new(
      :body => {'roles' => roles},
      :status => 200
  )
end
list_tenants(options = nil, marker = nil) click to toggle source
# File lib/fog/openstack/requests/identity_v2/list_tenants.rb, line 27
def list_tenants(options = nil, marker = nil)
  Excon::Response.new(
      :body => {
          'tenants_links' => [],
          'tenants' => [
              {'id' => '1',
               'description' => 'Has access to everything',
               'enabled' => true,
               'name' => 'admin'},
              {'id' => '2',
               'description' => 'Normal tenant',
               'enabled' => true,
               'name' => 'default'},
              {'id' => '3',
               'description' => 'Disabled tenant',
               'enabled' => false,
               'name' => 'disabled'}
          ]
      },
      :status => [200, 204][rand(1)]
  )
end
list_users(options = {}) click to toggle source
# File lib/fog/openstack/requests/identity_v2/list_users.rb, line 27
def list_users(options = {})
  tenant_id = options[:tenant_id]

  users = self.data[:users].values

  if tenant_id
    users = users.select {
        |user| user['tenantId'] == tenant_id
    }
  end

  Excon::Response.new(
      :body => {'users' => users},
      :status => 200
  )
end
remove_user_from_tenant(tenant_id, user_id, role_id) click to toggle source
# File lib/fog/openstack/requests/identity_v2/remove_user_from_tenant.rb, line 16
def remove_user_from_tenant(tenant_id, user_id, role_id)
end
reset_data() click to toggle source
# File lib/fog/openstack/identity_v2.rb, line 159
def reset_data
  self.class.data.delete(@openstack_username)
end
set_tenant(tenant) click to toggle source
# File lib/fog/openstack/requests/identity_v2/set_tenant.rb, line 14
def set_tenant(tenant)
  true
end
update_tenant(id, attributes) click to toggle source
# File lib/fog/openstack/requests/identity_v2/update_tenant.rb, line 17
def update_tenant(id, attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(1)]
  attributes = {'enabled' => true, 'id' => '1'}.merge(attributes)
  response.body = {
      'tenant' => attributes
  }
  response
end
update_user(user_id, options) click to toggle source
# File lib/fog/openstack/requests/identity_v2/update_user.rb, line 18
def update_user(user_id, options)
  response = Excon::Response.new
  if user = self.data[:users][user_id]
    if options['name']
      user['name'] = options['name']
    end
    response.status = 200
    response
  else
    raise Fog::Identity::OpenStack::NotFound
  end
end
validate_token(token_id, tenant_id=nil) click to toggle source
# File lib/fog/openstack/requests/identity_v2/validate_token.rb, line 16
def validate_token(token_id, tenant_id=nil)
end