Merge branch '8784-dir-listings'
[arvados.git] / sdk / ruby / test / test_keep_manifest.rb
index 620bec53714cb1639929574b3b3bfe7ea08b968c..71a24a28c08dea61a186161d6168e908f7cd4404 100644 (file)
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
 require "arvados/keep"
 require "minitest/autorun"
 require "sdk_fixtures"
@@ -266,6 +270,8 @@ class ManifestTest < Minitest::Test
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0', '+0','0',nil],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Fizz+Buzz','+0','0','+Fizz+Buzz'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+Buzz', nil,nil,'+Fizz+Buzz'],
+   [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo', '+0','0','+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo'],
+   [true, 'd41d8cd98f00b204e9800998ecf8427e+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo', nil,nil,'+Ad41d8cd98f00b204e9800998ecf8427e00000000+Foo'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+0+Z', '+0','0','+Z'],
    [true, 'd41d8cd98f00b204e9800998ecf8427e+Z', nil,nil,'+Z'],
   ].each do |ok, locator, match2, match3, match4|
@@ -278,9 +284,24 @@ class ManifestTest < Minitest::Test
         assert_equal match4, match[4]
       end
     end
+    define_method "test_parse_method_on_#{locator.inspect}" do
+      loc = Keep::Locator.parse locator
+      if !ok
+        assert_nil loc
+      else
+        refute_nil loc
+        assert loc.is_a?(Keep::Locator)
+        #assert loc.hash
+        #assert loc.size
+        #assert loc.hints.is_a?(Array)
+      end
+    end
   end
 
   [
+    [false, nil, "No manifest found"],
+    [true, ""],
+    [false, " ", "Invalid manifest: does not end with newline"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"],
     [true, ". d41d8cd98f00b204e9800998ecf8427e a41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"], # 2 locators
@@ -298,6 +319,7 @@ class ManifestTest < Minitest::Test
     [true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:\\040\n"],
     [true, ". 00000000000000000000000000000000+0 0:0:0\n"],
     [true, ". 00000000000000000000000000000000+0 0:0:d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000@ffffffff\n"],
+    [true, ". d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000@ffffffff 0:0:empty.txt\n"],
     [false, '. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt',
       "Invalid manifest: does not end with newline"],
     [false, "abc d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
@@ -354,22 +376,32 @@ class ManifestTest < Minitest::Test
       "Manifest invalid for stream 1: no file tokens"],
     [false, ". 0:0:foo.txt d41d8cd98f00b204e9800998ecf8427e+0\n",
       "Manifest invalid for stream 1: missing or invalid locator \"0:0:foo.txt\""],
-    [false, ". 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid locator \"0:0:foo.txt\""],
+    [false, ". 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid locator \"0:0:foo.txt\""],
     [false, ".\n", "Manifest invalid for stream 1: missing or invalid locator"],
     [false, ".", "Invalid manifest: does not end with newline"],
     [false, ". \n", "Manifest invalid for stream 1: missing or invalid locator"],
     [false, ".  \n", "Manifest invalid for stream 1: missing or invalid locator"],
-    [false, " . d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid stream name"],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt \n", "stream 1: trailing space"],
+    [false, " . d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid stream name"],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt \n",
+      "stream 1: trailing space"],
    # TAB and other tricky whitespace characters:
-    [false, "\v. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid stream name \"\\v."],
-    [false, "./foo\vbar d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid stream name \"./foo\\vbar"],
-    [false, "\t. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid stream name \"\\t"],
-    [false, ".\td41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "Manifest invalid for stream 1: missing or invalid stream name \".\\t"],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\t\n", "stream 1: invalid file token \"0:0:foo.txt\\t\""],
-    [false, ". d41d8cd98f00b204e9800998ecf8427e+0\t 0:0:foo.txt\n", "stream 1: missing or invalid locator \"d41d8cd98f00b204e9800998ecf8427e+0\\t\""],
-    [false, "./foo\tbar d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n", "stream 1: missing or invalid stream name \"./foo\\tbar\""],
-   # other whitespace errors:
+    [false, "\v. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"\\v."],
+    [false, "./foo\vbar d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"./foo\\vbar"],
+    [false, "\t. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \"\\t"],
+    [false, ".\td41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "Manifest invalid for stream 1: missing or invalid stream name \".\\t"],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\t\n",
+      "stream 1: invalid file token \"0:0:foo.txt\\t\""],
+    [false, ". d41d8cd98f00b204e9800998ecf8427e+0\t 0:0:foo.txt\n",
+      "stream 1: missing or invalid locator \"d41d8cd98f00b204e9800998ecf8427e+0\\t\""],
+    [false, "./foo\tbar d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
+      "stream 1: missing or invalid stream name \"./foo\\tbar\""],
+    # other whitespace errors:
     [false, ". d41d8cd98f00b204e9800998ecf8427e+0  0:0:foo.txt\n",
       "Manifest invalid for stream 1: invalid file token \"\""],
     [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n \n",
@@ -382,7 +414,7 @@ class ManifestTest < Minitest::Test
       "Manifest invalid for stream 1: missing stream name"],
     [false, " \n. d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",
       "Manifest invalid for stream 1: missing stream name"],
-   # empty file and stream name components:
+    # empty file and stream name components:
     [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:/foo.txt\n",
       "Manifest invalid for stream 1: invalid file token \"0:0:/foo.txt\""],
     [false, "./ d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo.txt\n",