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'])
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 == ''
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'
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')
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
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']
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']
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 == ''
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
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
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
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']
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 == ""
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
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 == ""
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')
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)
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')