/ spec / orchestration / sequence_spec.cr
sequence_spec.cr
 1  require "../spec_helper"
 2  
 3  private class SequenceProject < Barista::Project; end
 4  
 5  @[Barista::BelongsTo(SequenceProject)]
 6  private class Gem1 < Barista::Task
 7    sequence ["Gems", "Other"]
 8  
 9    def execute
10      Barista::Log.info("gem1") { "start" }
11      sleep 0.3
12      Barista::Log.info("gem1") { "finish" }
13    end
14  end
15  
16  @[Barista::BelongsTo(SequenceProject)]
17  private class Gem2 < Barista::Task
18    sequence ["Gems"]
19  
20    def execute
21      Barista::Log.info("gem2") { "start" }
22      sleep 0.1
23      Barista::Log.info("gem2") { "finish" }
24    end
25  end
26  
27  @[Barista::BelongsTo(SequenceProject)]
28  private class Gem3 < Barista::Task
29    dependency NonGem
30    sequence ["Gems"]
31  
32    def execute
33      Barista::Log.info("gem3") { "start" }
34      sleep 0.2
35      Barista::Log.info("gem3") { "finish" }
36    end
37  end
38  
39  @[Barista::BelongsTo(SequenceProject)]
40  private class NonGem < Barista::Task
41    sequence ["Other"]
42  
43    def execute
44      Barista::Log.info("nongem") { "start" }
45      Barista::Log.info("nongem") { "finish" }
46    end
47  end
48  
49  module Barista
50    describe "Sequence Groups" do
51      it "builds in order when providing sequences" do
52        project = SequenceProject.new
53  
54        output = [] of String
55  
56        project.tasks.map(&.new)
57  
58        runner = Barista::Orchestrator.new(project.registry, workers: 4)
59  
60        with_io do |io|
61          puts io
62          runner.execute
63  
64          expected = [
65            "gem1> start", 
66            "gem1> finish", 
67            "gem2> start", 
68            "nongem> start", 
69            "nongem> finish", 
70            "gem2> finish",
71            "gem3> start",
72            "gem3> finish"
73          ]
74  
75          regex = /#{expected.join("(.|\\n)*")}/m
76          io.to_s.should match(regex)
77        end
78      end
79    end
80  end