3 class PipelineInstancesControllerTest < ActionController::TestCase
4 include PipelineInstancesHelper
7 r = [{started_at: 1, finished_at: 3}]
8 assert_equal 2, determine_wallclock_runtime(r)
10 r = [{started_at: 1, finished_at: 5}]
11 assert_equal 4, determine_wallclock_runtime(r)
13 r = [{started_at: 1, finished_at: 2}, {started_at: 3, finished_at: 5}]
14 assert_equal 3, determine_wallclock_runtime(r)
16 r = [{started_at: 3, finished_at: 5}, {started_at: 1, finished_at: 2}]
17 assert_equal 3, determine_wallclock_runtime(r)
19 r = [{started_at: 3, finished_at: 5}, {started_at: 1, finished_at: 2},
20 {started_at: 2, finished_at: 4}]
21 assert_equal 4, determine_wallclock_runtime(r)
23 r = [{started_at: 1, finished_at: 5}, {started_at: 2, finished_at: 3}]
24 assert_equal 4, determine_wallclock_runtime(r)
26 r = [{started_at: 3, finished_at: 5}, {started_at: 1, finished_at: 4}]
27 assert_equal 4, determine_wallclock_runtime(r)
29 r = [{started_at: 1, finished_at: 4}, {started_at: 3, finished_at: 5}]
30 assert_equal 4, determine_wallclock_runtime(r)
32 r = [{started_at: 1, finished_at: 4}, {started_at: 3, finished_at: 5},
33 {started_at: 5, finished_at: 8}]
34 assert_equal 7, determine_wallclock_runtime(r)
36 r = [{started_at: 1, finished_at: 4}, {started_at: 3, finished_at: 5},
37 {started_at: 6, finished_at: 8}]
38 assert_equal 6, determine_wallclock_runtime(r)
41 test "generate graph" do
45 pipeline_for_graph = {
47 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc9',
52 script_version: 'master',
53 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
54 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
59 script_version: 'master',
61 input: 'fa7aeb5140e2848d39b416daeef4ffc5+45'
63 job: {uuid: 'zzzzz-8i9sb-graphstage20000'},
64 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujx'
69 @controller.params['tab_pane'] = "Graph"
70 provenance, pips = @controller.graph([pipeline_for_graph])
72 graph_test_collection1 = find_fixture Collection, "graph_test_collection1"
73 stage1 = find_fixture Job, "graph_stage1"
74 stage2 = find_fixture Job, "graph_stage2"
76 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1',
77 'component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2',
82 pipeline_for_graph[:components][:stage1][:output_uuid],
83 pipeline_for_graph[:components][:stage2][:output_uuid]
86 assert_not_nil provenance[k], "Expected key #{k} in provenance set"
87 assert_equal 1, pips[k], "Expected key #{k} in pips set" if !k.start_with? "component_"
90 prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", {
91 :request => RequestDuck,
92 :all_script_parameters => true,
93 :combine_jobs => :script_and_version,
95 :only_components => true }
97 stage1_id = "#{stage1[:script]}_#{stage1[:script_version]}_#{Digest::MD5.hexdigest(stage1[:script_parameters].to_json)}"
98 stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
100 stage1_out = stage1[:output].gsub('+','\\\+')
102 assert_match /#{stage1_id}->#{stage1_out}/, prov_svg
104 assert_match /#{stage1_out}->#{stage2_id}/, prov_svg
108 test "generate graph compare" do
112 pipeline_for_graph1 = {
114 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc9',
119 script_version: 'master',
120 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
121 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
126 script_version: 'master',
128 input: 'fa7aeb5140e2848d39b416daeef4ffc5+45'
130 job: {uuid: 'zzzzz-8i9sb-graphstage20000'},
131 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujx'
136 pipeline_for_graph2 = {
138 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc0',
143 script_version: 'master',
144 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
145 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
150 script_version: 'master',
153 job: {uuid: 'zzzzz-8i9sb-graphstage30000'},
154 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujj'
159 @controller.params['tab_pane'] = "Graph"
160 provenance, pips = @controller.graph([pipeline_for_graph1, pipeline_for_graph2])
162 collection1 = find_fixture Collection, "graph_test_collection1"
164 stage1 = find_fixture Job, "graph_stage1"
165 stage2 = find_fixture Job, "graph_stage2"
166 stage3 = find_fixture Job, "graph_stage3"
168 [['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1', nil],
169 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2', nil],
170 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage1', nil],
171 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage2', nil],
178 [pipeline_for_graph1[:components][:stage1][:output_uuid], 3],
179 [pipeline_for_graph1[:components][:stage2][:output_uuid], 1],
180 [pipeline_for_graph2[:components][:stage2][:output_uuid], 2]
182 assert_not_nil provenance[k[0]], "Expected key #{k[0]} in provenance set"
183 assert_equal k[1], pips[k[0]], "Expected key #{k} in pips" if !k[0].start_with? "component_"
186 prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", {
187 :request => RequestDuck,
188 :all_script_parameters => true,
189 :combine_jobs => :script_and_version,
191 :only_components => true }
193 collection1_id = collection1.portable_data_hash.gsub('+','\\\+')
195 stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
196 stage3_id = "#{stage3[:script]}_#{stage3[:script_version]}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
198 stage2_out = stage2[:output].gsub('+','\\\+')
199 stage3_out = stage3[:output].gsub('+','\\\+')
201 assert_match /#{collection1_id}->#{stage2_id}/, prov_svg
202 assert_match /#{collection1_id}->#{stage3_id}/, prov_svg
204 assert_match /#{stage2_id}->#{stage2_out}/, prov_svg
205 assert_match /#{stage3_id}->#{stage3_out}/, prov_svg