7253: update manigest.parseManifestStream to raise error when the given manifest...
authorradhika <radhika@curoverse.com>
Thu, 26 Nov 2015 15:33:31 +0000 (10:33 -0500)
committerradhika <radhika@curoverse.com>
Thu, 26 Nov 2015 15:33:31 +0000 (10:33 -0500)
sdk/go/manifest/manifest.go
sdk/go/manifest/manifest_test.go
services/datamanager/collection/collection_test.go

index 6deb88f3c146daa9c82dd57caeb7cb46f0a6012d..d4b9830065e4345b1e717f2141e14bdf9d526e5d 100644 (file)
@@ -184,10 +184,16 @@ func (s *ManifestStream) sendFileSegmentIterByName(filepath string, ch chan<- *F
 
 func parseManifestStream(s string) (m ManifestStream) {
        tokens := strings.Split(s, " ")
+
        m.StreamName = UnescapeName(tokens[0])
+       if m.StreamName != "." && !strings.HasPrefix(m.StreamName, "./") {
+               m.Err = fmt.Errorf("Invalid stream name: %s", m.StreamName)
+               return
+       }
+
        tokens = tokens[1:]
        var i int
-       for i = range tokens {
+       for i = 0; i < len(tokens); i++ {
                if !blockdigest.IsBlockLocator(tokens[i]) {
                        break
                }
@@ -195,8 +201,13 @@ func parseManifestStream(s string) (m ManifestStream) {
        m.Blocks = tokens[:i]
        m.FileTokens = tokens[i:]
 
-       if m.StreamName != "." && !strings.HasPrefix(m.StreamName, "./") {
-               m.Err = fmt.Errorf("Invalid stream name: %s", m.StreamName)
+       if len(m.Blocks) == 0 {
+               m.Err = fmt.Errorf("No block locators found")
+               return
+       }
+
+       if len(m.FileTokens) == 0 {
+               m.Err = fmt.Errorf("No file tokens found")
                return
        }
 
index 53d4a15af60a7dd0bb03ece18f16ecb7e1a3a9bf..971cd3b043f03a15908e619f61c3fe5eb6d0ff40 100644 (file)
@@ -202,12 +202,16 @@ func TestBlockIterWithBadManifest(t *testing.T) {
                {"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"},
-               {". acbd18db4cc2f85cedef654fccc4a4+3 0:1:file1.txt", "Invalid file token: acbd18db4cc2f85cedef654fccc4a4.*"},
-               {". 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"},
                {". 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.*"},
+               {". 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 {
@@ -220,12 +224,12 @@ func TestBlockIterWithBadManifest(t *testing.T) {
 
                // completed reading from blockChannel; now check for errors
                if manifest.Err == nil {
-                       t.Errorf("Expected error")
+                       t.Fatalf("Expected error")
                }
 
                matched, _ := regexp.MatchString(testCase[1], manifest.Err.Error())
                if !matched {
-                       t.Errorf("Expected error not found. Expected: %v; Found: %v", testCase[1], manifest.Err.Error())
+                       t.Fatalf("Expected error not found. Expected: %v; Found: %v", testCase[1], manifest.Err.Error())
                }
        }
 }
index 71a4785be4f8035586a16e3dad9456a76f945c46..22cf54f639e9d71067eaec07c4a870bafa4d03b3 100644 (file)
@@ -196,7 +196,6 @@ func testGetCollectionsAndSummarize(c *C, testData APITestData) {
 
        if testData.expectedError == "" {
                c.Assert(results.Err, IsNil)
-               c.Assert(results, NotNil)
        } else {
                c.Assert(results.Err, ErrorMatches, testData.expectedError)
        }