aboutsummaryrefslogtreecommitdiffstats
path: root/spec/support/xapian_index.rb
blob: 344c28ebbb2006a27f2654f9ccee1420b970d36d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Rebuild the current xapian index
def rebuild_xapian_index(terms = true, values = true, texts = true, dropfirst = true)
    if dropfirst
        begin
            ActsAsXapian.readable_init
            FileUtils.rm_r(ActsAsXapian.db_path)
        rescue RuntimeError
        end
        ActsAsXapian.writable_init
        ActsAsXapian.writable_db.close
    end
    parse_all_incoming_messages
    # safe_rebuild=true, which involves forking to avoid memory leaks, doesn't work well with rspec.
    # unsafe is significantly faster, and we can afford possible memory leaks while testing.
    models = [PublicBody, User, InfoRequestEvent]
    ActsAsXapian.rebuild_index(models, verbose=false, terms, values, texts, safe_rebuild=false)
end

def update_xapian_index
    ActsAsXapian.update_index(flush_to_disk=false, verbose=false)
end

# Copy the xapian index created in create_fixtures_xapian_index to a temporary
# copy at the same level and point xapian at the copy
def get_fixtures_xapian_index()
    # Create a base index for the fixtures if not already created
    $existing_xapian_db ||= create_fixtures_xapian_index
    # Store whatever the xapian db path is originally
    $original_xapian_path ||= ActsAsXapian.db_path
    path_array = $original_xapian_path.split(File::Separator)
    path_array.pop
    temp_path = File.join(path_array, 'test.temp')
    FileUtils.remove_entry_secure(temp_path, force=true)
    FileUtils.cp_r($original_xapian_path, temp_path)
    ActsAsXapian.db_path = temp_path
end

# Create a clean xapian index based on the fixture files and the raw_email data.
def create_fixtures_xapian_index
    load_raw_emails_data
    rebuild_xapian_index
end