4 "git.curoverse.com/arvados.git/sdk/go/blockdigest"
10 func getStackTrace() string {
11 buf := make([]byte, 1000)
12 bytes_written := runtime.Stack(buf, false)
13 return "Stack Trace:\n" + string(buf[:bytes_written])
16 func expectFromChannel(t *testing.T, c <-chan string, expected string) {
19 t.Fatalf("Expected to receive %s but channel was closed. %s",
23 if actual != expected {
24 t.Fatalf("Expected %s but got %s instead. %s",
31 func expectChannelClosed(t *testing.T, c <-chan interface{}) {
34 t.Fatalf("Expected channel to be closed, but received %v instead. %s",
40 func expectEqual(t *testing.T, actual interface{}, expected interface{}) {
41 if actual != expected {
42 t.Fatalf("Expected %v but received %v instead. %s",
49 func expectStringSlicesEqual(t *testing.T, actual []string, expected []string) {
50 if len(actual) != len(expected) {
51 t.Fatalf("Expected %v (length %d), but received %v (length %d) instead. %s", expected, len(expected), actual, len(actual), getStackTrace())
53 for i := range actual {
54 if actual[i] != expected[i] {
55 t.Fatalf("Expected %v but received %v instead (first disagreement at position %d). %s", expected, actual, i, getStackTrace())
60 func expectManifestStream(t *testing.T, actual ManifestStream, expected ManifestStream) {
61 expectEqual(t, actual.StreamName, expected.StreamName)
62 expectStringSlicesEqual(t, actual.Blocks, expected.Blocks)
63 expectStringSlicesEqual(t, actual.Files, expected.Files)
66 func expectBlockLocator(t *testing.T, actual blockdigest.BlockLocator, expected blockdigest.BlockLocator) {
67 expectEqual(t, actual.Digest, expected.Digest)
68 expectEqual(t, actual.Size, expected.Size)
69 expectStringSlicesEqual(t, actual.Hints, expected.Hints)
72 func TestParseManifestStreamSimple(t *testing.T) {
73 m := parseManifestStream(". 365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf 0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt")
74 expectManifestStream(t, m, ManifestStream{StreamName: ".",
75 Blocks: []string{"365f83f5f808896ec834c8b595288735+2310+K@qr1hi+Af0c9a66381f3b028677411926f0be1c6282fe67c@542b5ddf"},
76 Files: []string{"0:2310:qr1hi-8i9sb-ienvmpve1a0vpoi.log.txt"}})
79 func TestStreamIterShortManifestWithBlankStreams(t *testing.T) {
80 content, err := ioutil.ReadFile("testdata/short_manifest")
82 t.Fatalf("Unexpected error reading manifest from file: %v", err)
84 manifest := Manifest{string(content)}
85 streamIter := manifest.StreamIter()
87 firstStream := <-streamIter
88 expectManifestStream(t,
90 ManifestStream{StreamName: ".",
91 Blocks: []string{"b746e3d2104645f2f64cd3cc69dd895d+15693477+E2866e643690156651c03d876e638e674dcd79475@5441920c"},
92 Files: []string{"0:15893477:chr10_band0_s0_e3000000.fj"}})
94 received, ok := <-streamIter
96 t.Fatalf("Expected streamIter to be closed, but received %v instead.",
101 func TestBlockIterLongManifest(t *testing.T) {
102 content, err := ioutil.ReadFile("testdata/long_manifest")
104 t.Fatalf("Unexpected error reading manifest from file: %v", err)
106 manifest := Manifest{string(content)}
107 blockChannel := manifest.BlockIterWithDuplicates()
109 firstBlock := <-blockChannel
110 expectBlockLocator(t,
112 blockdigest.BlockLocator{Digest: blockdigest.AssertFromString("b746e3d2104645f2f64cd3cc69dd895d"),
114 Hints: []string{"E2866e643690156651c03d876e638e674dcd79475@5441920c"}})
116 var lastBlock blockdigest.BlockLocator
117 for lastBlock = range blockChannel {
118 //log.Printf("Blocks Read: %d", blocksRead)
121 expectEqual(t, blocksRead, 853)
123 expectBlockLocator(t,
125 blockdigest.BlockLocator{Digest: blockdigest.AssertFromString("f9ce82f59e5908d2d70e18df9679b469"),
127 Hints: []string{"E53f903684239bcc114f7bf8ff9bd6089f33058db@5441920c"}})