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_request_options_self(self, config, expected_options):
        # Uninteresting for this test, but required so we have a
        # valid config set
        config['cache_root'] = '/var/cache/loris'
        config['uri_resolvable'] = True

        resolver = SimpleHTTPResolver(config)
        assert resolver.request_options() == expected_options
Ejemplo n.º 3
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.º 4
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.º 5
0
    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()
Ejemplo n.º 6
0
 def test_missing_required_config(self):
     config = {
         'cache_root': self.cache_dir
     }
     self.assertRaises(
             ResolverException,
             lambda: SimpleHTTPResolver(config)
     )
Ejemplo n.º 7
0
    def test_barebones_config(self):
        config = {'cache_root': self.cache_dir, 'uri_resolvable': True}

        resolver = SimpleHTTPResolver(config)
        self.assertEqual(resolver.cache_root, self.cache_dir)
        self.assertEqual(resolver.source_prefix, '')
        self.assertEqual(resolver.source_suffix, '')
        self.assertEqual(resolver.default_format, None)
        self.assertEqual(resolver.head_resolvable, False)
        self.assertEqual(resolver.uri_resolvable, True)
        self.assertEqual(resolver.user, None)
        self.assertEqual(resolver.pw, None)
Ejemplo n.º 8
0
    def test_is_resolvable_uses_cached_result(self):
        self._mock_urls()

        config = {
            'cache_root' : self.SRC_IMAGE_CACHE,
            'source_prefix' : 'http://sample.sample/',
            'source_suffix' : '',
            'default_format' : 'tif',
            'head_resolvable' : True,
            'uri_resolvable' : True
        }
        self.app.resolver = SimpleHTTPResolver(config)

        assert self.app.resolver.resolve(self.app, ident='0001', base_uri='')
        assert self.app.resolver.is_resolvable(ident='0001')
Ejemplo n.º 9
0
    def test_with_default_format(self):
        self._mock_urls()
        config = {
            'cache_root' : self.SRC_IMAGE_CACHE,
            'source_prefix' : 'http://sample.sample/',
            'source_suffix' : '',
            'default_format' : 'tif',
            'head_resolvable' : True,
            'uri_resolvable' : True
        }
        self.app.resolver = SimpleHTTPResolver(config)

        ident = '0002'
        ii = self.app.resolver.resolve(self.app, ident, "")
        self.assertIsNotNone(ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))
Ejemplo n.º 10
0
    def test_config_assigned_to_resolver(self):
        config = {
            'cache_root': self.cache_dir,
            'source_prefix': 'http://www.mysite/',
            'source_suffix': '/accessMaster',
            'default_format': 'jp2',
            'head_resolvable': True,
            'uri_resolvable': True,
            'user': '******',
            'pw': 'TestPW',
        }

        resolver = SimpleHTTPResolver(config)
        self.assertEqual(resolver.cache_root, self.cache_dir)
        self.assertEqual(resolver.source_prefix, 'http://www.mysite/')
        self.assertEqual(resolver.source_suffix, '/accessMaster')
        self.assertEqual(resolver.default_format, 'jp2')
        self.assertEqual(resolver.head_resolvable, True)
        self.assertEqual(resolver.uri_resolvable, True)
        self.assertEqual(resolver.user, 'TestUser')
        self.assertEqual(resolver.pw, 'TestPW')
Ejemplo n.º 11
0
 def test_no_config(self):
     config = {}
     self.assertRaises(ConfigError, lambda: SimpleHTTPResolver(config))
Ejemplo n.º 12
0
 def test_no_config(self):
     config = {}
     self.assertRaises(
             ResolverException,
             lambda: SimpleHTTPResolver(config)
     )
Ejemplo n.º 13
0
    def test_simple_http_resolver(self):

        self._mock_urls()

        # First we test with no config...
        config = {}
        self.assertRaises(ResolverException,
                          lambda: SimpleHTTPResolver(config))

        # Then we test missing source_prefix and uri_resolvable
        config = {'cache_root': self.SRC_IMAGE_CACHE}
        self.assertRaises(ResolverException,
                          lambda: SimpleHTTPResolver(config))

        # Then we test with the full config...
        #TODO: More granular testing of these settings...
        config = {
            'cache_root': self.SRC_IMAGE_CACHE,
            'source_prefix': 'http://www.mysite/',
            'source_suffix': '/accessMaster',
            'default_format': 'jp2',
            'head_resolvable': True,
            'uri_resolvable': True,
            'user': '******',
            'pw': 'TestPW',
        }

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix, 'http://www.mysite/')
        self.assertEqual(self.app.resolver.source_suffix, '/accessMaster')
        self.assertEqual(self.app.resolver.default_format, 'jp2')
        self.assertEqual(self.app.resolver.head_resolvable, True)
        self.assertEqual(self.app.resolver.uri_resolvable, True)
        self.assertEqual(self.app.resolver.user, 'TestUser')
        self.assertEqual(self.app.resolver.pw, 'TestPW')

        # Then we test with a barebones default config...
        config = {'cache_root': self.SRC_IMAGE_CACHE, 'uri_resolvable': True}

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix, '')
        self.assertEqual(self.app.resolver.source_suffix, '')
        self.assertEqual(self.app.resolver.default_format, None)
        self.assertEqual(self.app.resolver.head_resolvable, False)
        self.assertEqual(self.app.resolver.uri_resolvable, True)
        self.assertEqual(self.app.resolver.user, None)
        self.assertEqual(self.app.resolver.pw, None)

        # Finally with the test config for now....
        config = {
            'cache_root': self.SRC_IMAGE_CACHE,
            'source_prefix': 'http://sample.sample/',
            'source_suffix': '',
            'head_resolvable': True,
            'uri_resolvable': True
        }

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix,
                         'http://sample.sample/')
        self.assertEqual(self.app.resolver.source_suffix, '')
        self.assertEqual(self.app.resolver.default_format, None)
        self.assertEqual(self.app.resolver.head_resolvable, True)
        self.assertEqual(self.app.resolver.uri_resolvable, True)

        #Test with identifier only
        ident = '0001'
        expected_path = join(self.app.resolver.cache_root, '25')
        expected_path = join(expected_path, 'bbd')
        expected_path = join(expected_path, 'cd0')
        expected_path = join(expected_path, '6c3')
        expected_path = join(expected_path, '2d4')
        expected_path = join(expected_path, '77f')
        expected_path = join(expected_path, '7fa')
        expected_path = join(expected_path, '1c3')
        expected_path = join(expected_path, 'e4a')
        expected_path = join(expected_path, '91b')
        expected_path = join(expected_path, '032')
        expected_path = join(expected_path, 'loris_cache.tif')

        ii = self.app.resolver.resolve(self.app, ident, "")
        self.assertEqual(expected_path, ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))

        #Test with a full uri
        #Note: This seems weird but idents resolve wrong and removes a slash from //
        ident = quote_plus('http://sample.sample/0001')
        expected_path = join(self.app.resolver.cache_root, 'http')
        expected_path = join(expected_path, '32')
        expected_path = join(expected_path, '3a5')
        expected_path = join(expected_path, '353')
        expected_path = join(expected_path, '8f5')
        expected_path = join(expected_path, '0de')
        expected_path = join(expected_path, '1d3')
        expected_path = join(expected_path, '011')
        expected_path = join(expected_path, '675')
        expected_path = join(expected_path, 'ebc')
        expected_path = join(expected_path, 'c75')
        expected_path = join(expected_path, '083')
        expected_path = join(expected_path, 'loris_cache.tif')

        self.assertFalse(exists(expected_path))
        ii = self.app.resolver.resolve(self.app, ident, "")
        self.assertEqual(expected_path, ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))

        #Test with a bad identifier
        ident = 'DOESNOTEXIST'
        self.assertRaises(
            ResolverException,
            lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with a bad url
        ident = quote_plus('http://sample.sample/DOESNOTEXIST')
        self.assertRaises(
            ResolverException,
            lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with no content-type or extension or default format
        ident = '0002'
        self.assertRaises(
            ResolverException,
            lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with invalid content-type
        ident = '0003'
        self.assertRaises(
            ResolverException,
            lambda: self.app.resolver.resolve(self.app, ident, ""))
Ejemplo n.º 14
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)
Ejemplo n.º 15
0
	def test_simple_http_resolver(self):

		# Mock out some urls for testing....
		responses.add(responses.GET, 'http://sample.sample/0001',
                      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.GET, 'http://sample.sample/0002',
                      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)

		responses.add(responses.GET, 'http://sample.sample/0003',
                      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/invalidformat')

		responses.add(responses.GET, 'http://sample.sample/DOESNOTEXIST',
                      body='Does Not Exist',
                      status=404,
                      content_type='application/html')


		# First we test with no config...
		config = {
		}
		self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))

        # Then we test missing source_prefix and uri_resolvable
		config = {
			'cache_root' : self.app.img_cache.cache_root
		}
		self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))

		# Then we test with the full config...
        #TODO: More granular testing of these settings...
		config = {
			'cache_root' : self.app.img_cache.cache_root,
			'source_prefix' : 'http://www.mysite/',
			'source_suffix' : '/accessMaster',
			'default_format' : 'jp2',
			'head_resolvable' : True,
			'uri_resolvable' : True,
			'user' : 'TestUser',
			'pw' : 'TestPW',
		}

		self.app.resolver = SimpleHTTPResolver(config)
		self.assertEqual(self.app.resolver.cache_root, self.app.img_cache.cache_root)
		self.assertEqual(self.app.resolver.source_prefix, 'http://www.mysite/')
		self.assertEqual(self.app.resolver.source_suffix, '/accessMaster')
		self.assertEqual(self.app.resolver.default_format, 'jp2')
		self.assertEqual(self.app.resolver.head_resolvable, True)
		self.assertEqual(self.app.resolver.uri_resolvable, True)
		self.assertEqual(self.app.resolver.user, 'TestUser')
		self.assertEqual(self.app.resolver.pw, 'TestPW')

		# Then we test with a barebones default config...
		config = {
			'cache_root' : self.app.img_cache.cache_root,
            'uri_resolvable' : True
		}

		self.app.resolver = SimpleHTTPResolver(config)
		self.assertEqual(self.app.resolver.cache_root, self.app.img_cache.cache_root)
		self.assertEqual(self.app.resolver.source_prefix, '')
		self.assertEqual(self.app.resolver.source_suffix, '')
		self.assertEqual(self.app.resolver.default_format, None)
		self.assertEqual(self.app.resolver.head_resolvable, False)
		self.assertEqual(self.app.resolver.uri_resolvable, True)
		self.assertEqual(self.app.resolver.user, None)
		self.assertEqual(self.app.resolver.pw, None)

        # Finally with the test config for now....
		config = {
			'cache_root' : self.app.img_cache.cache_root,
			'source_prefix' : 'http://sample.sample/',
			'source_suffix' : '',
			'head_resolvable' : True,
			'uri_resolvable' : True
		}

		self.app.resolver = SimpleHTTPResolver(config)
		self.assertEqual(self.app.resolver.cache_root, self.app.img_cache.cache_root)
		self.assertEqual(self.app.resolver.source_prefix, 'http://sample.sample/')
		self.assertEqual(self.app.resolver.source_suffix, '')
		self.assertEqual(self.app.resolver.default_format, None)
		self.assertEqual(self.app.resolver.head_resolvable, True)
		self.assertEqual(self.app.resolver.uri_resolvable, True)

        #Test with identifier only
		ident = '0001'
		resolved_path, fmt = self.app.resolver.resolve(ident)
		expected_path = join(self.app.img_cache.cache_root, '25')
		expected_path = join(expected_path, 'bbd')
		expected_path = join(expected_path, 'cd0')
		expected_path = join(expected_path, '6c3')
		expected_path = join(expected_path, '2d4')
		expected_path = join(expected_path, '77f')
		expected_path = join(expected_path, '7fa')
		expected_path = join(expected_path, '1c3')
		expected_path = join(expected_path, 'e4a')
		expected_path = join(expected_path, '91b')
		expected_path = join(expected_path, '032')
		expected_path = join(expected_path, 'loris_cache.tif')

		self.assertEqual(expected_path, resolved_path)
		self.assertEqual(fmt, 'tif')
		self.assertTrue(isfile(resolved_path))

        #Test with a full uri
        #Note: This seems weird but idents resolve wrong and removes a slash from //
		ident = quote_plus('http:/sample.sample/0001')
		resolved_path, fmt = self.app.resolver.resolve(ident)
		expected_path = join(self.app.img_cache.cache_root, 'http')
		expected_path = join(expected_path, '9d')
		expected_path = join(expected_path, '423')
		expected_path = join(expected_path, 'a05')
		expected_path = join(expected_path, '863')
		expected_path = join(expected_path, 'f9f')
		expected_path = join(expected_path, '89d')
		expected_path = join(expected_path, '06e')
		expected_path = join(expected_path, '282')
		expected_path = join(expected_path, 'e84')
		expected_path = join(expected_path, '26c')
		expected_path = join(expected_path, 'b78')
		expected_path = join(expected_path, 'loris_cache.tif')

		self.assertEqual(expected_path, resolved_path)
		self.assertEqual(fmt, 'tif')
		self.assertTrue(isfile(resolved_path))

        #Test with a bad identifier
		ident = 'DOESNOTEXIST'
		self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(ident))

        #Test with a bad url
		ident = quote_plus('http:/sample.sample/DOESNOTEXIST')
		self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(ident))

        #Test with no content-type or extension or default format
		ident = '0002'
		self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(ident))

        #Test with invalid content-type
		ident = '0003'
		self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(ident))

        #Tests with a default format...
		config = {
			'cache_root' : self.app.img_cache.cache_root,
			'source_prefix' : 'http://sample.sample/',
			'source_suffix' : '',
			'default_format' : 'tif',
			'head_resolvable' : True,
			'uri_resolvable' : True
		}
		self.app.resolver = SimpleHTTPResolver(config)

		ident = '0002'
		resolved_path, fmt = self.app.resolver.resolve(ident)
		self.assertIsNotNone(resolved_path)
		self.assertEqual(fmt, 'tif')
		self.assertTrue(isfile(resolved_path))

		ident = '0003'
		resolved_path, fmt = self.app.resolver.resolve(ident)
		self.assertIsNotNone(resolved_path)
		self.assertEqual(fmt, 'tif')
		self.assertTrue(isfile(resolved_path))
Ejemplo n.º 16
0
    def test_simple_http_resolver(self):

        self._mock_urls()

        # First we test with no config...
        config = {
        }
        self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))

        # Then we test missing source_prefix and uri_resolvable
        config = {
            'cache_root' : self.SRC_IMAGE_CACHE
        }
        self.assertRaises(ResolverException, lambda: SimpleHTTPResolver(config))

        # Then we test with the full config...
        #TODO: More granular testing of these settings...
        config = {
            'cache_root' : self.SRC_IMAGE_CACHE,
            'source_prefix' : 'http://www.mysite/',
            'source_suffix' : '/accessMaster',
            'default_format' : 'jp2',
            'head_resolvable' : True,
            'uri_resolvable' : True,
            'user' : 'TestUser',
            'pw' : 'TestPW',
        }

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix, 'http://www.mysite/')
        self.assertEqual(self.app.resolver.source_suffix, '/accessMaster')
        self.assertEqual(self.app.resolver.default_format, 'jp2')
        self.assertEqual(self.app.resolver.head_resolvable, True)
        self.assertEqual(self.app.resolver.uri_resolvable, True)
        self.assertEqual(self.app.resolver.user, 'TestUser')
        self.assertEqual(self.app.resolver.pw, 'TestPW')

        # Then we test with a barebones default config...
        config = {
            'cache_root' : self.SRC_IMAGE_CACHE,
            'uri_resolvable' : True
        }

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix, '')
        self.assertEqual(self.app.resolver.source_suffix, '')
        self.assertEqual(self.app.resolver.default_format, None)
        self.assertEqual(self.app.resolver.head_resolvable, False)
        self.assertEqual(self.app.resolver.uri_resolvable, True)
        self.assertEqual(self.app.resolver.user, None)
        self.assertEqual(self.app.resolver.pw, None)

        # Finally with the test config for now....
        config = {
            'cache_root' : self.SRC_IMAGE_CACHE,
            'source_prefix' : 'http://sample.sample/',
            'source_suffix' : '',
            'head_resolvable' : True,
            'uri_resolvable' : True
        }

        self.app.resolver = SimpleHTTPResolver(config)
        self.assertEqual(self.app.resolver.source_prefix, 'http://sample.sample/')
        self.assertEqual(self.app.resolver.source_suffix, '')
        self.assertEqual(self.app.resolver.default_format, None)
        self.assertEqual(self.app.resolver.head_resolvable, True)
        self.assertEqual(self.app.resolver.uri_resolvable, True)

        #Test with identifier only
        ident = '0001'
        expected_path = join(self.app.resolver.cache_root, '25')
        expected_path = join(expected_path, 'bbd')
        expected_path = join(expected_path, 'cd0')
        expected_path = join(expected_path, '6c3')
        expected_path = join(expected_path, '2d4')
        expected_path = join(expected_path, '77f')
        expected_path = join(expected_path, '7fa')
        expected_path = join(expected_path, '1c3')
        expected_path = join(expected_path, 'e4a')
        expected_path = join(expected_path, '91b')
        expected_path = join(expected_path, '032')
        expected_path = join(expected_path, '0001') #add identifier to the path
        expected_path = join(expected_path, 'loris_cache.tif')

        ii = self.app.resolver.resolve(self.app, ident, "")
        self.assertEqual(expected_path, ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))

        # Store the number of HTTP requests made after the first resolution
        # so that we can check whether one get (erroneously) made rather than
        # the cache being used.
        calls_after_resolved = len(responses.calls)

        # Now we resolve the same identifier a second time, when the cache
        # is warm.
        ii = self.app.resolver.resolve(self.app, ident, base_uri="")
        assert ii.src_img_fp == expected_path
        assert ii.src_format == "tif"
        assert os.path.isfile(ii.src_img_fp)
        assert len(responses.calls) == calls_after_resolved

        #Test with a full uri
        ident = quote_plus('http://sample.sample/0001')
        expected_path = join(self.app.resolver.cache_root, 'http')
        expected_path = join(expected_path, '32')
        expected_path = join(expected_path, '3a5')
        expected_path = join(expected_path, '353')
        expected_path = join(expected_path, '8f5')
        expected_path = join(expected_path, '0de')
        expected_path = join(expected_path, '1d3')
        expected_path = join(expected_path, '011')
        expected_path = join(expected_path, '675')
        expected_path = join(expected_path, 'ebc')
        expected_path = join(expected_path, 'c75')
        expected_path = join(expected_path, '083')
        expected_path = join(expected_path, unquote(ident))
        expected_path = join(expected_path, 'loris_cache.tif')

        self.assertFalse(exists(expected_path))
        ii = self.app.resolver.resolve(self.app, ident, "")
        self.assertEqual(expected_path, ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))

        # Test with an identifier including url-encodable characters
        ident = '01/02/0003'
        expected_path = join(self.app.resolver.cache_root, '7e')
        expected_path = join(expected_path, 'b5c')
        expected_path = join(expected_path, '9cf')
        expected_path = join(expected_path, '404')
        expected_path = join(expected_path, 'c6d')
        expected_path = join(expected_path, 'c34')
        expected_path = join(expected_path, 'f5c')
        expected_path = join(expected_path, '657')
        expected_path = join(expected_path, '9c9')
        expected_path = join(expected_path, '016')
        expected_path = join(expected_path, '315')
        expected_path = join(expected_path, ident) #add identifier to the path
        expected_path = join(expected_path, 'loris_cache.tif')

        encoded_ident = quote_plus(ident)
        ii = self.app.resolver.resolve(self.app, encoded_ident, "")
        self.assertEqual(expected_path, ii.src_img_fp)
        self.assertEqual(ii.src_format, 'tif')
        self.assertTrue(isfile(ii.src_img_fp))

        # Store the number of HTTP requests made after the first resolution
        # so that we can check whether one get (erroneously) made rather than
        # the cache being used.
        calls_after_resolved = len(responses.calls)

        # Now we resolve the same identifier a second time, when the cache
        # is warm.
        ii = self.app.resolver.resolve(self.app, encoded_ident, base_uri="")
        assert ii.src_img_fp == expected_path
        assert ii.src_format == "tif"
        assert os.path.isfile(ii.src_img_fp)
        assert len(responses.calls) == calls_after_resolved

        #Test with a bad identifier
        ident = 'DOESNOTEXIST'
        self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with a bad url
        ident = quote_plus('http://sample.sample/DOESNOTEXIST')
        self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with no content-type or extension or default format
        ident = '0002'
        self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(self.app, ident, ""))

        #Test with invalid content-type
        ident = '0003'
        self.assertRaises(ResolverException, lambda: self.app.resolver.resolve(self.app, ident, ""))
Ejemplo n.º 17
0
 def cache_dir_path(self, ident):
     ident = unquote(ident)
     return join(self.cache_root, SimpleHTTPResolver._cache_subroot(ident))