class Fog::OpenStack::Identity::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 76
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 102
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 = data[:tenants].values.find do |u|
    u['name'] == 'admin'
  end

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

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

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

  if @current_user
    @current_user_id = @current_user['id']
  else
    @current_user_id = Fog::Mock.random_hex(32)
    @current_user = 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
    }
  end
end
reset!() click to toggle source
# File lib/fog/openstack/identity/v2.rb, line 94
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/identity/v2/requests/add_user_to_tenant.rb, line 16
def add_user_to_tenant(tenant_id, user_id, role_id)
  role = data[:roles][role_id]
  data[:user_tenant_membership][tenant_id] ||= {}
  data[:user_tenant_membership][tenant_id][user_id] ||= []
  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/identity/v2/requests/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/identity/v2/requests/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/identity/v2/requests/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/identity/v2/requests/create_tenant.rb, line 17
def create_tenant(attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(2)]
  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/identity/v2/requests/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/identity/v2/requests/create_user_role.rb, line 16
def create_user_role(_tenant_id, _user_id, role_id)
  Excon::Response.new(
    :body   => {'role' => data[:roles][role_id]},
    :status => 200
  )
end
credentials() click to toggle source
# File lib/fog/openstack/identity/v2.rb, line 160
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 152
def data
  self.class.data[@openstack_username]
end
delete_ec2_credential(user_id, access) click to toggle source
# File lib/fog/openstack/identity/v2/requests/delete_ec2_credential.rb, line 29
def delete_ec2_credential(user_id, access)
  raise Fog::OpenStack::Identity::NotFound unless data[:ec2_credentials][user_id][access]

  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/identity/v2/requests/delete_role.rb, line 16
def delete_role(role_id)
  response = Excon::Response.new
  if data[:roles][role_id]
    data[:roles].delete(role_id)
    response.status = 204
    response
  else
    raise Fog::OpenStack::Identity::NotFound
  end
end
delete_tenant(_attributes) click to toggle source
# File lib/fog/openstack/identity/v2/requests/delete_tenant.rb, line 16
def delete_tenant(_attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(2)]
  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/identity/v2/requests/delete_user.rb, line 16
def delete_user(user_id)
  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::OpenStack::Identity::NotFound
end
delete_user_role(_tenant_id, _user_id, _role_id) click to toggle source
# File lib/fog/openstack/identity/v2/requests/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/identity/v2/requests/get_ec2_credential.rb, line 36
def get_ec2_credential(user_id, access)
  ec2_credential = 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/identity/v2/requests/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::OpenStack::Identity::NotFound
  end
end
get_tenant(id) click to toggle source
# File lib/fog/openstack/identity/v2/requests/get_tenant.rb, line 16
def get_tenant(id)
  response = Excon::Response.new
  response.status = [200, 204][rand(2)]
  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/identity/v2/requests/get_user_by_id.rb, line 16
def get_user_by_id(user_id)
  response = Excon::Response.new
  response.status = 200

  existing_user = 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/identity/v2/requests/get_user_by_name.rb, line 16
def get_user_by_name(name)
  response = Excon::Response.new
  response.status = 200
  user = data[:users].values.select { |u| u['name'] == name }[0]
  response.body = {
    'user' => user
  }
  response
end
list_ec2_credentials(options = {}) click to toggle source
# File lib/fog/openstack/identity/v2/requests/list_ec2_credentials.rb, line 43
def list_ec2_credentials(options = {})
  user_id = if options.kind_of?(Hash)
              options.delete(:user_id)
            else
              options
            end

  ec2_credentials = 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/identity/v2/requests/list_roles.rb, line 17
def list_roles(_options = {})
  if data[:roles].empty?
    ['admin', 'Member'].each do |name|
      id = Fog::Mock.random_hex(32)
      data[:roles][id] = {'id' => id, 'name' => name}
    end
  end

  Excon::Response.new(
    :body   => {'roles' => data[:roles].values},
    :status => 200
  )
end
list_roles_for_user_on_tenant(tenant_id, user_id) click to toggle source
# File lib/fog/openstack/identity/v2/requests/list_roles_for_user_on_tenant.rb, line 16
def list_roles_for_user_on_tenant(tenant_id, user_id)
  data[:user_tenant_membership][tenant_id] ||= {}
  data[:user_tenant_membership][tenant_id][user_id] ||= []
  roles = data[:user_tenant_membership][tenant_id][user_id].map do |role_id|
    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/identity/v2/requests/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(2)]
  )
end
list_users(options = {}) click to toggle source
# File lib/fog/openstack/identity/v2/requests/list_users.rb, line 27
def list_users(options = {})
  tenant_id = options[:tenant_id]

  users = data[:users].values

  if tenant_id
    users = users.select do |user|
      user['tenantId'] == tenant_id
    end
  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/identity/v2/requests/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 156
def reset_data
  self.class.data.delete(@openstack_username)
end
set_tenant(_tenant) click to toggle source
# File lib/fog/openstack/identity/v2/requests/set_tenant.rb, line 14
def set_tenant(_tenant)
  true
end
update_tenant(_id, attributes) click to toggle source
# File lib/fog/openstack/identity/v2/requests/update_tenant.rb, line 17
def update_tenant(_id, attributes)
  response = Excon::Response.new
  response.status = [200, 204][rand(2)]
  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/identity/v2/requests/update_user.rb, line 18
def update_user(user_id, options)
  response = Excon::Response.new
  if user = data[:users][user_id]
    if options['name']
      user['name'] = options['name']
    end
    response.status = 200
    response
  else
    raise Fog::OpenStack::Identity::NotFound
  end
end
validate_token(token_id, tenant_id = nil) click to toggle source
# File lib/fog/openstack/identity/v2/requests/validate_token.rb, line 16
def validate_token(token_id, tenant_id = nil)
end