7253: consume all blocks from BlockIterWithDuplicates, not just the first in test.
authorradhika <radhika@curoverse.com>
Thu, 26 Nov 2015 03:50:19 +0000 (22:50 -0500)
committerradhika <radhika@curoverse.com>
Thu, 26 Nov 2015 03:50:19 +0000 (22:50 -0500)
sdk/go/manifest/manifest.go
sdk/go/manifest/manifest_test.go

index 9ce3d820bbba9364483eb6ca8e65ba89e945a455..49faa01b4d56b2eb32ab0c60d7e68a0c4966df87 100644 (file)
@@ -199,11 +199,10 @@ func parseManifestStream(s string) (m ManifestStream) {
                return
        }
 
-       fileTokens := m.FileTokens
-       for j := range m.FileTokens {
-               _, _, _, err := parseFileToken(fileTokens[j])
+       for _, ft := range m.FileTokens {
+               _, _, _, err := parseFileToken(ft)
                if err != nil {
-                       m.Err = fmt.Errorf("Invalid file token: %s", fileTokens[j])
+                       m.Err = fmt.Errorf("Invalid file token: %s", ft)
                        break
                }
        }
@@ -258,12 +257,12 @@ type ManifestBlockLocator struct {
 func (m *Manifest) BlockIterWithDuplicates() <-chan ManifestBlockLocator {
        blockChannel := make(chan ManifestBlockLocator)
        go func(streamChannel <-chan ManifestStream) {
-               for m := range streamChannel {
-                       if m.Err != nil {
-                               blockChannel <- ManifestBlockLocator{Locator: blockdigest.BlockLocator{}, Err: m.Err}
+               for ms := range streamChannel {
+                       if ms.Err != nil {
+                               blockChannel <- ManifestBlockLocator{Locator: blockdigest.BlockLocator{}, Err: ms.Err}
                                continue
                        }
-                       for _, block := range m.Blocks {
+                       for _, block := range ms.Blocks {
                                b, err := blockdigest.ParseBlockLocator(block)
                                if err == nil {
                                        blockChannel <- ManifestBlockLocator{b, nil}
index d8227ed687060ecd237131ee999d9237991a11ea..65ea7f1e471c6276c9b0b74b97079d78781a1843 100644 (file)
@@ -199,37 +199,36 @@ 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.*"},
+               {". acbd18db4cc2f85cedef654fccc4a4+3 0:1:file1.txt", "Invalid file token: acbd18db4cc2f85cedef654fccc4a4.*"},
                {". acbd18db4cc2f85cedef654fccc4a4d8 0:1:file1.txt", "Invalid file token: acbd18db4cc2f85cedef654fccc4a4d8"},
                {". 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", "Invalid file token: bcde18db4cc2f85cedef654fccc4a4d8.*"},
        }
+
        for _, testCase := range testCases {
                manifest := Manifest{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 {
+               var err error
+               for block := range blockChannel {
                        if block.Err != nil {
-                               t.Errorf("Got error: %v", block.Err)
+                               err = block.Err
                        }
                }
+
+               // completed reading from blockChannel; now check for errors
+               if err == nil {
+                       t.Errorf("Expected error")
+               }
+
+               matched, _ := regexp.MatchString(testCase[1], err.Error())
+               if !matched {
+                       t.Errorf("Expected error not found. Expected: %v; Found: %v", testCase[1], err.Error())
+               }
        }
 }