class TestTileManagerMultipleSources(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_base = MockSource() self.source_overlay = MockSource() self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', image_opts=self.image_opts, locker=self.locker, ) self.layer = CacheMapLayer(self.tile_mgr) def test_get_single(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1)])) eq_(self.source_base.requested, [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326))]) eq_(self.source_overlay.requested, [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326))])
class TestTileManagerLocking(object): def setup(self): self.tile_dir = tempfile.mkdtemp() self.file_cache = MockFileCache(self.tile_dir, 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source = SlowMockSource() self.image_opts = ImageOptions(format='image/png') self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts) def test_get_single(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.source.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_concurrent(self): def do_it(): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) threads = [threading.Thread(target=do_it) for _ in range(3)] [t.start() for t in threads] [t.join() for t in threads] eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.file_cache.loaded_tiles, counting_set([(0, 0, 1), (1, 0, 1), (0, 0, 1), (1, 0, 1)])) eq_(self.source.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) assert os.path.exists(self.file_cache.tile_location(Tile((0, 0, 1)))) def teardown(self): shutil.rmtree(self.tile_dir)
class TestTileManagerBulkMetaTiles(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin='ul') self.source_base = SolidColorMockSource(color='#ff0000') self.source_base.supports_meta_tiles = False self.source_overlay = MockSource() self.source_overlay.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker, bulk_meta_tiles=True, ) def test_bulk_get(self): tiles = self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(len(tiles), 2 * 2) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) for requested in [ self.source_base.requested, self.source_overlay.requested ]: eq_( set(requested), set([ ((-180.0, 0.0, -90.0, 90.0), (256, 256), SRS(4326)), ((-90.0, 0.0, 0.0, 90.0), (256, 256), SRS(4326)), ((-180.0, -90.0, -90.0, 0.0), (256, 256), SRS(4326)), ((-90.0, -90.0, 0.0, 0.0), (256, 256), SRS(4326)), ])) def test_bulk_get_error(self): self.tile_mgr.sources = [self.source_base, ErrorSource()] try: self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) except Exception as ex: eq_(ex.args[0], "source error") def test_bulk_get_multiple_meta_tiles(self): tiles = self.tile_mgr.creator().create_tiles( [Tile((1, 0, 2)), Tile((2, 0, 2))]) eq_(len(tiles), 2 * 2 * 2) eq_( self.file_cache.stored_tiles, set([ (0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2), ]))
class TestTileManagerLocking(object): def setup(self): self.tile_dir = tempfile.mkdtemp() self.file_cache = MockFileCache(self.tile_dir, 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source = SlowMockSource() self.image_opts = ImageOptions(format='image/png') self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts) def test_get_single(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.source.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_concurrent(self): def do_it(): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) threads = [threading.Thread(target=do_it) for _ in range(3)] [t.start() for t in threads] [t.join() for t in threads] eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.file_cache.loaded_tiles, counting_set([(0, 0, 1), (1, 0, 1), (0, 0, 1), (1, 0, 1)])) eq_(self.source.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) assert os.path.exists(self.file_cache.tile_location(Tile((0, 0, 1)))) def teardown(self): shutil.rmtree(self.tile_dir)
class TestTileManagerDifferentSourceGrid(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_grid = TileGrid(SRS(4326), bbox=[0, -90, 180, 90]) self.client = MockTileClient() self.source = TiledSource(self.source_grid, self.client) self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source], 'png', image_opts=self.image_opts, locker=self.locker, ) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(1, 0, 1)])) eq_(self.client.requested_tiles, [(0, 0, 0)]) @raises(InvalidSourceQuery) def test_create_tiles_out_of_bounds(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 0))])
class TestTileManagerSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source = MockSource() self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source], 'png', image_opts=self.image_opts, locker=self.locker, ) def test_create_tile(self): self.tile_mgr.creator().create_tiles( [Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(sorted(self.source.requested), [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (256, 256), SRS(4326))])
class TestTileManagerBulkMetaTiles(object): def setup(self): self.file_cache = MockFileCache("/dev/null", "png") self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90], origin="ul") self.source_base = SolidColorMockSource(color="#ff0000") self.source_base.supports_meta_tiles = False self.source_overlay = MockSource() self.source_overlay.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source_base, self.source_overlay], "png", meta_size=[2, 2], meta_buffer=0, locker=self.locker, bulk_meta_tiles=True, ) def test_bulk_get(self): tiles = self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(len(tiles), 2 * 2) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) for requested in [self.source_base.requested, self.source_overlay.requested]: eq_( set(requested), set( [ ((-180.0, 0.0, -90.0, 90.0), (256, 256), SRS(4326)), ((-90.0, 0.0, 0.0, 90.0), (256, 256), SRS(4326)), ((-180.0, -90.0, -90.0, 0.0), (256, 256), SRS(4326)), ((-90.0, -90.0, 0.0, 0.0), (256, 256), SRS(4326)), ] ), ) def test_bulk_get_error(self): self.tile_mgr.sources = [self.source_base, ErrorSource()] try: self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) except Exception as ex: eq_(ex.args[0], "source error") def test_bulk_get_multiple_meta_tiles(self): tiles = self.tile_mgr.creator().create_tiles([Tile((1, 0, 2)), Tile((2, 0, 2))]) eq_(len(tiles), 2 * 2 * 2) eq_( self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)]), )
class TestTileManagerTiledSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockTileClient() self.source = TiledSource(self.grid, self.client) self.image_opts = ImageOptions(format='image/png') self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', image_opts=self.image_opts) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(sorted(self.client.requested_tiles), [(0, 0, 1), (1, 0, 1)])
class TestTileManagerTiledSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockTileClient() self.source = TiledSource(self.grid, self.client) self.image_opts = ImageOptions(format='image/png') self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', image_opts=self.image_opts) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(sorted(self.client.requested_tiles), [(0, 0, 1), (1, 0, 1)])
class TestTileManagerMultipleSourcesWithMetaTiles(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_base = SolidColorMockSource(color='#ff0000') self.source_base.supports_meta_tiles = True self.source_overlay = MockSource() self.source_overlay.supports_meta_tiles = True self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker, ) def test_merged_tiles(self): tiles = self.tile_mgr.creator().create_tiles( [Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.source_base.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) eq_(self.source_overlay.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) hist = tiles[0].source.as_image().histogram() # lots of red (base), but not everything (overlay) assert 55000 < hist[255] < 60000 # red = 0xff assert 55000 < hist[256] # green = 0x00 assert 55000 < hist[512] # blue = 0x00 @raises(ValueError) def test_sources_with_mixed_support_for_meta_tiles(self): self.source_base.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker) def test_sources_with_no_support_for_meta_tiles(self): self.source_base.supports_meta_tiles = False self.source_overlay.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker) assert self.tile_mgr.meta_grid is None
class TestTileManagerSource(object): def setup(self): self.file_cache = MockFileCache("/dev/null", "png") self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source = MockSource() self.image_opts = ImageOptions(format="image/png") self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source], "png", image_opts=self.image_opts, locker=self.locker ) def test_create_tile(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_( sorted(self.source.requested), [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (256, 256), SRS(4326))], )
class TestTileManagerMultipleSources(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_base = MockSource() self.source_overlay = MockSource() self.image_opts = ImageOptions(format='image/png') self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', image_opts=self.image_opts) self.layer = CacheMapLayer(self.tile_mgr) def test_get_single(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1)])) eq_(self.source_base.requested, [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326))]) eq_(self.source_overlay.requested, [((-180.0, -90.0, 0.0, 90.0), (256, 256), SRS(4326))])
class TestTileManagerDifferentSourceGrid(object): def setup(self): self.file_cache = MockFileCache("/dev/null", "png") self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_grid = TileGrid(SRS(4326), bbox=[0, -90, 180, 90]) self.client = MockTileClient() self.source = TiledSource(self.source_grid, self.client) self.image_opts = ImageOptions(format="image/png") self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager( self.grid, self.file_cache, [self.source], "png", image_opts=self.image_opts, locker=self.locker ) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(1, 0, 1)])) eq_(self.client.requested_tiles, [(0, 0, 0)]) @raises(InvalidSourceQuery) def test_create_tiles_out_of_bounds(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 0))])
class TestTileManagerWMSSourceMinimalMetaRequests(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=10, minimize_meta_requests=True) def test_create_tile_single(self): # not enabled for single tile requests self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (0, 1, 2), (1, 0, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 3.515625, 90.0), (522, 512), SRS(4326))]) def test_create_tile_multiple(self): self.tile_mgr.creator().create_tiles([Tile((4, 0, 3)), Tile((4, 1, 3)), Tile((4, 2, 3))]) eq_(self.file_cache.stored_tiles, set([(4, 0, 3), (4, 1, 3), (4, 2, 3)])) eq_(sorted(self.client.requested), [((-1.7578125, -90, 46.7578125, 46.7578125), (276, 778), SRS(4326))]) def test_create_tile_multiple_fragmented(self): self.tile_mgr.creator().create_tiles([Tile((4, 0, 3)), Tile((5, 2, 3))]) eq_(self.file_cache.stored_tiles, set([(4, 0, 3), (4, 1, 3), (4, 2, 3), (5, 0, 3), (5, 1, 3), (5, 2, 3)])) eq_(sorted(self.client.requested), [((-1.7578125, -90, 91.7578125, 46.7578125), (532, 778), SRS(4326))])
class TestTileManagerWMSSourceMinimalMetaRequests(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=10, minimize_meta_requests=True) def test_create_tile_single(self): # not enabled for single tile requests self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (0, 1, 2), (1, 0, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 3.515625, 90.0), (522, 512), SRS(4326))]) def test_create_tile_multiple(self): self.tile_mgr.creator().create_tiles([Tile((4, 0, 3)), Tile((4, 1, 3)), Tile((4, 2, 3))]) eq_(self.file_cache.stored_tiles, set([(4, 0, 3), (4, 1, 3), (4, 2, 3)])) eq_(sorted(self.client.requested), [((-1.7578125, -90, 46.7578125, 46.7578125), (276, 778), SRS(4326))]) def test_create_tile_multiple_fragmented(self): self.tile_mgr.creator().create_tiles([Tile((4, 0, 3)), Tile((5, 2, 3))]) eq_(self.file_cache.stored_tiles, set([(4, 0, 3), (4, 1, 3), (4, 2, 3), (5, 0, 3), (5, 1, 3), (5, 2, 3)])) eq_(sorted(self.client.requested), [((-1.7578125, -90, 91.7578125, 46.7578125), (532, 778), SRS(4326))])
class TestTileManagerMultipleSourcesWithMetaTiles(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.source_base = SolidColorMockSource(color='#ff0000') self.source_base.supports_meta_tiles = True self.source_overlay = MockSource() self.source_overlay.supports_meta_tiles = True self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker, ) def test_merged_tiles(self): tiles = self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.source_base.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) eq_(self.source_overlay.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) hist = tiles[0].source.as_image().histogram() # lots of red (base), but not everything (overlay) assert 55000 < hist[255] < 60000 # red = 0xff assert 55000 < hist[256] # green = 0x00 assert 55000 < hist[512] # blue = 0x00 @raises(ValueError) def test_sources_with_mixed_support_for_meta_tiles(self): self.source_base.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker) def test_sources_with_no_support_for_meta_tiles(self): self.source_base.supports_meta_tiles = False self.source_overlay.supports_meta_tiles = False self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source_base, self.source_overlay], 'png', meta_size=[2, 2], meta_buffer=0, locker=self.locker) assert self.tile_mgr.meta_grid is None
class TestTileManagerWMSSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png', lock_dir=tmp_lock_dir) self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts, locker=self.locker, ) def test_same_lock_for_meta_tile(self): eq_(self.tile_mgr.lock(Tile((0, 0, 1))).lock_file, self.tile_mgr.lock(Tile((1, 0, 1))).lock_file ) def test_locks_for_meta_tiles(self): assert_not_equal(self.tile_mgr.lock(Tile((0, 0, 2))).lock_file, self.tile_mgr.lock(Tile((2, 0, 2))).lock_file ) def test_create_tile_first_level(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.client.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_create_tile(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326))]) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2)), Tile((2, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))]) def test_load_tile_coords(self): tiles = self.tile_mgr.load_tile_coords(((0, 0, 2), (2, 0, 2))) eq_(tiles[0].coord, (0, 0, 2)) assert isinstance(tiles[0].source, ImageSource) eq_(tiles[1].coord, (2, 0, 2)) assert isinstance(tiles[1].source, ImageSource) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))])
class TestTileManagerWMSSource(object): def setup(self): self.file_cache = MockFileCache('/dev/null', 'png') self.grid = TileGrid(SRS(4326), bbox=[-180, -90, 180, 90]) self.client = MockWMSClient() self.source = WMSSource(self.client) self.image_opts = ImageOptions(format='image/png') self.locker = TileLocker(tmp_lock_dir, 10, "id") self.tile_mgr = TileManager(self.grid, self.file_cache, [self.source], 'png', meta_size=[2, 2], meta_buffer=0, image_opts=self.image_opts, locker=self.locker, ) def test_same_lock_for_meta_tile(self): eq_(self.tile_mgr.lock(Tile((0, 0, 1))).lock_file, self.tile_mgr.lock(Tile((1, 0, 1))).lock_file ) def test_locks_for_meta_tiles(self): assert_not_equal(self.tile_mgr.lock(Tile((0, 0, 2))).lock_file, self.tile_mgr.lock(Tile((2, 0, 2))).lock_file ) def test_create_tile_first_level(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 1)), Tile((1, 0, 1))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 1), (1, 0, 1)])) eq_(self.client.requested, [((-180.0, -90.0, 180.0, 90.0), (512, 256), SRS(4326))]) def test_create_tile(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326))]) def test_create_tiles(self): self.tile_mgr.creator().create_tiles([Tile((0, 0, 2)), Tile((2, 0, 2))]) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))]) def test_load_tile_coords(self): tiles = self.tile_mgr.load_tile_coords(((0, 0, 2), (2, 0, 2))) eq_(tiles[0].coord, (0, 0, 2)) assert isinstance(tiles[0].source, ImageSource) eq_(tiles[1].coord, (2, 0, 2)) assert isinstance(tiles[1].source, ImageSource) eq_(self.file_cache.stored_tiles, set([(0, 0, 2), (1, 0, 2), (0, 1, 2), (1, 1, 2), (2, 0, 2), (3, 0, 2), (2, 1, 2), (3, 1, 2)])) eq_(sorted(self.client.requested), [((-180.0, -90.0, 0.0, 90.0), (512, 512), SRS(4326)), ((0.0, -90.0, 180.0, 90.0), (512, 512), SRS(4326))])