[ARVADOS] created: c743a5376ef8662c92feb7dd6a4f9bc07818ecaf
Git user
git at public.curoverse.com
Wed Jun 1 10:35:26 EDT 2016
at c743a5376ef8662c92feb7dd6a4f9bc07818ecaf (commit)
commit c743a5376ef8662c92feb7dd6a4f9bc07818ecaf
Author: Tom Clegg <tom at curoverse.com>
Date: Wed Jun 1 10:35:21 2016 -0400
9216: Require size hints in manifest validation.
diff --git a/sdk/ruby/lib/arvados/keep.rb b/sdk/ruby/lib/arvados/keep.rb
index 489eeee..4797238 100644
--- a/sdk/ruby/lib/arvados/keep.rb
+++ b/sdk/ruby/lib/arvados/keep.rb
@@ -2,23 +2,11 @@ module Keep
class Locator
# A Locator is used to parse and manipulate Keep locator strings.
#
- # Locators obey the following syntax:
- #
- # locator ::= address hint*
- # address ::= digest size-hint
- # digest ::= <32 hexadecimal digits>
- # size-hint ::= "+" [0-9]+
- # hint ::= "+" hint-type hint-content
- # hint-type ::= [A-Z]
- # hint-content ::= [A-Za-z0-9 at _-]+
- #
- # Individual hints may have their own required format:
- #
- # sign-hint ::= "+A" <40 lowercase hex digits> "@" sign-timestamp
- # sign-timestamp ::= <8 lowercase hex digits>
+ # Locator format is documented at
+ # https://dev.arvados.org/projects/arvados/wiki/Keep_locator_format
attr_reader :hash, :hints, :size
- LOCATOR_REGEXP = /^([[:xdigit:]]{32})(\+([[:digit:]]+))?((\+([[:upper:]][[:alnum:]@_-]*))+)?\z/
+ LOCATOR_REGEXP = /^([0-9a-f]{32})(\+([0-9]+))((\+([A-Z][-A-Za-z0-9 at _]*))+)?\z/
def initialize(hasharg, sizearg, hintarg)
@hash = hasharg
diff --git a/sdk/ruby/test/test_keep_manifest.rb b/sdk/ruby/test/test_keep_manifest.rb
index fa1dc3f..6a696a4 100644
--- a/sdk/ruby/test/test_keep_manifest.rb
+++ b/sdk/ruby/test/test_keep_manifest.rb
@@ -249,6 +249,7 @@ class ManifestTest < Minitest::Test
[[false, nil],
[false, '+0'],
[false, 'd41d8cd98f00b204e9800998ecf8427'],
+ [false, 'd41d8cd98f00b204e9800998ecf8427e'],
[false, 'd41d8cd98f00b204e9800998ecf8427+0'],
[false, 'd41d8cd98f00b204e9800998ecf8427e0'],
[false, 'd41d8cd98f00b204e9800998ecf8427e0+0'],
@@ -262,14 +263,12 @@ class ManifestTest < Minitest::Test
[false, 'd41d8cd98f00b204e9800998ecf8427e+0++K'],
[false, 'd41d8cd98f00b204e9800998ecf8427e+0+K++'],
[false, 'd41d8cd98f00b204e9800998ecf8427e+0+K++Z'],
- [true, 'd41d8cd98f00b204e9800998ecf8427e', nil,nil,nil],
+ [false, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+Buzz'],
+ [false, 'd41d8cd98f00b204e9800998ecf8427e+Fizz+0+Buzz'],
[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|
define_method "test_LOCATOR_REGEXP_on_#{locator.inspect}" do
match = Keep::Locator::LOCATOR_REGEXP.match locator
@@ -300,7 +299,7 @@ class ManifestTest < Minitest::Test
[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
+ [true, ". d41d8cd98f00b204e9800998ecf8427e+0 a41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n"], # 2 locators
[true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo/bar.txt\n"],
[true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.foo.txt\n"],
[true, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.foo\n"],
@@ -316,43 +315,45 @@ class ManifestTest < Minitest::Test
[true, ". 00000000000000000000000000000000+0 0:0:0\n"],
[true, ". 00000000000000000000000000000000+0 0:0:d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000 at ffffffff\n"],
[true, ". d41d8cd98f00b204e9800998ecf8427e+0+Ad41d8cd98f00b204e9800998ecf8427e00000000 at 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",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ "missing or invalid locator"],
+ [false, '. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt',
+ "does not end with newline"],
+ [false, "abc d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"abc\""],
- [false, "abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"abc/./foo\""],
- [false, "./abc/../foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "./abc/../foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"./abc/../foo\""],
- [false, "./abc/. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "./abc/. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"./abc/.\""],
- [false, "./abc/.. d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "./abc/.. d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"./abc/..\""],
- [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"./abc/./foo\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:.\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:.\n",
"invalid file token \"0:0:.\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:..\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:..\n",
"invalid file token \"0:0:..\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:./abc.txt\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:./abc.txt\n",
"invalid file token \"0:0:./abc.txt\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:../abc.txt\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:../abc.txt\n",
"invalid file token \"0:0:../abc.txt\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt/.\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt/.\n",
"invalid file token \"0:0:abc.txt/.\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt/..\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt/..\n",
"invalid file token \"0:0:abc.txt/..\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:a/./bc.txt\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:a/./bc.txt\n",
"invalid file token \"0:0:a/./bc.txt\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e 0:0:a/../bc.txt\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:a/../bc.txt\n",
"invalid file token \"0:0:a/../bc.txt\""],
- [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e 0:0:abc.txt\n",
+ [false, "./abc/./foo d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"./abc/./foo\""],
[false, "d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n",
"invalid stream name \"d41d8cd98f00b204e9800998ecf8427e+0\""],
[false, ". d41d8cd98f00b204e9800998ecf8427 0:0:abc.txt\n",
"invalid locator \"d41d8cd98f00b204e9800998ecf8427\""],
- [false, ". d41d8cd98f00b204e9800998ecf8427e\n",
+ [false, ". d41d8cd98f00b204e9800998ecf8427e+0\n",
"Manifest invalid for stream 1: no file tokens"],
[false, ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:abc.txt\n/dir1 d41d8cd98f00b204e9800998ecf842 0:0:abc.txt\n",
"Manifest invalid for stream 2: missing or invalid stream name \"/dir1\""],
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list