5182: Improve error reporting in uploader.
[arvados.git] / sdk / go / manifest / manifest_test.go
index 6cd16bccc61dbe866948de8e1bc5ceda470ec9cd..c1bfb14e1460757ed3991dc095e09c5fef46372e 100644 (file)
@@ -1,6 +1,8 @@
 package manifest
 
 import (
+       "git.curoverse.com/arvados.git/sdk/go/blockdigest"
+       "io/ioutil"
        "runtime"
        "testing"
 )
@@ -55,7 +57,7 @@ func expectStringSlicesEqual(t *testing.T, actual []string, expected []string) {
        }
 }
 
-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)
@@ -106,20 +108,71 @@ func TestLocatorPatternBasic(t *testing.T) {
        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"}})
+}