Пример #1
0
def test_boolean_search_one_term_two_hits(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'zucchini',
                        rm=True,
                        network=('container', boolean_search_container))
    assert sorted(text_to_lines(output)) == sorted(['sweet', 'savory'])
Пример #2
0
def test_boolean_search_one_term_no_hits(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'avocado',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == ''
Пример #3
0
def test_boolean_search_one_term_one_hit(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'banana',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == 'sweet\n'
Пример #4
0
def test_boolean_search_one_term_eleven_hits(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '11',
                        'squid',
                        rm=True,
                        network=('container', boolean_search_container))
    assert sorted(text_to_lines(output)) == sorted('abcdefghijk')
Пример #5
0
def test_top_terms(index_volume):
    top_terms_text = docker_run(
        'concrete-python-image', 'cat', '/mnt/index/top-terms.txt',
        rm=True, v=(index_volume, '/mnt/index'))
    top_terms = top_terms_text.rstrip('\n').split('\n')
    assert len(top_terms) == 50
    assert len([t for t in top_terms if STOP_WORD_RE.match(t)]) == 50
    assert len(set(top_terms)) == 50
Пример #6
0
def test_weighted_search_two_terms_three_hits_one_k(weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '1',
                        'orange',
                        'zucchini',
                        rm=True,
                        network=('container', weighted_search_container))
    assert output == ['savory'] or ['sweet'] or ['sour']
Пример #7
0
def test_boolean_search_two_terms_two_hits_one_k(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '0',
                        'orange',
                        'zucchini',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == ['sweet'] or ['savory']
Пример #8
0
def test_boolean_search_two_terms_no_hits(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'banana',
                        'tomato',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == ''
Пример #9
0
def test_weighted_search_one_term_eleven_hits(weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '11',
                        'squid',
                        rm=True,
                        network=('container', weighted_search_container))
    assert text_to_lines(output) == list('jhfgiedakbc')
    assert len(set(text_to_lines(output))) == 11
Пример #10
0
def test_weighted_search_one_term_two_hits(weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'zucchini',
                        rm=True,
                        network=('container', weighted_search_container))
    assert text_to_lines(output)[:2] == ['savory', 'sweet']
    assert len(set(text_to_lines(output))) == 2
Пример #11
0
def test_weighted_search_one_term_one_hit(weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'banana',
                        rm=True,
                        network=('container', weighted_search_container))
    assert text_to_lines(output)[:1] == ['sweet']
    assert len(set(text_to_lines(output))) == 1
Пример #12
0
def test_boolean_search_one_term_eleven_hits_one_k(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '1',
                        'squid',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == ['a'] or ['b'] or ['c'] or ['d'] or ['e'] or ['f'] or \
        ['g'] or ['h'] or ['i'] or ['j'] or ['k']
Пример #13
0
def test_boolean_search_three_terms_one_hit_zero_k(boolean_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '0',
                        'orange',
                        'banana',
                        'tomato',
                        rm=True,
                        network=('container', boolean_search_container))
    assert output == ""
Пример #14
0
def test_weighted_search_one_term_no_hits(weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '10',
                        'avocado',
                        rm=True,
                        network=('container', weighted_search_container))
    assert set(text_to_lines(output)).issubset(['sweet', 'savory', 'sour'] +
                                               list('abcdefghijk'))
    assert len(set(text_to_lines(output))) == 0
Пример #15
0
def test_weighted_search_two_terms_three_hits_zero_k(
        weighted_search_container):
    output = docker_run('search-client-image',
                        '-k',
                        '0',
                        'orange',
                        'zucchini',
                        rm=True,
                        network=('container', weighted_search_container))
    assert output == ""
Пример #16
0
def boolean_search_container():
    docker_build('Dockerfile.concrete_python', 'concrete-python-image')
    docker_build('Dockerfile.boolean_search', 'boolean-search-image')
    docker_build('Dockerfile.search_client', 'search-client-image')

    docker_volume_create('index')
    docker_run('concrete-python-image',
               'sleep',
               'infinity',
               d=True,
               v=('index', '/mnt/index'),
               name='index-copy')
    index_path = mktemp_path('.gz')
    with gzip.open(index_path, 'w') as f:
        f.write('''\
sweet	savory	sour	a	b	c	d	e	f	g	h	i	j	k
banana	0.3	0:3
orange	0.2	0:3	1:1	2:1
zucchini	0.3	0:2	1:6
tomato	0.4	1:4
squid	0.2	3:5	4:2	5:1	6:6	7:7	8:10	9:9	10:12	11:8	12:13	13:3
'''.encode('utf-8'))
    docker_cp(index_path, ('index-copy', '/mnt/index/index.gz'))
    force_remove(index_path)
    force_remove_container('index-copy')

    docker_run('boolean-search-image',
               d=True,
               v=('index', '/mnt/index'),
               name='boolean-search')
    wait_concrete_service('boolean-search', 'Search')

    yield 'boolean-search'

    force_remove_container('boolean-search')
    force_remove_container('index-copy')
    force_remove_volume('index')
    force_remove_image('search-client-image')
    force_remove_image('boolean-search-image')
    force_remove_image('concrete-python-image')
Пример #17
0
def test_index(index_volume):
    actual_text = docker_run(
        'concrete-python-image', 'gunzip', '-c',
        '/mnt/index/index.gz',
        rm=True, v=(index_volume, '/mnt/index'))
    expected_text = '''\
test comm 0	test comm 1	test comm 2
w1	1.098612	0:2
w2	0.405465	0:1	2:1
w3	1.098612	2:2
w4	1.098612	0:1
'''
    assert_index_near(expected_text, actual_text)
Пример #18
0
def index_volume():
    docker_build('Dockerfile.concrete_python', 'concrete-python-image')
    docker_build('Dockerfile.index', 'indexing-image')

    docker_volume_create('data')
    docker_volume_create('index')

    zip_path = mktemp_path('.zip')
    with CommunicationWriterZip(zip_path) as writer:
        writer.write(create_comm(
            'test comm 0',
            'w1\n{}\nw1\n\nw2 w4\n'.format(make_stop_word_text())))
        writer.write(create_comm(
            'test comm 1',
            '{}'.format(make_stop_word_text())))
        writer.write(create_comm(
            'test comm 2',
            '{}\nw3\nw3 w2\n'.format(make_stop_word_text())))

    docker_run(
        'concrete-python-image', 'sleep', 'infinity',
        d=True, v=('data', '/mnt/data'), name='data-copy')
    docker_cp(zip_path, ('data-copy', '/mnt/data/comms.tar.gz'))
    force_remove_container('data-copy')

    docker_run(
        'concrete-python-image',
        'fetch-server.py', '/mnt/data/comms.tar.gz',
        '--host', 'localhost', '--port', '9090',
        d=True, v=('data', '/mnt/data'), name='fetch')
    wait_concrete_service('fetch', 'FetchCommunication')
    docker_run(
        'indexing-image',
        network=('container', 'fetch'), rm=True,
        v=('index', '/mnt/index'))

    yield 'index'

    force_remove_container('data-copy')
    force_remove_container('fetch')
    force_remove_volume('data')
    force_remove_volume('index')
    force_remove(zip_path)
    force_remove_image('indexing-image')
    force_remove_image('concrete-python-image')