class Soar::Registry::Directory::Test::Provider::DynamoDb

Public Class Methods

new() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 12
def initialize
  @retries = 5
  @configuration = YAML.load_file("config/#{ENV['CONFIG_FILE']}")
  @table = @configuration['provider']['config']['table']
  @index = @table['index']
  @entries = JSON.parse(File.read("lib/soar/registry/directory/test/fixtures/entries.json"))
  @connection_retries = 6
end

Public Instance Methods

duplicate_entry?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 89
def duplicate_entry?
  @error.is_a?(Soar::Registry::Directory::Error::DuplicateEntryError)
end
fetch_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 78
def fetch_entry
  begin
    @result = @directory.fetch({
      @index.keys[0] => @entries[0]['partition_key'],
      @index.keys[1] => @entries[0]['sort_key']
    })
  rescue Soar::Registry::Directory::Error::NoEntriesFoundError, Soar::Registry::Directory::Error::NetworkingError => e
    @error = e
  end
end
given_configured_directory() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 21
def given_configured_directory
  begin 
    provider = Soar::Registry::Directory::Provider::DynamoDb.new(@configuration['provider']['config'].map { |k, v| [k.to_sym, v] }.to_h)
    @directory = Soar::Registry::Directory.new(provider)
    @directory.provider.recreate_table({
      name: @table['name'], 
      structure: JSON.parse(File.read("lib/soar/registry/directory/test/fixtures/table_structure.json"))
    })
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    raise if @connection_retries == 0
    sleep 10
    @connection_retries -= 1
    given_configured_directory
  end
end
given_existing_data() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 37
def given_existing_data
  @entries.each{ |entry| 
    @directory.put(entry)
  }
end
index?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 104
def index?
  @index == {
    "partition_key" => @index['partition_key'],
    "sort_key" => @index['sort_key'],
    "global_secondary_index" => @index['global_secondary_index']
  }
end
networking_error?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 120
def networking_error?
  @error.is_a?(Soar::Registry::Directory::Error::NetworkingError)
end
no_entries_found?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 116
def no_entries_found?
  @error.is_a?(Soar::Registry::Directory::Error::NoEntriesFoundError)
end
no_matching_entries?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 124
def no_matching_entries?
  @result == []
end
persisted?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 93
def persisted?
  @entries[0] == @directory.fetch({
      @index.keys[0] => @entries[0]['partition_key'],
      @index.keys[1] => @entries[0]['sort_key']
    })
end
put_duplicate_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 48
def put_duplicate_entry
  put_entry
end
put_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 52
def put_entry
  begin
    @directory.put(@entries[0])
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e
  rescue Soar::Registry::Directory::Error::DuplicateEntryError => e
    @error = e
  end
end
request_index() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 70
def request_index
  begin
    @result = @directory.index
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e
  end
end
returned?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 100
def returned?
  @result == [@entries[0]]
end
sabotage_network() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 43
def sabotage_network
  @configuration['provider']['config']['configuration']['endpoint'] = 'http://does-not-exist'
  @directory.provider.client = Aws::DynamoDB::Client.new(@configuration['provider']['config']['configuration'].map { |k, v| [k.to_sym, v] }.to_h)
end
search_for_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 62
def search_for_entry
  begin
    @result = @directory.search("global_secondary_index1", @entries[0]['global_secondary_index1'])
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e
  end
end
single_entry?() click to toggle source
# File lib/soar/registry/directory/test/provider/dynamo_db.rb, line 112
def single_entry?
  @result == @entries[0]
end