Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

299 lines (230 sloc) 6.085 kb
#
# Specifying rufus-tokyo
#
# Sun Feb 8 22:55:11 JST 2009
#
require File.join(File.dirname(__FILE__), 'spec_base')
require File.join(File.dirname(__FILE__), 'shared_table_spec')
require File.dirname(__FILE__) + '/shared_tyrant_spec'
require 'rufus/tokyo/tyrant'
describe 'a missing Rufus::Tokyo::TyrantTable' do
it 'should raise an error' do
lambda {
Rufus::Tokyo::TyrantTable.new('127.0.0.1', 1)
}.should.raise(Rufus::Tokyo::TokyoError).message.should.equal(
"couldn't connect to tyrant at 127.0.0.1:1")
end
end
describe 'Rufus::Tokyo::TyrantTable' do
it 'should refuse to connect to a plain Tyrant' do
lambda {
t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45000)
}.should.raise(ArgumentError)
end
end
describe Rufus::Tokyo::TyrantTable do
it 'should use open with a block will auto close the db correctly' do
res = Rufus::Tokyo::TyrantTable.open('127.0.0.1', 45001) do |table|
table.clear
10.times { |i| table["key #{i}"] = {:val => i} }
table.size.should.equal(10)
:result
end
res.should.equal(:result)
table = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
10.times do |i|
table["key #{i}"].should.equal({"val" => i.to_s})
end
table.close
end
it 'should use open without a block just like calling new correctly' do
table = Rufus::Tokyo::TyrantTable.open('127.0.0.1', 45001)
table.clear
10.times { |i| table["key #{i}"] = {:val => i} }
table.size.should.equal(10)
table.close
table = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
10.times do |i|
table["key #{i}"].should.equal({"val" => i.to_s})
end
table.close
end
end
describe Rufus::Tokyo::TyrantTable do
before do
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
#puts @t.stat.inject('') { |s, (k, v)| s << "#{k} => #{v}\n" }
@t.clear
end
after do
@t.close
end
it 'should respond to stat' do
@t.stat['type'].should.equal('table')
end
behaves_like 'table'
behaves_like 'a Tyrant structure (no transactions)'
end
describe Rufus::Tokyo::TyrantTable do
before do
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
@t.clear
end
after do
@t.close
end
it 'should not support transactions' do
lambda {
@t.transaction {}
}.should.raise(NoMethodError)
lambda {
@t.abort
}.should.raise(NoMethodError)
end
end
describe 'Rufus::Tokyo::Table #keys' do
before do
@n = 50
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
@t.clear
@n.times { |i| @t["person#{i}"] = { 'name' => 'whoever' } }
@n.times { |i| @t["animal#{i}"] = { 'name' => 'whichever' } }
@t["toto#{0.chr}5"] = { 'name' => 'toto' }
end
after do
@t.close
end
behaves_like 'table #keys'
end
def prepare_table_with_data (port)
t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', port)
t.clear
t['pk0'] = { 'name' => 'jim', 'age' => '25', 'lang' => 'ja,en' }
t['pk1'] = { 'name' => 'jeff', 'age' => '32', 'lang' => 'en,es' }
t['pk2'] = { 'name' => 'jack', 'age' => '44', 'lang' => 'en' }
t['pk3'] = { 'name' => 'jake', 'age' => '45', 'lang' => 'en,li' }
t
end
describe Rufus::Tokyo::TyrantTable do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
# TODO : well there are trailing indexes now... :(
end
behaves_like 'table indexes'
end
describe 'Rufus::Tokyo::TyrantTable#lget' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'table lget'
end
describe 'a Tokyo Tyrant table, like a Ruby Hash,' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'table like a hash'
end
describe 'queries on Tokyo Tyrant tables' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'table query'
end
describe 'Queries on Tokyo Tyrant tables' do
before do
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
@t.clear
[
"consul readableness choleric hopperdozer juckies",
"fume overharshness besprinkler whirling erythrene",
"trumper defiable detractively cattiness superioress",
"vivificative consul agglomerated Peterloo way",
"unkilned bituminate antimatrimonial uran polyphony",
"kurumaya unannexed renownedly apetaloid consul",
"overdare nescience seronegative nagster overfatten",
].each_with_index { |w, i|
@t["pk#{i}"] = { 'name' => "lambda#{i}", 'words' => w }
}
end
after do
@t.close
end
behaves_like 'table query (fts)'
end
describe 'Tokyo Tyrant and TableQuery#process' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
# TODO : orly ?
#behaves_like 'table query #process'
it 'should not work' do
lambda {
@t.prepare_query { |q|
q.add 'lang', :includes, 'en'
}.process { |k, v|
}.free
}.should.raise(NoMethodError)
end
end
describe 'results from Tokyo Tyrant table queries' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'table query results'
end
describe 'Rufus::Tokyo::TyrantTable (lua extensions)' do
before do
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
@t.clear
end
after do
@t.close
end
behaves_like 'tyrant table with embedded lua'
end
describe Rufus::Tokyo::TyrantTable do
before do
@t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 45001)
@t.clear
end
after do
@t.close
end
behaves_like 'a table structure flattening keys and values'
end
describe 'Rufus::Tokyo::TyrantTable\'s queries' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'a table structure to_s-ing query stuff'
end
describe 'Rufus::Tokyo::Table and metasearch' do
before do
@t = prepare_table_with_data(45001)
end
after do
@t.close
end
behaves_like 'table query metasearch'
end
Jump to Line
Something went wrong with that request. Please try again.