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  }