test 'provenance graph' do
use_token 'admin'
- obj = Collection.where(uuid: 'zzzzz-4zz18-uukreo9rbgwsujj').results.first
+
+ obj = find_fixture Collection, "graph_test_collection3"
provenance = obj.provenance.stringify_keys
:direction => :bottom_up,
:combine_jobs => :script_only})
- # hash -> baz file
- assert /ea10d51bcf88862dbcc36eb292017dfd\+45->hash_f866587e2de5291fbd38d616d6d33eab/.match(prov_svg)
+ stage1 = find_fixture Job, "graph_stage1"
+ stage3 = find_fixture Job, "graph_stage3"
+ previous_job_run = find_fixture Job, "previous_job_run"
- # hash2 -> baz file
- assert /ea10d51bcf88862dbcc36eb292017dfd\+45->hash2_02a085407e751d00b5dc88f1bd5e8247/.match(prov_svg)
+ obj_id = obj.portable_data_hash.gsub('+', '\\\+')
+ stage1_out = stage1.output.gsub('+', '\\\+')
+ stage1_id = "#{stage1.script}_#{Digest::MD5.hexdigest(stage1[:script_parameters].to_json)}"
+ stage3_id = "#{stage3.script}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
- # owned_by_active -> hash
- assert /hash_f866587e2de5291fbd38d616d6d33eab->fa7aeb5140e2848d39b416daeef4ffc5\+45/.match(prov_svg)
+ assert /#{obj_id}->#{stage3_id}/.match(prov_svg)
- # owned_by_active -> hash2
- assert /hash2_02a085407e751d00b5dc88f1bd5e8247->fa7aeb5140e2848d39b416daeef4ffc5\+45/.match(prov_svg)
+ assert /#{stage3_id}->#{stage1_out}/.match(prov_svg)
- # File::open "./tmp/stuff3.svg", "w" do |f|
- # f.write "<?xml version=\"1.0\" ?>\n"
- # f.write prov_svg
- # end
+ assert /#{stage1_out}->#{stage1_id}/.match(prov_svg)
end
test 'used_by graph' do
use_token 'admin'
- obj = Collection.where(uuid: 'zzzzz-4zz18-bv31uwvy3neko22').results.first
+ obj = find_fixture Collection, "graph_test_collection1"
used_by = obj.used_by.stringify_keys
:combine_jobs => :script_only,
:pdata_only => true})
- # bar_file -> hash2
- assert /fa7aeb5140e2848d39b416daeef4ffc5\+45->hash2_f866587e2de5291fbd38d616d6d33eab/.match(used_by_svg)
+ stage2 = find_fixture Job, "graph_stage2"
+ stage3 = find_fixture Job, "graph_stage3"
+
+ stage2_id = "#{stage2.script}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
+ stage3_id = "#{stage3.script}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
+
+ obj_id = obj.portable_data_hash.gsub('+', '\\\+')
+ stage3_out = stage3.output.gsub('+', '\\\+')
- # hash -> baz file
- assert /hash_f866587e2de5291fbd38d616d6d33eab->ea10d51bcf88862dbcc36eb292017dfd\+45/.match(used_by_svg)
+ assert /#{obj_id}->#{stage2_id}/.match(used_by_svg)
- # hash2 -> baz file
- assert /hash2_02a085407e751d00b5dc88f1bd5e8247->ea10d51bcf88862dbcc36eb292017dfd\+45/.match(used_by_svg)
+ assert /#{obj_id}->#{stage3_id}/.match(used_by_svg)
+ assert /#{stage3_id}->#{stage3_out}/.match(used_by_svg)
- # File::open "./tmp/stuff4.svg", "w" do |f|
- # f.write "<?xml version=\"1.0\" ?>\n"
- # f.write used_by_svg
- # end
+ assert /#{stage3_id}->#{stage3_out}/.match(used_by_svg)
end
end
@controller.params['tab_pane'] = "Graph"
provenance, pips = @controller.graph([pipeline_for_graph])
+ graph_test_collection1 = find_fixture Collection, "graph_test_collection1"
+ stage1 = find_fixture Job, "graph_stage1"
+ stage2 = find_fixture Job, "graph_stage2"
+
['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1',
'component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2',
- 'zzzzz-8i9sb-graphstage10000',
- 'zzzzz-8i9sb-graphstage20000',
- 'b519d9cb706a29fc7ea24dbea2f05851+93',
- 'fa7aeb5140e2848d39b416daeef4ffc5+45',
- 'zzzzz-4zz18-bv31uwvy3neko22',
- 'zzzzz-4zz18-uukreo9rbgwsujx'].each do |k|
+ stage1.uuid,
+ stage2.uuid,
+ stage1.output,
+ stage2.output,
+ pipeline_for_graph[:components][:stage1][:output_uuid],
+ pipeline_for_graph[:components][:stage2][:output_uuid]
+ ].each do |k|
assert_not_nil provenance[k], "Expected key #{k} in provenance set"
assert_equal 1, pips[k], "Expected key #{k} in pips set" if !k.start_with? "component_"
:pips => pips,
:only_components => true }
- # hash -> owned_by_active
- assert /hash_4fe459abe02d9b365932b8f5dc419439ab4e2577_99914b932bd37a50b983c5e7c90ae93b->fa7aeb5140e2848d39b416daeef4ffc5\+45/.match(prov_svg)
+ stage1_id = "#{stage1[:script]}_#{stage1[:script_version]}_#{Digest::MD5.hexdigest(stage1[:script_parameters].to_json)}"
+ stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
+
+ stage1_out = stage1[:output].gsub('+','\\\+')
- # owned_by_active -> hash2
- assert /fa7aeb5140e2848d39b416daeef4ffc5\+45->hash2_4fe459abe02d9b365932b8f5dc419439ab4e2577_4900033ec5cfaf8a63566f3664aeaa70/.match(prov_svg)
+ assert_match /#{stage1_id}->#{stage1_out}/, prov_svg
- #File::open "./tmp/stuff1.svg", "w" do |f|
- # f.write "<?xml version=\"1.0\" ?>\n"
- # f.write prov_svg
- #end
+ assert_match /#{stage1_out}->#{stage2_id}/, prov_svg
end
@controller.params['tab_pane'] = "Graph"
provenance, pips = @controller.graph([pipeline_for_graph1, pipeline_for_graph2])
+ collection1 = find_fixture Collection, "graph_test_collection1"
+
+ stage1 = find_fixture Job, "graph_stage1"
+ stage2 = find_fixture Job, "graph_stage2"
+ stage3 = find_fixture Job, "graph_stage3"
+
[['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1', nil],
['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2', nil],
['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage1', nil],
['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage2', nil],
- ['zzzzz-8i9sb-graphstage10000', 3],
- ['zzzzz-8i9sb-graphstage20000', 1],
- ['zzzzz-8i9sb-graphstage30000', 2],
- ['b519d9cb706a29fc7ea24dbea2f05851+93', 1],
- ['fa7aeb5140e2848d39b416daeef4ffc5+45', 3],
- ['ea10d51bcf88862dbcc36eb292017dfd+45', 2],
- ['zzzzz-4zz18-bv31uwvy3neko22', 3],
- ['zzzzz-4zz18-uukreo9rbgwsujx', 1],
- ['zzzzz-4zz18-uukreo9rbgwsujj', 2]
+ [stage1.uuid, 3],
+ [stage2.uuid, 1],
+ [stage3.uuid, 2],
+ [stage1.output, 3],
+ [stage2.output, 1],
+ [stage3.output, 2],
+ [pipeline_for_graph1[:components][:stage1][:output_uuid], 3],
+ [pipeline_for_graph1[:components][:stage2][:output_uuid], 1],
+ [pipeline_for_graph2[:components][:stage2][:output_uuid], 2]
].each do |k|
assert_not_nil provenance[k[0]], "Expected key #{k[0]} in provenance set"
assert_equal k[1], pips[k[0]], "Expected key #{k} in pips" if !k[0].start_with? "component_"
:pips => pips,
:only_components => true }
- # owned_by_active -> hash2 (stuff)
- assert /fa7aeb5140e2848d39b416daeef4ffc5\+45->hash2_4fe459abe02d9b365932b8f5dc419439ab4e2577_4900033ec5cfaf8a63566f3664aeaa70/.match(prov_svg)
+ collection1_id = collection1.portable_data_hash.gsub('+','\\\+')
- # owned_by_active -> hash2 (stuff2)
- assert /fa7aeb5140e2848d39b416daeef4ffc5\+45->hash2_4fe459abe02d9b365932b8f5dc419439ab4e2577_02a085407e751d00b5dc88f1bd5e8247/.match(prov_svg)
+ stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
+ stage3_id = "#{stage3[:script]}_#{stage3[:script_version]}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
- # hash2 (stuff) -> GPL
- assert /hash2_4fe459abe02d9b365932b8f5dc419439ab4e2577_4900033ec5cfaf8a63566f3664aeaa70->b519d9cb706a29fc7ea24dbea2f05851\+93/.match(prov_svg)
+ stage2_out = stage2[:output].gsub('+','\\\+')
+ stage3_out = stage3[:output].gsub('+','\\\+')
- # hash2 (stuff2) -> baz file
- assert /hash2_4fe459abe02d9b365932b8f5dc419439ab4e2577_02a085407e751d00b5dc88f1bd5e8247->ea10d51bcf88862dbcc36eb292017dfd\+45/.match(prov_svg)
+ assert_match /#{collection1_id}->#{stage2_id}/, prov_svg
+ assert_match /#{collection1_id}->#{stage3_id}/, prov_svg
- # File::open "./tmp/stuff2.svg", "w" do |f|
- # f.write "<?xml version=\"1.0\" ?>\n"
- # f.write prov_svg
- # end
+ assert_match /#{stage2_id}->#{stage2_out}/, prov_svg
+ assert_match /#{stage3_id}->#{stage3_out}/, prov_svg
end