X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/93d818fb7374b961d7f802c7d89a36162c78f6e7..0a46b75ac1e96a6f5ce3ae797eb4306b352fab36:/sdk/go/manifest/manifest_test.go diff --git a/sdk/go/manifest/manifest_test.go b/sdk/go/manifest/manifest_test.go index d8227ed687..f52d5644a2 100644 --- a/sdk/go/manifest/manifest_test.go +++ b/sdk/go/manifest/manifest_test.go @@ -61,10 +61,21 @@ func expectStringSlicesEqual(t *testing.T, actual []string, expected []string) { } } +func expectFileStreamSegmentsEqual(t *testing.T, actual []FileStreamSegment, expected []FileStreamSegment) { + if len(actual) != len(expected) { + t.Fatalf("Expected %v (length %d), but received %v (length %d) instead. %s", expected, len(expected), actual, len(actual), getStackTrace()) + } + for i := range actual { + if actual[i] != expected[i] { + t.Fatalf("Expected %v but received %v instead (first disagreement at position %d). %s", expected, actual, i, getStackTrace()) + } + } +} + func expectManifestStream(t *testing.T, actual ManifestStream, expected ManifestStream) { expectEqual(t, actual.StreamName, expected.StreamName) expectStringSlicesEqual(t, actual.Blocks, expected.Blocks) - expectStringSlicesEqual(t, actual.FileTokens, expected.FileTokens) + expectFileStreamSegmentsEqual(t, actual.FileStreamSegments, expected.FileStreamSegments) } func expectBlockLocator(t *testing.T, actual blockdigest.BlockLocator, expected blockdigest.BlockLocator) { @@ -76,8 +87,8 @@ func expectBlockLocator(t *testing.T, actual blockdigest.BlockLocator, expected 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"}, - FileTokens: []string{"0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt"}}) + Blocks: []string{"365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"}, + FileStreamSegments: []FileStreamSegment{{0, 2310, "qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt"}}}) } func TestParseBlockLocatorSimple(t *testing.T) { @@ -85,10 +96,15 @@ func TestParseBlockLocatorSimple(t *testing.T) { if err != nil { t.Fatalf("Unexpected error parsing block locator: %v", err) } + d, err := blockdigest.FromString("365f83f5f808896ec834c8b595288735") + if err != nil { + t.Fatalf("Unexpected error during FromString for block locator: %v", err) + } expectBlockLocator(t, blockdigest.BlockLocator{b.Digest, b.Size, b.Hints}, - blockdigest.BlockLocator{Digest: blockdigest.AssertFromString("365f83f5f808896ec834c8b595288735"), - Size: 2310, - Hints: []string{"K@qr1hi", "Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"}}) + blockdigest.BlockLocator{Digest: d, + Size: 2310, + Hints: []string{"K@qr1hi", + "Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"}}) } func TestStreamIterShortManifestWithBlankStreams(t *testing.T) { @@ -96,15 +112,15 @@ func TestStreamIterShortManifestWithBlankStreams(t *testing.T) { if err != nil { t.Fatalf("Unexpected error reading manifest from file: %v", err) } - manifest := Manifest{string(content)} + manifest := Manifest{Text: string(content)} streamIter := manifest.StreamIter() firstStream := <-streamIter expectManifestStream(t, firstStream, ManifestStream{StreamName: ".", - Blocks: []string{"b746e3d2104645f2f64cd3cc69dd895d+15693477+E2866e643690156651c03d876e638e674dcd79475@5441920c"}, - FileTokens: []string{"0:15893477:chr10_band0_s0_e3000000.fj"}}) + Blocks: []string{"b746e3d2104645f2f64cd3cc69dd895d+15693477+E2866e643690156651c03d876e638e674dcd79475@5441920c"}, + FileStreamSegments: []FileStreamSegment{{0, 15893477, "chr10_band0_s0_e3000000.fj"}}}) received, ok := <-streamIter if ok { @@ -118,26 +134,33 @@ func TestBlockIterLongManifest(t *testing.T) { if err != nil { t.Fatalf("Unexpected error reading manifest from file: %v", err) } - manifest := Manifest{string(content)} + manifest := Manifest{Text: string(content)} blockChannel := manifest.BlockIterWithDuplicates() firstBlock := <-blockChannel - + d, err := blockdigest.FromString("b746e3d2104645f2f64cd3cc69dd895d") + if err != nil { + t.Fatalf("Unexpected error during FromString for block: %v", err) + } expectBlockLocator(t, - firstBlock.Locator, - blockdigest.BlockLocator{Digest: blockdigest.AssertFromString("b746e3d2104645f2f64cd3cc69dd895d"), + firstBlock, + blockdigest.BlockLocator{Digest: d, Size: 15693477, Hints: []string{"E2866e643690156651c03d876e638e674dcd79475@5441920c"}}) blocksRead := 1 - var lastBlock ManifestBlockLocator + var lastBlock blockdigest.BlockLocator for lastBlock = range blockChannel { blocksRead++ } expectEqual(t, blocksRead, 853) + d, err = blockdigest.FromString("f9ce82f59e5908d2d70e18df9679b469") + if err != nil { + t.Fatalf("Unexpected error during FromString for block: %v", err) + } expectBlockLocator(t, - lastBlock.Locator, - blockdigest.BlockLocator{Digest: blockdigest.AssertFromString("f9ce82f59e5908d2d70e18df9679b469"), + lastBlock, + blockdigest.BlockLocator{Digest: d, Size: 31367794, Hints: []string{"E53f903684239bcc114f7bf8ff9bd6089f33058db@5441920c"}}) } @@ -199,37 +222,37 @@ func TestFileSegmentIterByName(t *testing.T) { func TestBlockIterWithBadManifest(t *testing.T) { testCases := [][]string{ - {"notavalidstreamname acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt", "Invalid stream name: notavalidstreamname"}, - {". acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt", ""}, + {"badstream acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt", "Invalid stream name: badstream"}, + {"/badstream acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt", "Invalid stream name: /badstream"}, {". acbd18db4cc2f85cedef654fccc4a4d8+3 file1.txt", "Invalid file token: file1.txt"}, - {". acbd18db4cc2f85cedef654fccc4a4d+3 0:1:file1.txt", "Invalid file token: acbd18db4cc2f85cedef654fccc4a4d.*"}, - {". acbd18db4cc2f85cedef654fccc4a4d8 0:1:file1.txt", "Invalid file token: acbd18db4cc2f85cedef654fccc4a4d8"}, + {". acbd18db4cc2f85cedef654fccc4a4+3 0:1:file1.txt", "No block locators found"}, + {". acbd18db4cc2f85cedef654fccc4a4d8 0:1:file1.txt", "No block locators found"}, {". acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt file2.txt 1:2:file3.txt", "Invalid file token: file2.txt"}, - {"/badstream acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt file2.txt 1:2:file3.txt", "Invalid stream name: /badstream"}, - {"./goodstream acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt 1:2:file2.txt", ""}, + {". acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt. bcde18db4cc2f85cedef654fccc4a4d8+3 1:2:file3.txt", "Invalid file token: bcde18db4cc2f85cedef654fccc4a4d8.*"}, + {". acbd18db4cc2f85cedef654fccc4a4d8+3 0:1:file1.txt\n. acbd18db4cc2f85cedef654fccc4a4d8+3 ::file2.txt\n", "Invalid file token: ::file2.txt"}, + {". acbd18db4cc2f85cedef654fccc4a4d8+3 bcde18db4cc2f85cedef654fccc4a4d8+3\n", "No file tokens found"}, + {". acbd18db4cc2f85cedef654fccc4a4d8+3 ", "Invalid file token"}, + {". acbd18db4cc2f85cedef654fccc4a4d8+3", "No file tokens found"}, + {". 0:1:file1.txt\n", "No block locators found"}, + {".\n", "No block locators found"}, } + for _, testCase := range testCases { - manifest := Manifest{string(testCase[0])} + manifest := Manifest{Text: string(testCase[0])} blockChannel := manifest.BlockIterWithDuplicates() - block := <-blockChannel - - if testCase[1] != "" { // expecting error - if block.Err == nil { - t.Errorf("Expected error") - } - - matched, err := regexp.MatchString(testCase[1], block.Err.Error()) - if err != nil { - t.Errorf("Got error verifying returned block locator error: %v", err) - } - if !matched { - t.Errorf("Expected error not found. Expected: %v; Found = %v", testCase[1], block.Err.Error()) - } - } else { - if block.Err != nil { - t.Errorf("Got error: %v", block.Err) - } + for block := range blockChannel { + _ = block + } + + // completed reading from blockChannel; now check for errors + if manifest.Err == nil { + t.Fatalf("Expected error") + } + + matched, _ := regexp.MatchString(testCase[1], manifest.Err.Error()) + if !matched { + t.Fatalf("Expected error not found. Expected: %v; Found: %v", testCase[1], manifest.Err.Error()) } } }