class Soar::Registry::Directory::Test::Provider::Mysql

Constants

PATH_TO_DATABASE_STRUCTURE_DUMP

Public Class Methods

new() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 13
def initialize
  @configuration = YAML.load_file("config/#{ENV['CONFIG_FILE']}")
  @index = @configuration['provider']['config']['index']
  @attributes = @configuration['provider']['config']['attributes']
  @entries = [{
    "ID" => 1,
    "Client_Number" => "C123456789",
    "Notifyemail_Invoice" => "johnconner@example.com",
    "First_Name" => 'John',
    "Surname" => 'Connor'
  }, {
    "ID" => 2,
    "First_Name" => 'Sarah',
    "Surname" => 'Connor',
    "Client_Number" => "C101112134",
    "Notifyemail_Invoice" => "sarahconnor@example.com" 
  }]
  @connection_retries = 6
end

Public Instance Methods

duplicate_entry?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 110
def duplicate_entry?
  !!(@error =~ /\ADuplicate entry .+\z/)
end
fetch_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 90
def fetch_entry
  begin
    @result = @directory.fetch(@entries[0]['ID'])
  rescue Soar::Registry::Directory::Error::NoEntriesFoundError, Soar::Registry::Directory::Error::NetworkingError => e
    @error = e.message
  end
end
given_configured_directory() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 33
def given_configured_directory
  begin
    provider_class = Object.const_get(@configuration['provider']['class'])
    provider = provider_class.new(@configuration['provider']['config'].map { |k,v| [k.to_sym, v]}.to_h )
    provider.client.query("DROP TABLE IF EXISTS `Client`")
    provider.client.query("CREATE TABLE Client ( ID int(11) NOT NULL AUTO_INCREMENT, Client_Number varchar(15) NOT NULL DEFAULT '', First_Name varchar(70) DEFAULT NULL, Surname varchar(70) DEFAULT NULL, Notifyemail_Invoice text, PRIMARY KEY (ID), KEY Notifyemail_Invoice (Notifyemail_Invoice(20)), KEY Client_Number (Client_Number))")
    @directory = Soar::Registry::Directory.new(provider)
  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

Adds @entries to datastore using ldap protocol Adds entryuuid to @entries

# File lib/soar/registry/directory/test/provider/mysql.rb, line 52
def given_existing_data
  @entries.each{ |entry| 
    @directory.put(entry)
  }
end
index?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 106
def index?
  @result == @index
end
networking_error?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 126
def networking_error?
                                            patterns = [
    /\Aquery: not connected.*\z/,
    /\AMySQL server has gone away\z/,
    /\ACan't connect to local MySQL server through socket.*\z/,
    /\AERROR 2003 (HY000): Can't connect to MySQL server on.*\z/,
    /\ALost connection to MySQL server.*\z/
  ]
  patterns.any? { |pattern| 
    break true if !!(@error =~ pattern)
  }
end
no_entries_found?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 118
def no_entries_found?
  !!(@error =~ /\ANo entries found for .+\z/)
end
no_matching_entries?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 122
def no_matching_entries?
  @result == []
end
persisted?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 98
def persisted?
  @directory.fetch(@entries[0]['ID']) == @entries[0]
end
put_duplicate_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 62
def put_duplicate_entry
  put_entry
end
put_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 66
def put_entry
  begin
    result = @directory.put(@entries[0])
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e.message
  end
end
request_index() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 82
def request_index
  begin
    @result = @directory.index
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e.message
  end
end
returned?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 102
def returned?
  @result == [@entries[0]]
end
sabotage_network() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 58
def sabotage_network
  @directory.provider.client.close
end
search_for_entry() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 74
def search_for_entry
  begin
    @result = @directory.search("Notifyemail_Invoice", @entries[0]['Notifyemail_Invoice'])
  rescue Soar::Registry::Directory::Error::NetworkingError => e
    @error = e.message
  end
end
single_entry?() click to toggle source
# File lib/soar/registry/directory/test/provider/mysql.rb, line 114
def single_entry?
  @result == @entries[0]            
end