| | 1 | require File.dirname(__FILE__) + "/../../test_helper" |
| | 2 | |
| | 3 | class MultipleSearchRequestsTest < Test::Unit::TestCase |
| | 4 | include Ferret::Document |
| | 5 | include Ferret::Search |
| | 6 | include Ferret::Store |
| | 7 | include Ferret::Analysis |
| | 8 | include Ferret::Index |
| | 9 | |
| | 10 | def setup() |
| | 11 | dpath = File.expand_path(File.join(File.dirname(__FILE__), |
| | 12 | '../../temp/fsdir')) |
| | 13 | fs_dir = Ferret::Store::FSDirectory.new(dpath, true) |
| | 14 | |
| | 15 | iw = IndexWriter.new(fs_dir, :create => true, :key => [:id]) |
| | 16 | 1000.times do |x| |
| | 17 | doc = Document.new |
| | 18 | doc << Field.new('id', x, Field::Store::YES, Field::Index::UNTOKENIZED) |
| | 19 | iw << doc |
| | 20 | end |
| | 21 | iw.close() |
| | 22 | fs_dir.close() |
| | 23 | |
| | 24 | @ix = Index.new(:path => dpath, :create => true, :key => [:id]) |
| | 25 | end |
| | 26 | |
| | 27 | def tear_down() |
| | 28 | @ix.close |
| | 29 | end |
| | 30 | |
| | 31 | def test_repeated_queries_segmentation_fault |
| | 32 | 100000.times do |x| |
| | 33 | bq = BooleanQuery.new() |
| | 34 | tq1 = Ferret::Search::TermQuery.new(Ferret::Index::Term.new("id", 1)) |
| | 35 | tq2 = Ferret::Search::TermQuery.new(Ferret::Index::Term.new("another_id", 1)) |
| | 36 | bq.add_query(tq1, BooleanClause::Occur::MUST) |
| | 37 | bq.add_query(tq2, BooleanClause::Occur::MUST) |
| | 38 | top_docs = @ix.search(bq) |
| | 39 | end |
| | 40 | end |
| | 41 | |
| | 42 | def test_repeated_queries_bus_error |
| | 43 | 100000.times do |x| |
| | 44 | bq = BooleanQuery.new() |
| | 45 | tq1 = TermQuery.new(Term.new("id", 1)) |
| | 46 | tq2 = TermQuery.new(Term.new("another_id", 1)) |
| | 47 | tq3 = TermQuery.new(Term.new("yet_another_id", 1)) |
| | 48 | tq4 = TermQuery.new(Term.new("still_another_id", 1)) |
| | 49 | tq5 = TermQuery.new(Term.new("one_more_id", 1)) |
| | 50 | tq6 = TermQuery.new(Term.new("and_another_id", 1)) |
| | 51 | bq.add_query(tq1, BooleanClause::Occur::MUST) |
| | 52 | bq.add_query(tq2, BooleanClause::Occur::MUST) |
| | 53 | bq.add_query(tq3, BooleanClause::Occur::MUST) |
| | 54 | bq.add_query(tq4, BooleanClause::Occur::MUST) |
| | 55 | bq.add_query(tq5, BooleanClause::Occur::MUST) |
| | 56 | bq.add_query(tq6, BooleanClause::Occur::MUST) |
| | 57 | top_docs = @ix.search(bq) |
| | 58 | end |
| | 59 | end |
| | 60 | end |