Ejemplo n.º 1
0
 def test_ident_regex_blocks_based_on_ident(self, mock_responses, ident_regex, ident, expected_resolvable):
     config = {
         'cache_root': '/var/cache/loris',
         'source_prefix': 'http://sample.sample/',
         'ident_regex': ident_regex,
     }
     resolver = SimpleHTTPResolver(config=config)
     assert resolver.is_resolvable(ident=ident) == expected_resolvable
Ejemplo n.º 2
0
 def test_non_http_rejected_as_not_resolvable(self, head_resolvable):
     config = {
         'cache_root': '/var/cache/loris',
         'source_prefix': 'irc://example.irc/loris/',
         'uri_resolvable': True,
         'head_resolvable': head_resolvable,
     }
     resolver = SimpleHTTPResolver(config=config)
     assert not resolver.is_resolvable(ident='example.png')
Ejemplo n.º 3
0
 def test_is_resolvable(self, mock_responses,
                        head_resolvable, ident, expected_resolvable):
     config = {
         'cache_root': '/var/cache/loris',
         'source_prefix': 'http://sample.sample/',
         'uri_resolvable': True,
         'head_resolvable': head_resolvable,
     }
     resolver = SimpleHTTPResolver(config=config)
     assert resolver.is_resolvable(ident=ident) == expected_resolvable
Ejemplo n.º 4
0
class SimpleHTTPResolverTest(unittest.TestCase):

    def setUp(self):
        super(SimpleHTTPResolverTest, self).setUp()
        tests_dir = os.path.dirname(os.path.realpath(__file__))
        self.cache_dir = os.path.join(tests_dir, 'cache')
        prefix_url = 'http://sample.sample/'

        config = {
            'cache_root': self.cache_dir,
            'source_prefix': prefix_url,
            'source_suffix': '',
            'head_resolvable': True,
            'uri_resolvable': True
        }
        self.resolver = SimpleHTTPResolver(config)
        self.not_identifier = 'DOES_NOT_EXIST'
        self.not_identifier_url = ''.join(
                [
                    prefix_url,
                    self.not_identifier
                ]
        )
        self.identifier = '0001'
        self.identifier_url = ''.join(
                [
                    prefix_url,
                    self.identifier
                ]
        )
        self.expected_format = 'tif'
        expected_filepath_list = [
                    self.cache_dir,
                    '25',
                    'bbd',
                    'cd0',
                    '6c3',
                    '2d4',
                    '77f',
                    '7fa',
                    '1c3',
                    'e4a',
                    '91b',
                    '032',
                    '0001', #identifier
                ]
        self.expected_filedir = os.path.join(*expected_filepath_list)
        self.expected_filepath = os.path.join(self.expected_filedir, 'loris_cache.tif')
        self.set_responses()

    def set_responses(self):
        responses.add(
                responses.HEAD,
                self.identifier_url,
                status=200,
                content_type='image/tiff'
        )
        responses.add(
                responses.GET,
                self.identifier_url,
                body='II*\x00\x0c\x00\x00\x00\x80\x00  \x0e\x00\x00\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x01\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x03\x01\x03\x00\x01\x00\x00\x00\x05\x00\x00\x00\x06\x01\x03\x00\x01\x00\x00\x00\x03\x00\x00\x00\x11\x01\x04\x00\x01\x00\x00\x00\x08\x00\x00\x00\x15\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x16\x01\x03\x00\x01\x00\x00\x00\x08\x00\x00\x00\x17\x01\x04\x00\x01\x00\x00\x00\x04\x00\x00\x00\x1a\x01\x05\x00\x01\x00\x00\x00\xba\x00\x00\x00\x1b\x01\x05\x00\x01\x00\x00\x00\xc2\x00\x00\x00\x1c\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00\x00\x00@\x01\x03\x00\x00\x03\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x00\xff`\xe6q\x19\x08\x00\x00\x80\t\x00\x00\x80\n\x00\x00\x80\x0b\x00\x00\x80\x0c\x00\x00\x80\r',
                status=200,
                content_type='image/tiff'
        )
        responses.add(
                responses.HEAD,
                self.not_identifier_url,
                status=404,
                content_type='application/html'
        )
        responses.add(
                responses.GET,
                self.not_identifier_url,
                body='Does Not Exist',
                status=404,
                content_type='application/html'
        )

    def test_get_format(self):
        self.resolver.default_format = 'tif'
        self.assertEqual(self.resolver.get_format('0001.jp2', None), 'tif')
        self.resolver.default_format = None
        self.assertEqual(self.resolver.get_format('0001.jp2', 'tif'), 'tif')
        self.assertEqual(self.resolver.get_format('0001.jp2', None), 'jp2')

    @responses.activate
    def test_bad_url(self):
        self.assertRaises(
                ResolverException,
                lambda: self.resolver.resolve(None, self.not_identifier_url, "")
        )

    @responses.activate
    def test_does_not_exist(self):
        self.assertRaises(
                ResolverException,
                lambda: self.resolver.resolve(None, self.not_identifier, "")
        )

    @responses.activate
    def test_cached_file_for_ident(self):
        self.resolver.copy_to_cache(self.identifier)
        self.assertTrue(os.path.isfile(self.expected_filepath))
        self.assertEqual(self.resolver.cached_file_for_ident(self.identifier), self.expected_filepath)

    @responses.activate
    def test_resolve_001(self):
        expected_resolved = self.expected_filepath
        ii = self.resolver.resolve(None, self.identifier, "")
        self.assertEqual(ii.src_img_fp, expected_resolved)
        # Make sure the file exists in the cache
        self.assertTrue(os.path.isfile(self.expected_filepath))

    @responses.activate
    def test_is_resolvable_001(self):
        self.assertTrue(
         self.resolver.is_resolvable(self.identifier)
        )
        # Make sure the file DOES NOT exists in the cache
        self.assertFalse(os.path.isfile(self.expected_filepath))

    @responses.activate
    def test_is_not_resolvable(self):
        self.assertFalse(
                self.resolver.is_resolvable(self.not_identifier)
        )

    def tearDown(self):
        # Clean Up the cache directory
        if os.path.exists(self.cache_dir):
            shutil.rmtree(self.cache_dir)