github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/master/jobnet/gateway_test.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 honda 3 4 package jobnet 5 6 import "testing" 7 8 // ※補足事項 9 // testJob構造体およびその生成関数generateTestJobはpath_test.goで定義されています。 10 11 func TestNewGateway_ゲートウェイのIDがセットされる(t *testing.T) { 12 g := NewGateway("gwid1") 13 if g.ID() != "gwid1" { 14 t.Errorf("セットされたID[%s]が想定と違っている。", g.ID()) 15 } 16 } 17 18 func TestGatewayType_ゲートウェイのノードタイプを取得できる(t *testing.T) { 19 g := NewGateway("gwid1") 20 if g.Type() != ELM_GW { 21 t.Errorf("取得したノードタイプ[%d]が想定と違っている。", g.Type()) 22 } 23 } 24 25 func TestGatewayAddNext_ゲートウェイ構造体に後続エレメントを追加できる(t *testing.T) { 26 g1 := new(Gateway) 27 g2 := new(Gateway) 28 j1 := new(Job) 29 30 g1.AddNext(j1) 31 if len(g1.Nexts) != 1 { 32 t.Fatal("後続ジョブの追加に失敗した。") 33 } 34 if g1.Nexts[0] != j1 { 35 t.Error("追加した後続ジョブが間違っている。") 36 } 37 38 g1.AddNext(g2) 39 if len(g1.Nexts) != 2 { 40 t.Fatal("後続ゲートウェイの追加に失敗した。") 41 } 42 if g1.Nexts[0] != j1 { 43 t.Error("無関係な後続エレメントを変更している。") 44 } 45 if g1.Nexts[1] != g2 { 46 t.Error("追加した後続ゲートウェイが間違っている。") 47 } 48 } 49 50 func TestGatewayHasNext_ゲートウェイ構造体の後続エレメントの有無をチェックできる(t *testing.T) { 51 g1 := new(Gateway) 52 g2 := new(Gateway) 53 j1 := new(Job) 54 55 if g1.HasNext() { 56 t.Error("後続エレメントが無いのにも関わらず、HasNextがtrueを返した") 57 } 58 59 g1.Nexts = append(g1.Nexts, g1) 60 if !g1.HasNext() { 61 t.Error("後続ゲートウェイがあるのにも関わらず、HasNextがfalseを返した") 62 } 63 64 g2.Nexts = append(g2.Nexts, j1) 65 if !g2.HasNext() { 66 t.Error("後続ジョブがあるのにも関わらず、HasNextがfalseを返した") 67 } 68 69 g1.Nexts = append(g1.Nexts, j1) 70 if !g1.HasNext() { 71 t.Error("後続エレメントが複数あるのにも関わらず、HasNextがfalseを返した") 72 } 73 } 74 75 func TestGatewayExecute_後続ノードが存在しないケース(t *testing.T) { 76 g := NewGateway("gwid1") 77 78 next, err := g.Execute() 79 if err != nil { 80 t.Fatalf("想定外のエラーが発生した: %s", err) 81 } 82 if next != nil { 83 t.Errorf("存在しないはずの後続ノード[%s]が取得された。", next.ID()) 84 } 85 } 86 87 func TestGatewayExecute_後続ノードが1つのケース(t *testing.T) { 88 g := NewGateway("gwid1") 89 j := generateTestJob(1) 90 g.AddNext(j) 91 92 next, err := g.Execute() 93 if err != nil { 94 t.Fatalf("想定外のエラーが発生した: %s", err) 95 } 96 if next != j { 97 t.Errorf("想定外の後続ノード[%s]が取得された。", next.ID()) 98 } 99 } 100 101 func TestGatewayExecute_後続ノードが複数のケース(t *testing.T) { 102 g1 := NewGateway("gwid1") 103 g2 := NewGateway("gwid2") 104 j1 := generateTestJob(1) 105 j2 := generateTestJob(2) 106 j3 := generateTestJob(3) 107 g1.AddNext(j1) 108 g1.AddNext(j3) 109 j1.AddNext(j2) 110 j2.AddNext(g2) 111 j3.AddNext(g2) 112 113 next, err := g1.Execute() 114 if err != nil { 115 t.Fatalf("想定外のエラーが発生した: %s", err) 116 } 117 if next != g2 { 118 t.Errorf("想定外の後続ノード[%s]が取得された。", next.ID()) 119 } 120 if !j1.isExecuted { 121 t.Errorf("分岐経路中のジョブj1が実行されなかった。") 122 } 123 if !j2.isExecuted { 124 t.Errorf("分岐経路中のジョブj2が実行されなかった。") 125 } 126 if !j3.isExecuted { 127 t.Errorf("分岐経路中のジョブj3が実行されなかった。") 128 } 129 } 130 131 func TestGatewayExecute_分岐経路中でジョブが異常終了したらエラー(t *testing.T) { 132 g1 := NewGateway("gwid1") 133 g2 := NewGateway("gwid2") 134 j1 := generateTestJob(1) 135 j2 := generateTestJob(2) 136 j3 := generateTestJob(3) 137 g1.AddNext(j1) 138 g1.AddNext(j3) 139 j1.AddNext(j2) 140 j2.AddNext(g2) 141 j3.AddNext(g2) 142 143 j1.hasError = true 144 next, err := g1.Execute() 145 if err == nil { 146 t.Fatalf("エラーが発生しなかった。") 147 } 148 if next != nil { 149 t.Errorf("想定外の後続ノード[%s]が取得された。", next.ID()) 150 } 151 if !j1.isExecuted { 152 t.Errorf("分岐経路中のジョブj1が実行されなかった。") 153 } 154 if j2.isExecuted { 155 t.Errorf("異常終了ジョブの後続ジョブj2が実行された。") 156 } 157 if !j3.isExecuted { 158 t.Errorf("分岐経路中のジョブj3が実行されなかった。") 159 } 160 } 161 162 func TestGatewayExecute_経路間で終着ノードが異なる場合はエラー(t *testing.T) { 163 g1 := NewGateway("gwid1") 164 g2 := NewGateway("gwid2") 165 g3 := NewGateway("gwid3") 166 j1 := generateTestJob(1) 167 j2 := generateTestJob(2) 168 j3 := generateTestJob(3) 169 g1.AddNext(j1) 170 g1.AddNext(j2) 171 g1.AddNext(j3) 172 j1.AddNext(g2) 173 j2.AddNext(g2) 174 j3.AddNext(g3) 175 176 next, err := g1.Execute() 177 if err == nil { 178 t.Fatalf("エラーが発生しなかった。") 179 } 180 if next != nil { 181 t.Errorf("想定外の後続ノード[%s]が取得された。", next.ID()) 182 } 183 }