github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/master/jobnet/network_test.go (about) 1 package jobnet 2 3 import ( 4 "path/filepath" 5 "reflect" 6 "strings" 7 "testing" 8 9 "github.com/unirita/cuto/master/config" 10 "github.com/unirita/cuto/master/jobnet/parser" 11 "github.com/unirita/cuto/testutil" 12 ) 13 14 // ※補足事項 15 // testJob構造体およびその生成関数generateTestJobはpath_test.goで定義されています。 16 17 type undefinedElement struct { 18 next Element 19 } 20 21 func (u *undefinedElement) ID() string { return "undefined" } 22 func (u *undefinedElement) Type() elementType { return ELM_JOB } 23 func (u *undefinedElement) AddNext(e Element) error { 24 u.next = e 25 return nil 26 } 27 func (u *undefinedElement) HasNext() bool { 28 if u.next == nil { 29 return false 30 } 31 return true 32 } 33 func (u *undefinedElement) Execute() (Element, error) { 34 return u.next, nil 35 } 36 37 func getTestDBPath() string { 38 return filepath.Join(testutil.GetBaseDir(), 39 "master", "jobnet", "_testdata", "test.sqlite") 40 } 41 42 func loadTestConfig() { 43 config.Job.DefaultNode = `localhost` 44 config.Job.DefaultPort = 2015 45 config.Job.DefaultTimeoutMin = 30 46 config.Dir.JobnetDir = `jobnet` 47 config.DB.DBFile = getTestDBPath() 48 } 49 50 func TestNewNetwork_各メンバの初期値をセットできる(t *testing.T) { 51 loadTestConfig() 52 53 n, _ := NewNetwork("test") 54 55 if n.Name != "test" { 56 t.Errorf("セットされたネットワーク名[%s]が間違っています。", n.Name) 57 } 58 if n.elements == nil { 59 t.Error("elementsがmakeされていません。") 60 } 61 expectedNwkPath := filepath.Join("jobnet", "test.bpmn") 62 if n.MasterPath != expectedNwkPath { 63 t.Errorf("セットされたネットワーク定義ファイルパス[%s]が間違っています。", n.MasterPath) 64 } 65 expectedExPath := filepath.Join("jobnet", "test.csv") 66 if n.JobExPath != expectedExPath { 67 t.Errorf("セットされた拡張ジョブ定義ファイルパス[%s]が間違っています。", n.JobExPath) 68 } 69 } 70 71 func TestLoadNetwork_定義ファイルが存在しない場合はnilを返す(t *testing.T) { 72 n := LoadNetwork("noexistnetwork") 73 if n != nil { 74 t.Errorf("返された値がnilではない。") 75 } 76 } 77 78 func TestLoadElements_要素をロードできる(t *testing.T) { 79 bpmn := ` 80 <definitions> 81 <process> 82 <startEvent id="start"/> 83 <endEvent id="end"/> 84 <serviceTask id="job" name="jobname"/> 85 <sequenceFlow sourceRef="start" targetRef="job"/> 86 <sequenceFlow sourceRef="job" targetRef="end"/> 87 </process> 88 </definitions>` 89 90 n, _ := NewNetwork("test") 91 err := n.LoadElements(strings.NewReader(bpmn)) 92 if err != nil { 93 t.Fatalf("想定外のエラーが発生した: %s", err) 94 } 95 if len(n.elements) == 0 { 96 t.Fatal("Network.elementsが空のままになっている。") 97 } 98 } 99 100 func TestLoadElements_パースに失敗した場合はエラー(t *testing.T) { 101 bpmn := `CannotParseString` 102 103 n, _ := NewNetwork("test") 104 err := n.LoadElements(strings.NewReader(bpmn)) 105 if err == nil { 106 t.Error("エラーが発生しなかった。") 107 } 108 if len(n.elements) != 0 { 109 t.Error("Network.elementsは空のままであるはずが、値がセットされた。") 110 } 111 } 112 113 func TestSetElements_JobとGatewayを追加できる(t *testing.T) { 114 proc := &parser.Process{ 115 Start: make([]parser.StartEvent, 1), 116 End: make([]parser.EndEvent, 1), 117 Task: make([]parser.ServiceTask, 1), 118 Gateway: make([]parser.ParallelGateway, 1), 119 } 120 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 121 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 122 123 nwk, _ := NewNetwork("test") 124 err := nwk.setElements(proc) 125 if err != nil { 126 t.Fatalf("想定外のエラーが発生した: %s") 127 } 128 129 elements := nwk.elements 130 if len(elements) != 2 { 131 t.Fatalf("要素数は2個であるはずだが、%d個存在する。", len(elements)) 132 } 133 134 task1, ok := elements["task1"] 135 if !ok { 136 t.Fatal("task1がセットされなかった。") 137 } 138 if task1.ID() != "task1" { 139 t.Errorf("ジョブtask1のidはtask1であるはずだが、%sがセットされている。", task1.ID()) 140 } 141 142 gw1, ok := elements["gw1"] 143 if !ok { 144 t.Fatal("gw1がセットされなかった。") 145 } 146 if gw1.ID() != "gw1" { 147 t.Errorf("ゲートウェイgw1のidはgw1であるはずだが、%sがセットされている。", gw1.ID()) 148 } 149 } 150 151 func TestSetElements_Jobの先行関係を設定できる(t *testing.T) { 152 proc := &parser.Process{ 153 Start: make([]parser.StartEvent, 1), 154 End: make([]parser.EndEvent, 1), 155 Task: make([]parser.ServiceTask, 2), 156 Flow: make([]parser.SequenceFlow, 1), 157 } 158 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 159 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 160 proc.Flow[0] = parser.SequenceFlow{From: "task1", To: "task2"} 161 162 nwk, _ := NewNetwork("test") 163 err := nwk.setElements(proc) 164 if err != nil { 165 t.Fatalf("想定外のエラーが発生した: %s") 166 } 167 168 task1 := nwk.elements["task1"].(*Job) 169 if task1.Next == nil { 170 t.Fatal("task1の後続ジョブが設定されていない。") 171 } 172 173 task2, ok := task1.Next.(*Job) 174 if !ok { 175 t.Fatal("task1の後続ジョブがJob型になっていない。") 176 } 177 if task2.ID() != "task2" { 178 t.Error("task1の後続ジョブはtask2であるはずが、%sになっている。", task2.ID()) 179 } 180 } 181 182 func TestSetElements_Gatewayの先行関係を設定できる(t *testing.T) { 183 proc := &parser.Process{ 184 Start: make([]parser.StartEvent, 1), 185 End: make([]parser.EndEvent, 1), 186 Task: make([]parser.ServiceTask, 3), 187 Gateway: make([]parser.ParallelGateway, 1), 188 Flow: make([]parser.SequenceFlow, 3), 189 } 190 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 191 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 192 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 193 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 194 proc.Flow[0] = parser.SequenceFlow{From: "task1", To: "gw1"} 195 proc.Flow[1] = parser.SequenceFlow{From: "gw1", To: "task2"} 196 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task3"} 197 198 nwk, _ := NewNetwork("test") 199 err := nwk.setElements(proc) 200 if err != nil { 201 t.Fatalf("想定外のエラーが発生した: %s") 202 } 203 204 task1 := nwk.elements["task1"].(*Job) 205 if task1.Next == nil { 206 t.Fatal("task1の後続ゲートウェイが設定されていない。") 207 } 208 209 gw1, ok := task1.Next.(*Gateway) 210 if !ok { 211 t.Fatal("task1の後続ゲートウェイがGateway型になっていない。") 212 } 213 if gw1.ID() != "gw1" { 214 t.Error("task1の後続ゲートウェイはgw1であるはずが、%sになっている。", gw1.ID()) 215 } 216 217 if len(gw1.Nexts) != 2 { 218 t.Fatal("gw1の後続ジョブ数が2つになるはずが、違っている。") 219 } 220 if gw1.Nexts[0] == nil || gw1.Nexts[1] == nil { 221 t.Fatal("gw1の後続ジョブのに設定されるはずのないnilが設定されている。") 222 } 223 224 task2, ok := gw1.Nexts[0].(*Job) 225 if !ok { 226 t.Fatal("gw1の1つめの後続ジョブがJob型になっていない。") 227 } 228 if task2.ID() != "task2" { 229 t.Error("gw1の1つめの後続ジョブはtask2であるはずが、%sになっている。", task2.ID()) 230 } 231 232 task3, ok := gw1.Nexts[1].(*Job) 233 if !ok { 234 t.Fatal("gw1の2つめの後続ジョブがJob型になっていない。") 235 } 236 if task3.ID() != "task3" { 237 t.Error("gw1の1つめの後続ジョブはtask2であるはずが、%sになっている。", task3.ID()) 238 } 239 } 240 241 func TestSetElements_開始要素と終了要素を設定できる(t *testing.T) { 242 proc := &parser.Process{ 243 Start: make([]parser.StartEvent, 1), 244 End: make([]parser.EndEvent, 1), 245 Task: make([]parser.ServiceTask, 1), 246 Flow: make([]parser.SequenceFlow, 2), 247 } 248 proc.Start[0] = parser.StartEvent{ID: "start"} 249 proc.End[0] = parser.EndEvent{ID: "end"} 250 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 251 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 252 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "end"} 253 254 nwk, _ := NewNetwork("test") 255 err := nwk.setElements(proc) 256 if err != nil { 257 t.Fatalf("想定外のエラーが発生した: %s") 258 } 259 260 if nwk.Start == nil { 261 t.Fatal("開始要素が設定されなかった。") 262 } 263 if nwk.Start.ID() != "task1" { 264 t.Error("間違った要素が開始要素に設定された。") 265 } 266 267 if nwk.End == nil { 268 t.Fatal("終了要素が設定されなかった。") 269 } 270 if nwk.End.ID() != "task1" { 271 t.Error("間違った要素が終了要素に設定された。") 272 } 273 } 274 275 func TestSetElements_ジョブ名が不正な場合はエラーを吐く(t *testing.T) { 276 proc := &parser.Process{ 277 Start: make([]parser.StartEvent, 1), 278 End: make([]parser.EndEvent, 1), 279 Task: make([]parser.ServiceTask, 1), 280 } 281 proc.Task[0] = parser.ServiceTask{ID: "j1", Name: "jo$b1"} 282 283 nwk, _ := NewNetwork("test") 284 err := nwk.setElements(proc) 285 if err == nil { 286 t.Fatal("エラーが発生しなかった。") 287 } 288 } 289 290 func TestSetElements_開始要素の接続先が複数ある場合はエラーを吐く(t *testing.T) { 291 proc := &parser.Process{ 292 Start: make([]parser.StartEvent, 1), 293 End: make([]parser.EndEvent, 1), 294 Task: make([]parser.ServiceTask, 2), 295 Flow: make([]parser.SequenceFlow, 2), 296 } 297 proc.Start[0] = parser.StartEvent{ID: "start"} 298 proc.End[0] = parser.EndEvent{ID: "end"} 299 proc.Task[0] = parser.ServiceTask{ID: "j1", Name: "job1"} 300 proc.Task[1] = parser.ServiceTask{ID: "j2", Name: "job2"} 301 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "j1"} 302 proc.Flow[1] = parser.SequenceFlow{From: "start", To: "j2"} 303 304 nwk, _ := NewNetwork("test") 305 err := nwk.setElements(proc) 306 if err == nil { 307 t.Fatal("エラーが発生しなかった。") 308 } 309 } 310 311 func TestSetElements_終了要素の接続元が複数ある場合はエラーを吐く(t *testing.T) { 312 proc := &parser.Process{ 313 Start: make([]parser.StartEvent, 1), 314 End: make([]parser.EndEvent, 1), 315 Task: make([]parser.ServiceTask, 2), 316 Flow: make([]parser.SequenceFlow, 2), 317 } 318 proc.Start[0] = parser.StartEvent{ID: "start"} 319 proc.End[0] = parser.EndEvent{ID: "end"} 320 proc.Task[0] = parser.ServiceTask{ID: "j1", Name: "job1"} 321 proc.Task[1] = parser.ServiceTask{ID: "j2", Name: "job2"} 322 proc.Flow[0] = parser.SequenceFlow{From: "j1", To: "end"} 323 proc.Flow[1] = parser.SequenceFlow{From: "j2", To: "end"} 324 325 nwk, _ := NewNetwork("test") 326 err := nwk.setElements(proc) 327 if err == nil { 328 t.Fatal("エラーが発生しなかった。") 329 } 330 } 331 332 func TestSetElements_フローが空の場合はエラーを吐く(t *testing.T) { 333 proc := &parser.Process{ 334 Start: make([]parser.StartEvent, 1), 335 End: make([]parser.EndEvent, 1), 336 Flow: make([]parser.SequenceFlow, 1), 337 } 338 proc.Start[0] = parser.StartEvent{ID: "start"} 339 proc.End[0] = parser.EndEvent{ID: "end"} 340 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "end"} 341 342 nwk, _ := NewNetwork("test") 343 err := nwk.setElements(proc) 344 if err == nil { 345 t.Fatal("エラーが発生しなかった。") 346 } 347 } 348 349 func TestSetElements_ID重複時はエラーを吐く_Task同士の重複(t *testing.T) { 350 proc := &parser.Process{ 351 Start: make([]parser.StartEvent, 1), 352 End: make([]parser.EndEvent, 1), 353 Task: make([]parser.ServiceTask, 2), 354 } 355 proc.Task[0] = parser.ServiceTask{ID: "same", Name: "job1"} 356 proc.Task[1] = parser.ServiceTask{ID: "same", Name: "job2"} 357 358 nwk, _ := NewNetwork("test") 359 err := nwk.setElements(proc) 360 if err == nil { 361 t.Fatal("エラーが発生しなかった。") 362 } 363 } 364 365 func TestSetElements_ID重複時はエラーを吐く_Gateway同士の重複(t *testing.T) { 366 proc := &parser.Process{ 367 Start: make([]parser.StartEvent, 1), 368 End: make([]parser.EndEvent, 1), 369 Gateway: make([]parser.ParallelGateway, 2), 370 } 371 proc.Gateway[0] = parser.ParallelGateway{ID: "same"} 372 proc.Gateway[1] = parser.ParallelGateway{ID: "same"} 373 374 nwk, _ := NewNetwork("test") 375 err := nwk.setElements(proc) 376 if err == nil { 377 t.Fatal("エラーが発生しなかった。") 378 } 379 } 380 381 func TestSetElements_ID重複時はエラーを吐く_TaskとGatewayの重複(t *testing.T) { 382 proc := &parser.Process{ 383 Start: make([]parser.StartEvent, 1), 384 End: make([]parser.EndEvent, 1), 385 Task: make([]parser.ServiceTask, 1), 386 Gateway: make([]parser.ParallelGateway, 1), 387 } 388 proc.Task[0] = parser.ServiceTask{ID: "same", Name: "job1"} 389 proc.Gateway[0] = parser.ParallelGateway{ID: "same"} 390 391 nwk, _ := NewNetwork("test") 392 err := nwk.setElements(proc) 393 if err == nil { 394 t.Fatal("エラーが発生しなかった。") 395 } 396 } 397 398 func TestSetElements_開始要素の接続先が不正な場合はエラーを吐く(t *testing.T) { 399 proc := &parser.Process{ 400 Start: make([]parser.StartEvent, 1), 401 End: make([]parser.EndEvent, 1), 402 Flow: make([]parser.SequenceFlow, 1), 403 } 404 proc.Start[0] = parser.StartEvent{ID: "start"} 405 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "noexist"} 406 407 nwk, _ := NewNetwork("test") 408 err := nwk.setElements(proc) 409 if err == nil { 410 t.Fatal("エラーが発生しなかった。") 411 } 412 } 413 414 func TestSetElements_終了要素の接続元が不正な場合はエラーを吐く(t *testing.T) { 415 proc := &parser.Process{ 416 Start: make([]parser.StartEvent, 1), 417 End: make([]parser.EndEvent, 1), 418 Flow: make([]parser.SequenceFlow, 1), 419 } 420 proc.End[0] = parser.EndEvent{ID: "end"} 421 proc.Flow[0] = parser.SequenceFlow{From: "noexist", To: "end"} 422 423 nwk, _ := NewNetwork("test") 424 err := nwk.setElements(proc) 425 if err == nil { 426 t.Fatal("エラーが発生しなかった。") 427 } 428 } 429 430 func TestSetElements_ジョブの接続先が不正な場合はエラーを吐く(t *testing.T) { 431 proc := &parser.Process{ 432 Start: make([]parser.StartEvent, 1), 433 End: make([]parser.EndEvent, 1), 434 Task: make([]parser.ServiceTask, 1), 435 Flow: make([]parser.SequenceFlow, 1), 436 } 437 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 438 proc.Flow[0] = parser.SequenceFlow{From: "task1", To: "noexist"} 439 440 nwk, _ := NewNetwork("test") 441 err := nwk.setElements(proc) 442 if err == nil { 443 t.Fatal("エラーが発生しなかった。") 444 } 445 } 446 447 func TestSetElements_ジョブの接続元が不正な場合はエラーを吐く(t *testing.T) { 448 proc := &parser.Process{ 449 Start: make([]parser.StartEvent, 1), 450 End: make([]parser.EndEvent, 1), 451 Task: make([]parser.ServiceTask, 1), 452 Flow: make([]parser.SequenceFlow, 1), 453 } 454 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 455 proc.Flow[0] = parser.SequenceFlow{From: "noexist", To: "task1"} 456 457 nwk, _ := NewNetwork("test") 458 err := nwk.setElements(proc) 459 if err == nil { 460 t.Fatal("エラーが発生しなかった。") 461 } 462 } 463 464 func TestSetElements_ゲートウェイの接続先が不正な場合はエラーを吐く(t *testing.T) { 465 proc := &parser.Process{ 466 Start: make([]parser.StartEvent, 1), 467 End: make([]parser.EndEvent, 1), 468 Gateway: make([]parser.ParallelGateway, 1), 469 Flow: make([]parser.SequenceFlow, 1), 470 } 471 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 472 proc.Flow[0] = parser.SequenceFlow{From: "gw1", To: "noexist"} 473 474 nwk, _ := NewNetwork("test") 475 err := nwk.setElements(proc) 476 if err == nil { 477 t.Fatal("エラーが発生しなかった。") 478 } 479 } 480 481 func TestSetElements_ゲートウェイの接続元が不正な場合はエラーを吐く(t *testing.T) { 482 proc := &parser.Process{ 483 Start: make([]parser.StartEvent, 1), 484 End: make([]parser.EndEvent, 1), 485 Gateway: make([]parser.ParallelGateway, 1), 486 Flow: make([]parser.SequenceFlow, 1), 487 } 488 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 489 proc.Flow[0] = parser.SequenceFlow{From: "noexist", To: "gw1"} 490 491 nwk, _ := NewNetwork("test") 492 err := nwk.setElements(proc) 493 if err == nil { 494 t.Fatal("エラーが発生しなかった。") 495 } 496 } 497 498 func TestSetElements_ジョブの後続が複数ある場合はエラー(t *testing.T) { 499 proc := &parser.Process{ 500 Start: make([]parser.StartEvent, 1), 501 End: make([]parser.EndEvent, 1), 502 Task: make([]parser.ServiceTask, 3), 503 Flow: make([]parser.SequenceFlow, 2), 504 } 505 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 506 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 507 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 508 proc.Flow[0] = parser.SequenceFlow{From: "task1", To: "task2"} 509 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "task3"} 510 511 nwk, _ := NewNetwork("test") 512 err := nwk.setElements(proc) 513 if err == nil { 514 t.Fatal("エラーが発生しなかった。") 515 } 516 } 517 518 func TestLoadJobEx_拡張ジョブファイルが存在しない場合にエラーとしない(t *testing.T) { 519 n, _ := NewNetwork("noexistsjobex") 520 err := n.LoadJobEx() 521 if err != nil { 522 t.Errorf("想定外のエラーが発生した: %s", err) 523 } 524 } 525 526 func TestSetJobEx_拡張ジョブ情報をセットできる(t *testing.T) { 527 proc := &parser.Process{ 528 Start: make([]parser.StartEvent, 1), 529 End: make([]parser.EndEvent, 1), 530 Task: make([]parser.ServiceTask, 2), 531 Gateway: make([]parser.ParallelGateway, 0), 532 Flow: make([]parser.SequenceFlow, 0), 533 } 534 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 535 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 536 537 je1 := new(parser.JobEx) 538 je1.Node = "node1" 539 je1.Port = 1 540 je1.FilePath = "path1" 541 je1.Param = "param1" 542 je1.Env = "env1" 543 je1.Workspace = "work1" 544 je1.WrnRC = 11 545 je1.WrnPtn = "warn1" 546 je1.ErrRC = 21 547 je1.ErrPtn = "err1" 548 je1.TimeoutMin = 60 549 je1.SecondaryNode = "secondary" 550 je1.SecondaryPort = 2 551 552 je2 := new(parser.JobEx) 553 je2.Node = "node2" 554 555 jeMap := make(map[string]*parser.JobEx) 556 jeMap["job1"] = je1 557 jeMap["job2"] = je2 558 559 nwk, _ := NewNetwork("test") 560 err := nwk.setElements(proc) 561 if err != nil { 562 t.Fatalf("想定外のエラーが発生した: %s") 563 } 564 565 loadTestConfig() 566 nwk.setJobEx(jeMap) 567 568 task1 := nwk.elements["task1"].(*Job) 569 if task1.Node != "node1" { 570 t.Errorf("ノード名[%s]は想定と違っている", task1.Node) 571 } 572 if task1.Port != 1 { 573 t.Errorf("ポート番号[%d]は想定と違っている", task1.Port) 574 } 575 if task1.FilePath != "path1" { 576 t.Errorf("実行ファイル名[%s]は想定と違っている", task1.FilePath) 577 } 578 if task1.Param != "param1" { 579 t.Errorf("実行時パラメータ[%s]は想定と違っている", task1.Param) 580 } 581 if task1.Env != "env1" { 582 t.Errorf("ノード名[%s]は想定と違っている", task1.Env) 583 } 584 if task1.Workspace != "work1" { 585 t.Errorf("作業フォルダ[%s]は想定と違っている", task1.Workspace) 586 } 587 if task1.WrnRC != 11 { 588 t.Errorf("警告条件コード[%d]は想定と違っている", task1.WrnRC) 589 } 590 if task1.WrnPtn != "warn1" { 591 t.Errorf("警告出力パターン[%s]は想定と違っている", task1.WrnPtn) 592 } 593 if task1.ErrRC != 21 { 594 t.Errorf("異常条件コード[%d]は想定と違っている", task1.ErrRC) 595 } 596 if task1.ErrPtn != "err1" { 597 t.Errorf("異常出力パターン[%s]は想定と違っている", task1.ErrPtn) 598 } 599 if task1.Timeout != 3600 { 600 t.Errorf("実行タイムアウト時間[%d]は想定と違っている", task1.Timeout) 601 } 602 if task1.SecondaryNode != "secondary" { 603 t.Errorf("ノード名[%s]は想定と違っている", task1.SecondaryNode) 604 } 605 if task1.SecondaryPort != 2 { 606 t.Errorf("ポート番号[%d]は想定と違っている", task1.SecondaryPort) 607 } 608 609 task2 := nwk.elements["task2"].(*Job) 610 if task2.Node != "node2" { 611 t.Errorf("ノード名[%s]は想定と違っている", task2.Node) 612 } 613 } 614 615 func TestSetJobEx_ゼロ値が挿入されたカラムにデフォルト値をセットする(t *testing.T) { 616 proc := &parser.Process{ 617 Start: make([]parser.StartEvent, 1), 618 End: make([]parser.EndEvent, 1), 619 Task: make([]parser.ServiceTask, 2), 620 Gateway: make([]parser.ParallelGateway, 0), 621 Flow: make([]parser.SequenceFlow, 0), 622 } 623 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 624 625 je1 := parser.NewJobEx() 626 jeMap := make(map[string]*parser.JobEx) 627 jeMap["job1"] = je1 628 629 nwk, _ := NewNetwork("test") 630 err := nwk.setElements(proc) 631 if err != nil { 632 t.Fatalf("想定外のエラーが発生した: %s") 633 } 634 635 loadTestConfig() 636 nwk.setJobEx(jeMap) 637 638 task1 := nwk.elements["task1"].(*Job) 639 if task1.Node != "localhost" { 640 t.Errorf("ノード名[%s]は想定と違っている", task1.Node) 641 } 642 if task1.Port != 2015 { 643 t.Errorf("ポート番号[%d]は想定と違っている", task1.Port) 644 } 645 if task1.FilePath != "job1" { 646 t.Errorf("実行ファイル名[%s]は想定と違っている", task1.FilePath) 647 } 648 if task1.Param != "" { 649 t.Errorf("実行時パラメータ[%s]は想定と違っている", task1.Param) 650 } 651 if task1.Env != "" { 652 t.Errorf("ノード名[%s]は想定と違っている", task1.Env) 653 } 654 if task1.Workspace != "" { 655 t.Errorf("作業フォルダ[%s]は想定と違っている", task1.Workspace) 656 } 657 if task1.WrnRC != 0 { 658 t.Errorf("警告条件コード[%d]は想定と違っている", task1.WrnRC) 659 } 660 if task1.WrnPtn != "" { 661 t.Errorf("警告出力パターン[%s]は想定と違っている", task1.WrnPtn) 662 } 663 if task1.ErrRC != 0 { 664 t.Errorf("異常条件コード[%d]は想定と違っている", task1.ErrRC) 665 } 666 if task1.ErrPtn != "" { 667 t.Errorf("異常出力パターン[%s]は想定と違っている", task1.ErrPtn) 668 } 669 if task1.Timeout != 1800 { 670 t.Errorf("実行タイムアウト時間[%d]は想定と違っている", task1.Timeout) 671 } 672 if task1.SecondaryNode != "" { 673 t.Errorf("ノード名[%s]は想定と違っている", task1.SecondaryNode) 674 } 675 if task1.SecondaryPort != 0 { 676 t.Errorf("ポート番号[%d]は想定と違っている", task1.SecondaryPort) 677 } 678 } 679 680 func TestSetJobEx_ゲートウェイには影響を与えない(t *testing.T) { 681 je1 := new(parser.JobEx) 682 je1.Node = "node1" 683 je1.Port = 1 684 je1.FilePath = "path1" 685 je1.Param = "param1" 686 je1.Env = "env1" 687 je1.Workspace = "work1" 688 je1.WrnRC = 11 689 je1.WrnPtn = "warn1" 690 je1.ErrRC = 21 691 je1.ErrPtn = "err1" 692 je1.TimeoutMin = 60 693 je1.SecondaryNode = "secondary" 694 je1.SecondaryPort = 2 695 696 jeMap := make(map[string]*parser.JobEx) 697 jeMap["job1"] = je1 698 699 n, _ := NewNetwork("test") 700 gw1 := NewGateway("job1") 701 original := *gw1 702 n.elements["job1"] = gw1 703 704 n.setJobEx(jeMap) 705 gw1After := n.elements["job1"].(*Gateway) 706 if !reflect.DeepEqual(original, *gw1After) { 707 t.Error("Gatewayが変更された。") 708 t.Log("setJobEx前: %v", original) 709 t.Log("setJobEx後: %v", *gw1After) 710 } 711 } 712 713 func TestDetectFlowError_正常なフローではエラーを検出しない(t *testing.T) { 714 proc := &parser.Process{ 715 Start: make([]parser.StartEvent, 1), 716 End: make([]parser.EndEvent, 1), 717 Task: make([]parser.ServiceTask, 3), 718 Gateway: make([]parser.ParallelGateway, 2), 719 Flow: make([]parser.SequenceFlow, 7), 720 } 721 proc.Start[0] = parser.StartEvent{ID: "start"} 722 proc.End[0] = parser.EndEvent{ID: "end"} 723 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 724 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 725 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 726 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 727 proc.Gateway[1] = parser.ParallelGateway{ID: "gw2"} 728 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 729 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 730 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 731 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "task3"} 732 proc.Flow[4] = parser.SequenceFlow{From: "task2", To: "gw2"} 733 proc.Flow[5] = parser.SequenceFlow{From: "task3", To: "gw2"} 734 proc.Flow[6] = parser.SequenceFlow{From: "gw2", To: "end"} 735 736 nwk, _ := NewNetwork("test") 737 nwk.setElements(proc) 738 err := nwk.DetectFlowError() 739 if err != nil { 740 t.Fatalf("想定外のエラーが検出された: %s", err) 741 } 742 } 743 744 func TestDetectFlowError_分岐しないゲートウェイは正常なフローとして許容する(t *testing.T) { 745 proc := &parser.Process{ 746 Start: make([]parser.StartEvent, 1), 747 End: make([]parser.EndEvent, 1), 748 Task: make([]parser.ServiceTask, 2), 749 Gateway: make([]parser.ParallelGateway, 2), 750 Flow: make([]parser.SequenceFlow, 5), 751 } 752 proc.Start[0] = parser.StartEvent{ID: "start"} 753 proc.End[0] = parser.EndEvent{ID: "end"} 754 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 755 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 756 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 757 proc.Gateway[1] = parser.ParallelGateway{ID: "gw2"} 758 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 759 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 760 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 761 proc.Flow[3] = parser.SequenceFlow{From: "task2", To: "gw2"} 762 proc.Flow[4] = parser.SequenceFlow{From: "gw2", To: "end"} 763 764 nwk, _ := NewNetwork("test") 765 nwk.setElements(proc) 766 err := nwk.DetectFlowError() 767 if err != nil { 768 t.Fatalf("想定外のエラーが検出された: %s", err) 769 } 770 } 771 772 func TestDetectFlowError_startEventがジョブやゲートウェイと接続されていない場合はエラー(t *testing.T) { 773 proc := &parser.Process{ 774 Start: make([]parser.StartEvent, 1), 775 End: make([]parser.EndEvent, 1), 776 Task: make([]parser.ServiceTask, 1), 777 Gateway: make([]parser.ParallelGateway, 0), 778 Flow: make([]parser.SequenceFlow, 1), 779 } 780 proc.Start[0] = parser.StartEvent{ID: "start"} 781 proc.End[0] = parser.EndEvent{ID: "end"} 782 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 783 proc.Flow[0] = parser.SequenceFlow{From: "task1", To: "end"} 784 785 nwk, _ := NewNetwork("test") 786 nwk.setElements(proc) 787 err := nwk.DetectFlowError() 788 if err == nil { 789 t.Fatalf("エラーが検出されていない。") 790 } 791 } 792 793 func TestDetectFlowError_endEventがジョブやゲートウェイと接続されていない場合はエラー(t *testing.T) { 794 proc := &parser.Process{ 795 Start: make([]parser.StartEvent, 1), 796 End: make([]parser.EndEvent, 1), 797 Task: make([]parser.ServiceTask, 1), 798 Gateway: make([]parser.ParallelGateway, 0), 799 Flow: make([]parser.SequenceFlow, 1), 800 } 801 proc.Start[0] = parser.StartEvent{ID: "start"} 802 proc.End[0] = parser.EndEvent{ID: "end"} 803 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 804 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 805 806 nwk, _ := NewNetwork("test") 807 nwk.setElements(proc) 808 err := nwk.DetectFlowError() 809 if err == nil { 810 t.Fatalf("エラーが検出されていない。") 811 } 812 } 813 814 func TestDetectFlowError_startEventに接続していない始端がある場合はエラー(t *testing.T) { 815 proc := &parser.Process{ 816 Start: make([]parser.StartEvent, 1), 817 End: make([]parser.EndEvent, 1), 818 Task: make([]parser.ServiceTask, 2), 819 Gateway: make([]parser.ParallelGateway, 1), 820 Flow: make([]parser.SequenceFlow, 4), 821 } 822 proc.Start[0] = parser.StartEvent{ID: "start"} 823 proc.End[0] = parser.EndEvent{ID: "end"} 824 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 825 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 826 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 827 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 828 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 829 proc.Flow[2] = parser.SequenceFlow{From: "task2", To: "gw1"} 830 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "end"} 831 832 nwk, _ := NewNetwork("test") 833 nwk.setElements(proc) 834 err := nwk.DetectFlowError() 835 if err == nil { 836 t.Fatalf("エラーが検出されていない。") 837 } 838 } 839 840 func TestDetectFlowError_endEventとの接続要素に別の後続要素がある場合はエラー(t *testing.T) { 841 proc := &parser.Process{ 842 Start: make([]parser.StartEvent, 1), 843 End: make([]parser.EndEvent, 1), 844 Task: make([]parser.ServiceTask, 2), 845 Gateway: make([]parser.ParallelGateway, 0), 846 Flow: make([]parser.SequenceFlow, 2), 847 } 848 proc.Start[0] = parser.StartEvent{ID: "start"} 849 proc.End[0] = parser.EndEvent{ID: "end"} 850 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 851 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 852 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 853 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "end"} 854 855 nwk, _ := NewNetwork("test") 856 nwk.setElements(proc) 857 task1 := nwk.elements["task1"].(*Job) 858 task1.Next = nwk.elements["task2"] 859 860 err := nwk.DetectFlowError() 861 if err == nil { 862 t.Fatalf("エラーが検出されていない。") 863 } 864 } 865 866 func TestDetectFlowError_endEventに接続していない終端がある場合はエラー_分岐外(t *testing.T) { 867 proc := &parser.Process{ 868 Start: make([]parser.StartEvent, 1), 869 End: make([]parser.EndEvent, 1), 870 Task: make([]parser.ServiceTask, 2), 871 Gateway: make([]parser.ParallelGateway, 0), 872 Flow: make([]parser.SequenceFlow, 2), 873 } 874 proc.Start[0] = parser.StartEvent{ID: "start"} 875 proc.End[0] = parser.EndEvent{ID: "end"} 876 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 877 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 878 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 879 proc.Flow[1] = parser.SequenceFlow{From: "task2", To: "end"} 880 881 nwk, _ := NewNetwork("test") 882 nwk.setElements(proc) 883 err := nwk.DetectFlowError() 884 if err == nil { 885 t.Fatalf("エラーが検出されていない。") 886 } 887 } 888 889 func TestDetectFlowError_endEventに接続していない終端がある場合はエラー_分岐内(t *testing.T) { 890 proc := &parser.Process{ 891 Start: make([]parser.StartEvent, 1), 892 End: make([]parser.EndEvent, 1), 893 Task: make([]parser.ServiceTask, 3), 894 Gateway: make([]parser.ParallelGateway, 2), 895 Flow: make([]parser.SequenceFlow, 6), 896 } 897 proc.Start[0] = parser.StartEvent{ID: "start"} 898 proc.End[0] = parser.EndEvent{ID: "end"} 899 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 900 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 901 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 902 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 903 proc.Gateway[1] = parser.ParallelGateway{ID: "gw2"} 904 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 905 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 906 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 907 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "task3"} 908 proc.Flow[4] = parser.SequenceFlow{From: "task2", To: "gw2"} 909 proc.Flow[5] = parser.SequenceFlow{From: "gw2", To: "end"} 910 911 nwk, _ := NewNetwork("test") 912 nwk.setElements(proc) 913 err := nwk.DetectFlowError() 914 if err == nil { 915 t.Fatalf("エラーが検出されていない。") 916 } 917 } 918 919 func TestDetectFlowError_分岐を結合せずに終了した場合はエラー(t *testing.T) { 920 proc := &parser.Process{ 921 Start: make([]parser.StartEvent, 1), 922 End: make([]parser.EndEvent, 1), 923 Task: make([]parser.ServiceTask, 3), 924 Gateway: make([]parser.ParallelGateway, 1), 925 Flow: make([]parser.SequenceFlow, 6), 926 } 927 proc.Start[0] = parser.StartEvent{ID: "start"} 928 proc.End[0] = parser.EndEvent{ID: "end"} 929 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 930 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 931 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 932 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 933 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 934 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 935 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 936 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "task3"} 937 proc.Flow[4] = parser.SequenceFlow{From: "task2", To: "end"} 938 proc.Flow[5] = parser.SequenceFlow{From: "task3", To: "end"} 939 940 nwk, _ := NewNetwork("test") 941 nwk.setElements(proc) 942 err := nwk.DetectFlowError() 943 if err == nil { 944 t.Fatalf("エラーが検出されていない。") 945 } 946 } 947 948 func TestDetectFlowError_分岐がネストした場合はエラー(t *testing.T) { 949 proc := &parser.Process{ 950 Start: make([]parser.StartEvent, 1), 951 End: make([]parser.EndEvent, 1), 952 Task: make([]parser.ServiceTask, 4), 953 Gateway: make([]parser.ParallelGateway, 3), 954 Flow: make([]parser.SequenceFlow, 10), 955 } 956 proc.Start[0] = parser.StartEvent{ID: "start"} 957 proc.End[0] = parser.EndEvent{ID: "end"} 958 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 959 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 960 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 961 proc.Task[3] = parser.ServiceTask{ID: "task4", Name: "job4"} 962 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 963 proc.Gateway[1] = parser.ParallelGateway{ID: "gw2"} 964 proc.Gateway[2] = parser.ParallelGateway{ID: "gw3"} 965 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 966 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 967 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 968 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "gw2"} 969 proc.Flow[4] = parser.SequenceFlow{From: "gw2", To: "task3"} 970 proc.Flow[5] = parser.SequenceFlow{From: "gw2", To: "task4"} 971 proc.Flow[6] = parser.SequenceFlow{From: "task2", To: "gw3"} 972 proc.Flow[7] = parser.SequenceFlow{From: "task3", To: "gw3"} 973 proc.Flow[8] = parser.SequenceFlow{From: "task4", To: "gw3"} 974 proc.Flow[9] = parser.SequenceFlow{From: "gw3", To: "end"} 975 976 nwk, _ := NewNetwork("test") 977 nwk.setElements(proc) 978 err := nwk.DetectFlowError() 979 if err == nil { 980 t.Fatalf("エラーが検出されていない。") 981 } 982 } 983 984 func TestDetectFlowError_定義外の型の要素が発見されたらエラー_分岐外(t *testing.T) { 985 proc := &parser.Process{ 986 Start: make([]parser.StartEvent, 1), 987 End: make([]parser.EndEvent, 1), 988 Task: make([]parser.ServiceTask, 1), 989 Flow: make([]parser.SequenceFlow, 3), 990 } 991 proc.Start[0] = parser.StartEvent{ID: "start"} 992 proc.End[0] = parser.EndEvent{ID: "end"} 993 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 994 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 995 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "end"} 996 997 nwk, _ := NewNetwork("test") 998 nwk.setElements(proc) 999 1000 task1 := nwk.elements["task1"].(*Job) 1001 undef := new(undefinedElement) 1002 nwk.elements[undef.ID()] = undef 1003 undef.AddNext(task1) 1004 nwk.Start = undef 1005 1006 err := nwk.DetectFlowError() 1007 if err == nil { 1008 t.Fatalf("エラーが検出されていない。") 1009 } 1010 } 1011 1012 func TestDetectFlowError_定義外の型の要素が発見されたらエラー_分岐内(t *testing.T) { 1013 proc := &parser.Process{ 1014 Start: make([]parser.StartEvent, 1), 1015 End: make([]parser.EndEvent, 1), 1016 Task: make([]parser.ServiceTask, 3), 1017 Gateway: make([]parser.ParallelGateway, 2), 1018 Flow: make([]parser.SequenceFlow, 7), 1019 } 1020 proc.Start[0] = parser.StartEvent{ID: "start"} 1021 proc.End[0] = parser.EndEvent{ID: "end"} 1022 proc.Task[0] = parser.ServiceTask{ID: "task1", Name: "job1"} 1023 proc.Task[1] = parser.ServiceTask{ID: "task2", Name: "job2"} 1024 proc.Task[2] = parser.ServiceTask{ID: "task3", Name: "job3"} 1025 proc.Gateway[0] = parser.ParallelGateway{ID: "gw1"} 1026 proc.Gateway[1] = parser.ParallelGateway{ID: "gw2"} 1027 proc.Flow[0] = parser.SequenceFlow{From: "start", To: "task1"} 1028 proc.Flow[1] = parser.SequenceFlow{From: "task1", To: "gw1"} 1029 proc.Flow[2] = parser.SequenceFlow{From: "gw1", To: "task2"} 1030 proc.Flow[3] = parser.SequenceFlow{From: "gw1", To: "task3"} 1031 proc.Flow[4] = parser.SequenceFlow{From: "task2", To: "gw2"} 1032 proc.Flow[5] = parser.SequenceFlow{From: "task3", To: "gw2"} 1033 proc.Flow[6] = parser.SequenceFlow{From: "gw2", To: "end"} 1034 1035 nwk, _ := NewNetwork("test") 1036 nwk.setElements(proc) 1037 1038 task2 := nwk.elements["task2"].(*Job) 1039 undef := new(undefinedElement) 1040 1041 nwk.elements[undef.ID()] = undef 1042 undef.AddNext(task2.Next) 1043 task2.Next = undef 1044 1045 err := nwk.DetectFlowError() 1046 if err == nil { 1047 t.Fatalf("エラーが検出されていない。") 1048 } 1049 } 1050 1051 func TestNetworkRun_ネットワークを実行できる(t *testing.T) { 1052 loadTestConfig() 1053 1054 n, _ := NewNetwork("test") 1055 j1 := generateTestJob(1) 1056 j2 := generateTestJob(2) 1057 j3 := generateTestJob(3) 1058 j4 := generateTestJob(4) 1059 g1 := NewGateway("gwid1") 1060 g2 := NewGateway("gwid2") 1061 n.elements[j1.ID()] = j1 1062 n.elements[j2.ID()] = j2 1063 n.elements[j3.ID()] = j3 1064 n.elements[j4.ID()] = j4 1065 n.elements[g1.ID()] = g1 1066 n.elements[g2.ID()] = g2 1067 1068 n.Start = j1 1069 j1.AddNext(g1) 1070 g1.AddNext(j2) 1071 g1.AddNext(j3) 1072 j2.AddNext(g2) 1073 j3.AddNext(g2) 1074 g2.AddNext(j4) 1075 n.End = j4 1076 1077 if err := n.Run(); err != nil { 1078 t.Fatalf("想定外のエラーが発生した: %s", err) 1079 } 1080 if !j1.isExecuted { 1081 t.Errorf("j1が実行されていない。") 1082 } 1083 if !j2.isExecuted { 1084 t.Errorf("j2が実行されていない。") 1085 } 1086 if !j3.isExecuted { 1087 t.Errorf("j3が実行されていない。") 1088 } 1089 if !j4.isExecuted { 1090 t.Errorf("j4が実行されていない。") 1091 } 1092 } 1093 1094 func TestNetworkRun_開始要素がnilの場合はエラー(t *testing.T) { 1095 loadTestConfig() 1096 1097 n, _ := NewNetwork("test") 1098 j1 := generateTestJob(1) 1099 j1.hasError = true 1100 n.elements[j1.ID()] = j1 1101 1102 n.End = j1 1103 1104 if err := n.Run(); err == nil { 1105 t.Error("エラーが発生しなかった。") 1106 } 1107 } 1108 1109 func TestNetworkRun_ジョブネットワークの開始処理で失敗したらエラー(t *testing.T) { 1110 config.DB.DBFile = "" 1111 1112 n, _ := NewNetwork("test") 1113 j1 := generateTestJob(1) 1114 n.elements[j1.ID()] = j1 1115 1116 n.Start = j1 1117 n.End = j1 1118 1119 if err := n.Run(); err == nil { 1120 t.Error("エラーが発生しなかった。") 1121 } 1122 if j1.isExecuted { 1123 t.Error("j1が実行された。") 1124 } 1125 } 1126 1127 func TestNetworkRun_ネットワーク中のジョブが異常終了したらエラー(t *testing.T) { 1128 loadTestConfig() 1129 1130 n, _ := NewNetwork("test") 1131 j1 := generateTestJob(1) 1132 j1.hasError = true 1133 n.elements[j1.ID()] = j1 1134 1135 n.Start = j1 1136 n.End = j1 1137 1138 if err := n.Run(); err == nil { 1139 t.Error("エラーが発生しなかった。") 1140 } 1141 } 1142 1143 func TestNetworkRun_ジョブネットワークがendEvent以外で終端したらエラー(t *testing.T) { 1144 loadTestConfig() 1145 1146 n, _ := NewNetwork("test") 1147 j1 := generateTestJob(1) 1148 n.elements[j1.ID()] = j1 1149 1150 n.Start = j1 1151 1152 if err := n.Run(); err == nil { 1153 t.Error("エラーが発生しなかった。") 1154 } 1155 }