[ARVADOS] updated: d78a90009ca25da4f8cfa75672df0b5bd77cabfe

git at public.curoverse.com git at public.curoverse.com
Tue Aug 25 15:09:13 EDT 2015


Summary of changes:
 services/api/lib/salvage_collection.rb            |  3 +-
 services/api/test/unit/salvage_collection_test.rb | 62 +++++++++++++++++++----
 2 files changed, 52 insertions(+), 13 deletions(-)

       via  d78a90009ca25da4f8cfa75672df0b5bd77cabfe (commit)
      from  54819dd75fb929acfab581890dd1c8ee17cccf3e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit d78a90009ca25da4f8cfa75672df0b5bd77cabfe
Author: radhika <radhika at curoverse.com>
Date:   Tue Aug 25 15:01:40 2015 -0400

    6859: add test that creates and salvages a collection with invalid manifest text.

diff --git a/services/api/lib/salvage_collection.rb b/services/api/lib/salvage_collection.rb
index 3c9b6df..2ffe0f4 100755
--- a/services/api/lib/salvage_collection.rb
+++ b/services/api/lib/salvage_collection.rb
@@ -19,7 +19,7 @@ module SalvageCollection
     if $?.success?
       new_manifest
     else
-      raise "Error during arv-put."
+      raise "Error during arv-put: #{$?} (cmd was #{cmd.inspect})"
     end
   end
 
@@ -84,7 +84,6 @@ module SalvageCollection
       new_collection = Collection.new
       new_collection.name = "salvaged from #{src_collection.uuid}, #{src_collection.portable_data_hash}"
       new_collection.manifest_text = new_manifest
-      new_collection.portable_data_hash = Digest::MD5.hexdigest(new_collection.manifest_text)
 
       created = new_collection.save!
       raise "New collection creation failed." if !created
diff --git a/services/api/test/unit/salvage_collection_test.rb b/services/api/test/unit/salvage_collection_test.rb
index 4782d01..9a52bb6 100644
--- a/services/api/test/unit/salvage_collection_test.rb
+++ b/services/api/test/unit/salvage_collection_test.rb
@@ -1,8 +1,18 @@
 require 'test_helper'
 require 'salvage_collection'
 
+# Valid manifest_text
 TEST_MANIFEST = ". 341dabea2bd78ad0d6fc3f5b926b450e+85626+Ad391622a17f61e4a254eda85d1ca751c4f368da9 at 55e076ce 0:85626:brca2-hg19.fa\n. d7321a918923627c972d8f8080c07d29+82570+A22e0a1d9b9bc85c848379d98bedc64238b0b1532 at 55e076ce 0:82570:brca1-hg19.fa\n"
 
+# This invalid manifest_text has the following flaws:
+#   Missing stream name with locator in it's place
+#   Two invalid locators:
+#     341dabea2bd78ad0d6fc3f5b926b450e+abc
+#     341dabea2bd78ad0d6fc3f5b926b450e
+# Expectation: These locators are preserved in salvaged_data
+BAD_MANIFEST = "341dabea2bd78ad0d6fc3f5b926b450e+abc 341dabea2bd78ad0d6fc3f5b926abcdf 0:85626:brca2-hg19.fa\n. abcdabea2bd78ad0d6fc3f5b926b450e+1000 0:1000:brca-hg19.fa\n . d7321a918923627c972d8f8080c07d29+2000+A22e0a1d9b9bc85c848379d98bedc64238b0b1532 at 55e076ce 0:2000:brca1-hg19.fa\n"
+
+# Mock arv_put
 module SalvageCollection
   def self.salvage_collection_arv_put(cmd)
     file_contents = File.new(cmd.split[-1], "r").gets
@@ -12,13 +22,13 @@ module SalvageCollection
       raise("Error during arv-put")
     else
       ". " +
-      Digest::MD5.hexdigest(TEST_MANIFEST) +
+      Digest::MD5.hexdigest(TEST_MANIFEST) + "+" + TEST_MANIFEST.length.to_s +
       " 0:" + TEST_MANIFEST.length.to_s + ":invalid_manifest_text.txt\n"
     end
   end
 end
 
-class SalvageCollectionMockTest < ActiveSupport::TestCase
+class SalvageCollectionTest < ActiveSupport::TestCase
   include SalvageCollection
 
   setup do
@@ -33,7 +43,7 @@ class SalvageCollectionMockTest < ActiveSupport::TestCase
     ENV['ARVADOS_API_TOKEN'] = ''
   end
 
-  test "salvage test collection" do
+  test "salvage test collection with valid manifest text" do
     # create a collection to test salvaging
     src_collection = Collection.new name: "test collection", manifest_text: TEST_MANIFEST
     src_collection.save!
@@ -93,21 +103,51 @@ class SalvageCollectionMockTest < ActiveSupport::TestCase
     assert_equal "Error during arv-put", e.message
   end
 
-  # This test has two invalid locators:
+  # This test uses BAD_MANIFEST, which has the following flaws:
+  #   Missing stream name with locator in it's place
+  #   Two invalid locators:
   #     341dabea2bd78ad0d6fc3f5b926b450e+abc
   #     341dabea2bd78ad0d6fc3f5b926b450e
-  # These locators should be preserved in salvaged_data
-  test "invalid locators dropped during salvaging" do
-    manifest = ". 341dabea2bd78ad0d6fc3f5b926b450e+abc 341dabea2bd78ad0d6fc3f5b926abcdf 0:85626:brca2-hg19.fa\n. 341dabea2bd78ad0d6fc3f5b926b450e+1000 0:1000:brca-hg19.fa\n . d7321a918923627c972d8f8080c07d29+2000+A22e0a1d9b9bc85c848379d98bedc64238b0b1532 at 55e076ce 0:2000:brca1-hg19.fa\n"
-
-    # salvage this collection
-    locator_data = SalvageCollection.salvage_collection_locator_data manifest
+  # Expectation: These locators are preserved in salvaged_data
+  test "invalid locators preserved during salvaging" do
+    locator_data = SalvageCollection.salvage_collection_locator_data BAD_MANIFEST
     assert_equal true, locator_data[0].size.eql?(4)
     assert_equal false, locator_data[0].include?("341dabea2bd78ad0d6fc3f5b926b450e+abc")
     assert_equal true, locator_data[0].include?("341dabea2bd78ad0d6fc3f5b926b450e")
     assert_equal true, locator_data[0].include?("341dabea2bd78ad0d6fc3f5b926abcdf")
-    assert_equal true, locator_data[0].include?("341dabea2bd78ad0d6fc3f5b926b450e+1000")
+    assert_equal true, locator_data[0].include?("abcdabea2bd78ad0d6fc3f5b926b450e+1000")
     assert_equal true, locator_data[0].include?("d7321a918923627c972d8f8080c07d29+2000")
     assert_equal true, locator_data[1].eql?(1000 + 2000)   # size
   end
+
+  test "salvage a collection with invalid manifest text" do
+    # create a collection to test salvaging
+    src_collection = Collection.new name: "test collection", manifest_text: BAD_MANIFEST, owner_uuid: 'zzzzz-tpzed-000000000000000'
+    src_collection.save!(validate: false)
+
+    # salvage this collection
+    SalvageCollection.salvage_collection src_collection.uuid, 'test salvage collection - see #6277, #6859'
+
+    # verify the updated src_collection data
+    updated_src_collection = Collection.find_by_uuid src_collection.uuid
+    updated_name = updated_src_collection.name
+    assert_equal true, updated_name.include?(src_collection.name)
+
+    match = updated_name.match /^test collection.*salvaged data at (.*)\)$/
+    assert_not_nil match
+    assert_not_nil match[1]
+    assert_empty updated_src_collection.manifest_text
+
+    # match[1] is the uuid of the new collection created from src_collection's salvaged data
+    # use this to get the new collection and verify
+    new_collection = Collection.find_by_uuid match[1]
+    match = new_collection.name.match /^salvaged from (.*),.*/
+    assert_not_nil match
+    assert_equal src_collection.uuid, match[1]
+
+    # verify the new collection's manifest includes the bad locators
+    match = new_collection.manifest_text.match /^. (.*) (.*):invalid_manifest_text.txt\n. (.*) (.*):salvaged_data/
+    assert_not_nil match
+    assert_includes(new_collection.manifest_text, ". 341dabea2bd78ad0d6fc3f5b926b450e 341dabea2bd78ad0d6fc3f5b926abcdf abcdabea2bd78ad0d6fc3f5b926b450e+1000 d7321a918923627c972d8f8080c07d29+2000 0:3000:salvaged_data")
+  end
 end

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list