110 lines
4.3 KiB
Go
110 lines
4.3 KiB
Go
|
package commands
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWith1Chunk(t *testing.T) {
|
||
|
// Mocks 1 chunk
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 0)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1010, true)
|
||
|
checkNext(t, blockProvider, 1005, true)
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWith1ChunkMiddleBlock(t *testing.T) {
|
||
|
// Mocks 1 chunk
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 1005)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1005, true)
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWith1ChunkNotExactBlock(t *testing.T) {
|
||
|
// Mocks 1 chunk
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 1003)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWith1ChunkLastBlock(t *testing.T) {
|
||
|
// Mocks 1 chunk
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 1000)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWith1ChunkBlockNotFound(t *testing.T) {
|
||
|
// Mocks 1 chunk
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 900)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 0, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWithNoChunks(t *testing.T) {
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 0)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 0, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWithMultipleChunks(t *testing.T) {
|
||
|
// Mocks 2 chunks
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
chunk2 := createBitmap(t, []uint64{1501, 1600})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1, chunk2})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 0)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1600, true)
|
||
|
checkNext(t, blockProvider, 1501, true)
|
||
|
checkNext(t, blockProvider, 1010, true)
|
||
|
checkNext(t, blockProvider, 1005, true)
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|
||
|
|
||
|
func TestFromToBackwardBlockProviderWithMultipleChunksBlockBetweenChunks(t *testing.T) {
|
||
|
// Mocks 2 chunks
|
||
|
chunk1 := createBitmap(t, []uint64{1000, 1005, 1010})
|
||
|
chunk2 := createBitmap(t, []uint64{1501, 1600})
|
||
|
|
||
|
chunkLocator := newMockBackwardChunkLocator([][]byte{chunk1, chunk2})
|
||
|
fromBlockProvider := NewBackwardBlockProvider(chunkLocator, 1500)
|
||
|
toBlockProvider := NewBackwardBlockProvider(newMockBackwardChunkLocator([][]byte{}), 0)
|
||
|
blockProvider := newCallFromToBlockProvider(true, fromBlockProvider, toBlockProvider)
|
||
|
|
||
|
checkNext(t, blockProvider, 1010, true)
|
||
|
checkNext(t, blockProvider, 1005, true)
|
||
|
checkNext(t, blockProvider, 1000, false)
|
||
|
}
|