func (suite *DynamicChunkStoreSuite) TestSwapReplacesWrapped(c *check.C) { provider1 := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) provider2 := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(2), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) testStore := NewDynamicChunkStore(store.NewProviderBacked(provider1, func() {})) testStore.Swap(func(oldStore chunk.Store) chunk.Store { return store.NewProviderBacked(provider2, func() {}) }) c.Check(testStore.IDs(), check.DeepEquals, []res.ResourceID{res.ResourceID(2)}) }
func (suite *DynamicChunkStoreSuite) TestBlockHolderModifiesWrappedAfterSwap(c *check.C) { provider1 := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) provider2 := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) testStore := NewDynamicChunkStore(store.NewProviderBacked(provider1, func() {})) holder := testStore.Get(res.ResourceID(1)) wrapped2 := store.NewProviderBacked(provider2, func() {}) testStore.Swap(func(oldStore chunk.Store) chunk.Store { return wrapped2 }) data := []byte{0x01, 0x02} holder.SetBlockData(0, data) c.Check(wrapped2.Get(res.ResourceID(1)).BlockData(0), check.DeepEquals, data) }
func (suite *DynamicChunkStoreSuite) TestPutInsertsToWrapped(c *check.C) { provider := suite.createChunkProvider(func(consumer chunk.Consumer) {}) wrappedStore := store.NewProviderBacked(provider, func() {}) store := NewDynamicChunkStore(wrappedStore) store.Put(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) ids := store.IDs() c.Check(len(ids), check.Equals, 1) }
func (suite *ReleaseStoreLibrarySuite) TestChunkStoreIsBackedBySourceIfExisting(c *check.C) { suite.createChunkResource(suite.source, "fromSource.res", func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) store, err := suite.library.ChunkStore("fromSource.res") c.Assert(err, check.IsNil) c.Assert(store, check.NotNil) blockStore := store.Get(res.ResourceID(1)) c.Check(blockStore.BlockCount(), check.Equals, uint16(1)) }
func (suite *DynamicChunkStoreSuite) TestGetReturnsBlockFromWrapped(c *check.C) { provider := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) wrappedStore := store.NewProviderBacked(provider, func() {}) store := NewDynamicChunkStore(wrappedStore) holder := store.Get(res.ResourceID(1)) c.Check(holder, check.NotNil) }
func (suite *ReleaseStoreLibrarySuite) TestChunkStoreReturnsSameInstances(c *check.C) { suite.createChunkResource(suite.source, "source.res", func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) store1, err1 := suite.library.ChunkStore("source.res") c.Assert(err1, check.IsNil) c.Assert(store1, check.NotNil) store2, err2 := suite.library.ChunkStore("source.res") c.Assert(err2, check.IsNil) c.Check(store1, check.Equals, store2) }
func (suite *DynamicChunkStoreSuite) TestBlockHolderModifiesWrapped(c *check.C) { provider := suite.createChunkProvider(func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) wrappedStore := store.NewProviderBacked(provider, func() {}) store := NewDynamicChunkStore(wrappedStore) data := []byte{0x01, 0x02} holder := store.Get(res.ResourceID(1)) holder.SetBlockData(0, data) c.Check(wrappedStore.Get(res.ResourceID(1)).BlockData(0), check.DeepEquals, data) }
func (suite *ReleaseStoreLibrarySuite) TestModifyingChunkSourceSavesNewSink(c *check.C) { suite.createChunkResource(suite.source, "source.res", func(consumer chunk.Consumer) { consumer.Consume(res.ResourceID(1), chunk.NewBlockHolder(chunk.BasicChunkType, res.Palette, [][]byte{[]byte{}})) }) store, err := suite.library.ChunkStore("source.res") c.Assert(err, check.IsNil) c.Assert(store, check.NotNil) store.Del(res.ResourceID(1)) time.Sleep(100 * time.Millisecond) c.Check(suite.sink.HasResource("source.res"), check.Equals, true) }