package manifest
import (
+ "git.curoverse.com/arvados.git/sdk/go/blockdigest"
+ "io/ioutil"
"runtime"
"testing"
)
}
}
-func expectManifestLine(t *testing.T, actual ManifestLine, expected ManifestLine) {
+func expectManifestStream(t *testing.T, actual ManifestStream, expected ManifestStream) {
expectEqual(t, actual.StreamName, expected.StreamName)
expectStringSlicesEqual(t, actual.Blocks, expected.Blocks)
expectStringSlicesEqual(t, actual.Files, expected.Files)
expectLocatorPatternFail(t, "12345678901234567890123456789012+12345+A+B2")
}
-func TestParseManifestLineSimple(t *testing.T) {
- m := parseManifestLine(". 365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf 0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt")
- expectManifestLine(t, m, ManifestLine{StreamName: ".",
+func TestParseManifestStreamSimple(t *testing.T) {
+ m := parseManifestStream(". 365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf 0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt")
+ expectManifestStream(t, m, ManifestStream{StreamName: ".",
Blocks: []string{"365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"},
Files: []string{"0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt"}})
}
func TestParseBlockLocatorSimple(t *testing.T) {
- b, err := parseBlockLocator("365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf")
+ b, err := ParseBlockLocator("365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf")
if err != nil {
t.Fatalf("Unexpected error parsing block locator: %v", err)
}
- expectBlockLocator(t, b, BlockLocator{Digest: "365f83f5f808896ec834c8b595288735",
+ expectBlockLocator(t, b, BlockLocator{Digest: blockdigest.AssertFromString("365f83f5f808896ec834c8b595288735"),
Size: 2310,
Hints: []string{"K@qr1hi",
"Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"}})
}
+
+func TestStreamIterShortManifestWithBlankStreams(t *testing.T) {
+ content, err := ioutil.ReadFile("testdata/short_manifest")
+ if err != nil {
+ t.Fatalf("Unexpected error reading manifest from file: %v", err)
+ }
+ manifest := Manifest{string(content)}
+ streamIter := manifest.StreamIter()
+
+ firstStream := <-streamIter
+ expectManifestStream(t,
+ firstStream,
+ ManifestStream{StreamName: ".",
+ Blocks: []string{"b746e3d2104645f2f64cd3cc69dd895d+15693477+E2866e643690156651c03d876e638e674dcd79475@5441920c"},
+ Files: []string{"0:15893477:chr10_band0_s0_e3000000.fj"}})
+
+ received, ok := <- streamIter
+ if ok {
+ t.Fatalf("Expected streamIter to be closed, but received %v instead.",
+ received)
+ }
+}
+
+func TestBlockIterLongManifest(t *testing.T) {
+ content, err := ioutil.ReadFile("testdata/long_manifest")
+ if err != nil {
+ t.Fatalf("Unexpected error reading manifest from file: %v", err)
+ }
+ manifest := Manifest{string(content)}
+ blockChannel := manifest.BlockIterWithDuplicates()
+
+ firstBlock := <-blockChannel
+ expectBlockLocator(t,
+ firstBlock,
+ BlockLocator{Digest: blockdigest.AssertFromString("b746e3d2104645f2f64cd3cc69dd895d"),
+ Size: 15693477,
+ Hints: []string{"E2866e643690156651c03d876e638e674dcd79475@5441920c"}})
+ blocksRead := 1
+ var lastBlock BlockLocator
+ for lastBlock = range blockChannel {
+ //log.Printf("Blocks Read: %d", blocksRead)
+ blocksRead++
+ }
+ expectEqual(t, blocksRead, 853)
+
+ expectBlockLocator(t,
+ lastBlock,
+ BlockLocator{Digest: blockdigest.AssertFromString("f9ce82f59e5908d2d70e18df9679b469"),
+ Size: 31367794,
+ Hints: []string{"E53f903684239bcc114f7bf8ff9bd6089f33058db@5441920c"}})
+}