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)
56 test "generate graph" do
60 pipeline_for_graph = {
62 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc9',
67 script_version: 'master',
68 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
69 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
74 script_version: 'master',
76 input: 'fa7aeb5140e2848d39b416daeef4ffc5+45'
78 job: {uuid: 'zzzzz-8i9sb-graphstage20000'},
79 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujx'
84 @controller.params['tab_pane'] = "Graph"
85 provenance, pips = @controller.graph([pipeline_for_graph])
87 graph_test_collection1 = find_fixture Collection, "graph_test_collection1"
88 stage1 = find_fixture Job, "graph_stage1"
89 stage2 = find_fixture Job, "graph_stage2"
91 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1',
92 'component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2',
97 pipeline_for_graph[:components][:stage1][:output_uuid],
98 pipeline_for_graph[:components][:stage2][:output_uuid]
101 assert_not_nil provenance[k], "Expected key #{k} in provenance set"
102 assert_equal 1, pips[k], "Expected key #{k} in pips set" if !k.start_with? "component_"
105 prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", {
106 :request => RequestDuck,
107 :all_script_parameters => true,
108 :combine_jobs => :script_and_version,
110 :only_components => true }
112 stage1_id = "#{stage1[:script]}_#{stage1[:script_version]}_#{Digest::MD5.hexdigest(stage1[:script_parameters].to_json)}"
113 stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
115 stage1_out = stage1[:output].gsub('+','\\\+')
117 assert_match /#{stage1_id}->#{stage1_out}/, prov_svg
119 assert_match /#{stage1_out}->#{stage2_id}/, prov_svg
123 test "generate graph compare" do
127 pipeline_for_graph1 = {
129 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc9',
134 script_version: 'master',
135 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
136 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
141 script_version: 'master',
143 input: 'fa7aeb5140e2848d39b416daeef4ffc5+45'
145 job: {uuid: 'zzzzz-8i9sb-graphstage20000'},
146 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujx'
151 pipeline_for_graph2 = {
153 uuid: 'zzzzz-d1hrv-9fm8l10i9z2kqc0',
158 script_version: 'master',
159 job: {uuid: 'zzzzz-8i9sb-graphstage10000'},
160 output_uuid: 'zzzzz-4zz18-bv31uwvy3neko22'
165 script_version: 'master',
168 job: {uuid: 'zzzzz-8i9sb-graphstage30000'},
169 output_uuid: 'zzzzz-4zz18-uukreo9rbgwsujj'
174 @controller.params['tab_pane'] = "Graph"
175 provenance, pips = @controller.graph([pipeline_for_graph1, pipeline_for_graph2])
177 collection1 = find_fixture Collection, "graph_test_collection1"
179 stage1 = find_fixture Job, "graph_stage1"
180 stage2 = find_fixture Job, "graph_stage2"
181 stage3 = find_fixture Job, "graph_stage3"
183 [['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage1', nil],
184 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc9_stage2', nil],
185 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage1', nil],
186 ['component_zzzzz-d1hrv-9fm8l10i9z2kqc0_stage2', nil],
193 [pipeline_for_graph1[:components][:stage1][:output_uuid], 3],
194 [pipeline_for_graph1[:components][:stage2][:output_uuid], 1],
195 [pipeline_for_graph2[:components][:stage2][:output_uuid], 2]
197 assert_not_nil provenance[k[0]], "Expected key #{k[0]} in provenance set"
198 assert_equal k[1], pips[k[0]], "Expected key #{k} in pips" if !k[0].start_with? "component_"
201 prov_svg = ProvenanceHelper::create_provenance_graph provenance, "provenance_svg", {
202 :request => RequestDuck,
203 :all_script_parameters => true,
204 :combine_jobs => :script_and_version,
206 :only_components => true }
208 collection1_id = collection1.portable_data_hash.gsub('+','\\\+')
210 stage2_id = "#{stage2[:script]}_#{stage2[:script_version]}_#{Digest::MD5.hexdigest(stage2[:script_parameters].to_json)}"
211 stage3_id = "#{stage3[:script]}_#{stage3[:script_version]}_#{Digest::MD5.hexdigest(stage3[:script_parameters].to_json)}"
213 stage2_out = stage2[:output].gsub('+','\\\+')
214 stage3_out = stage3[:output].gsub('+','\\\+')
216 assert_match /#{collection1_id}->#{stage2_id}/, prov_svg
217 assert_match /#{collection1_id}->#{stage3_id}/, prov_svg
219 assert_match /#{stage2_id}->#{stage2_out}/, prov_svg
220 assert_match /#{stage3_id}->#{stage3_out}/, prov_svg