github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/servant/job/job_windows_test.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 shanxia 3 4 package job 5 6 import ( 7 "bufio" 8 "os" 9 "strings" 10 "testing" 11 12 "github.com/unirita/cuto/db" 13 "github.com/unirita/cuto/message" 14 ) 15 16 const testServantIni = "servant.ini" 17 18 func TestDoJobRequest_ジョブが正常に実行できる(t *testing.T) { 19 req := &message.Request{ 20 Type: "request", 21 NID: 101, 22 JID: "serviceTask_001", 23 Path: "job.bat", 24 Param: "XX 0", 25 Env: "TESTENV1=ENVENV+ENV0=AAAAA+ENV2=BBBB", 26 Workspace: "", 27 WarnRC: 4, 28 WarnStr: "WARN", 29 ErrRC: 12, 30 ErrStr: "ERR", 31 } 32 33 stCh := make(chan string, 1) 34 res := DoJobRequest(req, conf, stCh) 35 if len(<-stCh) == 0 { 36 t.Error("ジョブ開始時間が送信されていない.") 37 } 38 close(stCh) 39 40 if req.NID != res.NID { 41 t.Error("NIDがリクエストとレスポンスで異なる.") 42 } 43 if req.JID != res.JID { 44 t.Error("IDがリクエストとレスポンスで異なる.") 45 } 46 if res.RC != 0 { 47 t.Errorf("ジョブが正常終了するはずなのに異常終了した. - ", res.RC) 48 } 49 if len(res.Detail) > 0 { 50 t.Error("ジョブが正常終了するはずなのに、エラーメッセージがある.", res.Detail) 51 } 52 if len(res.Var) == 0 { 53 t.Error("テストコード側の変数機能が未実装.") 54 } else if res.Var != "ENVENV XX" { 55 t.Errorf("変数の値が不正[%s].もしくは引数渡しに問題あり.", res.Var) 56 } 57 if len(res.St) == 0 { 58 t.Error("ジョブ開始時間が無い.") 59 } 60 if len(res.Et) == 0 { 61 t.Error("ジョブ終了時間が無い.") 62 } 63 64 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 65 if err != nil { 66 t.Error("ジョブログがない。", err.Error()) 67 } 68 defer file.Close() 69 scanner := bufio.NewScanner(file) 70 var env1, env2, env3 bool 71 for scanner.Scan() { 72 line := scanner.Text() 73 if -1 != strings.Index(line, "ENVENV") { 74 env1 = true 75 } else if -1 != strings.Index(line, "AAAAA") { 76 env2 = true 77 } else if -1 != strings.Index(line, "BBBB") { 78 env3 = true 79 } 80 } 81 if !env1 || !env2 || !env3 { 82 t.Error("環境変数が正常に渡っていない可能性があります。", env1, env2, env3) 83 } 84 } 85 86 func TestDoJobRequest_パス指定あり引数なしジョブが正常に実行できる(t *testing.T) { 87 req := &message.Request{ 88 Type: "request", 89 NID: 102, 90 JID: "serviceTask_002", 91 Path: "job.bat", 92 Param: "", 93 Env: "TESTENV1=ENVENVENV", 94 Workspace: "C:\\Go", 95 WarnRC: 4, 96 WarnStr: "WARN", 97 ErrRC: 12, 98 ErrStr: "ERR", 99 } 100 101 stCh := make(chan string, 1) 102 res := DoJobRequest(req, conf, stCh) 103 close(stCh) 104 if res.RC != 0 { 105 t.Error("ジョブが正常終了するはずなのに異常終了した.") 106 } 107 if len(res.Detail) > 0 { 108 t.Error("ジョブが正常終了するはずなのに、エラーメッセージがある.", res.Detail) 109 } 110 if len(res.Var) == 0 { 111 t.Error("変数なし.") 112 } else if res.Var != "ENVENVENV " { 113 t.Errorf("変数内容が不正.[%s]", res.Var) 114 } 115 if len(res.St) == 0 { 116 t.Error("ジョブ開始時間が無い.") 117 } 118 if len(res.Et) == 0 { 119 t.Error("ジョブ終了時間が無い.") 120 } 121 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 122 if err != nil { 123 t.Error("ジョブログがない。", err.Error()) 124 } 125 defer file.Close() 126 } 127 128 func TestDoJobRequest_存在しないジョブ(t *testing.T) { 129 req := &message.Request{ 130 Type: "request", 131 NID: 103, 132 JID: "serviceTask_003", 133 Path: "nothing.bat", 134 Param: "", 135 Env: "TESTENV1=ENVENVENV", 136 Workspace: "C:\\Go", 137 WarnRC: 4, 138 WarnStr: "WARN", 139 ErrRC: 12, 140 ErrStr: "ERR", 141 } 142 143 stCh := make(chan string, 1) 144 res := DoJobRequest(req, conf, stCh) 145 close(stCh) 146 if res.RC != 0 { 147 t.Error("実行失敗の場合、RCは0のはず.") 148 } 149 if len(res.Detail) == 0 { 150 t.Error("異常終了メッセージが存在しない.") 151 } 152 if len(res.Var) > 0 { 153 t.Error("テストコード側の変数機能が未実装.") 154 } 155 if len(res.St) != 0 { 156 t.Error("ジョブ開始時間がある.") 157 } 158 if len(res.Et) != 0 { 159 t.Error("ジョブ終了時間がある.") 160 } 161 } 162 163 func TestDoJobRequest_RCで警告終了するジョブ_閾値と同じ(t *testing.T) { 164 req := &message.Request{ 165 Type: "request", 166 NID: 104, 167 JID: "serviceTask_004", 168 Path: "job.bat", 169 Param: "X 4", 170 Env: "TESTENV1=ENVENVENV", 171 Workspace: "C:\\Go", 172 WarnRC: 4, 173 WarnStr: "WARN", 174 ErrRC: 12, 175 ErrStr: "ERR", 176 } 177 178 stCh := make(chan string, 1) 179 res := DoJobRequest(req, conf, stCh) 180 close(stCh) 181 if res.RC != 4 { 182 t.Error("RCは4のはず.") 183 } 184 if len(res.Detail) == 0 { 185 t.Error("異常終了メッセージが存在しない.") 186 } else if res.Detail != detailWarnRC { 187 t.Errorf("想定外のメッセージ - %s", res.Detail) 188 } 189 if len(res.Var) == 0 { 190 t.Error("変数なし.") 191 } else if res.Var != "ENVENVENV X" { 192 t.Errorf("変数内容が不正.[%s]", res.Var) 193 } 194 if len(res.St) == 0 { 195 t.Error("ジョブ開始時間がない.") 196 } 197 if len(res.Et) == 0 { 198 t.Error("ジョブ終了時間がない.") 199 } 200 if res.Stat != db.WARN { 201 t.Error("statが警告終了ではない") 202 } 203 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 204 if err != nil { 205 t.Error("ジョブログが存在しない.") 206 } 207 defer file.Close() 208 } 209 210 func TestDoJobRequest_RCで警告終了するがチェックしないジョブ(t *testing.T) { 211 req := &message.Request{ 212 Type: "request", 213 NID: 105, 214 JID: "serviceTask_005", 215 Path: "job.bat", 216 Param: "X 4", 217 Env: "TESTENV1=ENVENVENV", 218 Workspace: "C:\\Go", 219 WarnRC: 0, 220 WarnStr: "WARN", 221 ErrRC: 12, 222 ErrStr: "ERR", 223 } 224 225 stCh := make(chan string, 1) 226 res := DoJobRequest(req, conf, stCh) 227 close(stCh) 228 if res.RC != 4 { 229 t.Error("RCは4のはず.") 230 } 231 if len(res.Detail) != 0 { 232 t.Error("異常終了メッセージが存在しない.") 233 } 234 if len(res.Var) == 0 { 235 t.Error("テストコード側の変数機能が未実装.") 236 } 237 if len(res.St) == 0 { 238 t.Error("ジョブ開始時間がない.") 239 } 240 if len(res.Et) == 0 { 241 t.Error("ジョブ終了時間がない.") 242 } 243 if res.Stat != db.NORMAL { 244 t.Error("statが正常終了ではない") 245 } 246 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 247 if err != nil { 248 t.Error("ジョブログが存在しない.") 249 } 250 defer file.Close() 251 } 252 253 func TestDoJobRequest_RCで警告終了しないジョブ_閾値未満(t *testing.T) { 254 req := &message.Request{ 255 Type: "request", 256 NID: 106, 257 JID: "serviceTask_006", 258 Path: "job.bat", 259 Param: "X 3", 260 Env: "TESTENV1=ENVENVENV", 261 Workspace: "C:\\Go", 262 WarnRC: 4, 263 WarnStr: "WARN", 264 ErrRC: 12, 265 ErrStr: "ERR", 266 } 267 268 stCh := make(chan string, 1) 269 res := DoJobRequest(req, conf, stCh) 270 close(stCh) 271 if res.RC != 3 { 272 t.Error("RCは3のはず.") 273 } 274 if len(res.Detail) != 0 { 275 t.Error("異常終了メッセージが存在しない.") 276 } 277 if len(res.Var) == 0 { 278 t.Error("変数なし.") 279 } else if res.Var != "ENVENVENV X" { 280 t.Errorf("変数内容が不正.[%s]", res.Var) 281 } 282 if len(res.St) == 0 { 283 t.Error("ジョブ開始時間がない.") 284 } 285 if len(res.Et) == 0 { 286 t.Error("ジョブ終了時間がない.") 287 } 288 if res.Stat != db.NORMAL { 289 t.Error("statが正常終了ではない") 290 } 291 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 292 if err != nil { 293 t.Error("ジョブログが存在しない.") 294 } 295 defer file.Close() 296 } 297 298 func TestDoJobRequest_標準出力で警告終了するジョブ_RC確認なし(t *testing.T) { 299 req := &message.Request{ 300 Type: "request", 301 NID: 107, 302 JID: "serviceTask_007", 303 Path: "job.bat", 304 Param: "AB 0", 305 Env: "TESTENV1=!!!WARNING!!!", 306 Workspace: "C:\\Go", 307 WarnRC: 0, 308 WarnStr: "WARN", 309 ErrRC: 0, 310 ErrStr: "ERR", 311 } 312 313 stCh := make(chan string, 1) 314 res := DoJobRequest(req, conf, stCh) 315 close(stCh) 316 if res.RC != 0 { 317 t.Errorf("RCは0のはず. RC(%v)", res.RC) 318 } 319 if len(res.Detail) == 0 { 320 t.Error("異常終了メッセージが存在しない.") 321 } else if res.Detail != detailWarnPtn { 322 t.Errorf("想定外のメッセージ - %v", res.Detail) 323 } 324 if len(res.Var) == 0 { 325 t.Error("変数なし.") 326 } else if res.Var != "!!!WARNING!!! AB" { 327 t.Errorf("変数内容が不正.[%s]", res.Var) 328 } 329 if len(res.St) == 0 { 330 t.Error("ジョブ開始時間がない.") 331 } 332 if len(res.Et) == 0 { 333 t.Error("ジョブ終了時間がない.") 334 } 335 if res.Stat != db.WARN { 336 t.Error("statが警告終了ではない") 337 } 338 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 339 if err != nil { 340 t.Error("ジョブログが存在しない.") 341 } 342 defer file.Close() 343 } 344 345 func TestDoJobRequest_標準出力で警告終了するがチェックしないジョブ(t *testing.T) { 346 req := &message.Request{ 347 Type: "request", 348 NID: 108, 349 JID: "serviceTask_008", 350 Path: "job.bat", 351 Param: "A", 352 Env: "TESTENV1=!!!WARNING!!!", 353 Workspace: "C:\\Go", 354 WarnRC: 0, 355 WarnStr: "", 356 ErrRC: 12, 357 ErrStr: "ERR", 358 } 359 360 stCh := make(chan string, 1) 361 res := DoJobRequest(req, conf, stCh) 362 close(stCh) 363 if res.RC != 0 { 364 t.Error("RCは0のはず.") 365 } 366 if len(res.Detail) != 0 { 367 t.Error("異常終了メッセージが存在しない.") 368 } 369 if len(res.Var) == 0 { 370 t.Error("変数なし.") 371 } else if res.Var != "!!!WARNING!!! A" { 372 t.Errorf("変数内容が不正.[%s]", res.Var) 373 } 374 if len(res.St) == 0 { 375 t.Error("ジョブ開始時間がない.") 376 } 377 if len(res.Et) == 0 { 378 t.Error("ジョブ終了時間がない.") 379 } 380 if res.Stat != db.NORMAL { 381 t.Error("statが正常終了ではない") 382 } 383 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 384 if err != nil { 385 t.Error("ジョブログが存在しない.") 386 } 387 defer file.Close() 388 } 389 390 func TestDoJobRequest_JSジョブが正常に実行できる(t *testing.T) { 391 req := &message.Request{ 392 Type: "request", 393 NID: 109, 394 JID: "serviceTask_009", 395 Path: "job.js", 396 Param: "A B", 397 Env: "", 398 Workspace: "C:\\Go", 399 WarnRC: 4, 400 WarnStr: "WARN", 401 ErrRC: 12, 402 ErrStr: "ERR", 403 } 404 405 stCh := make(chan string, 1) 406 res := DoJobRequest(req, conf, stCh) 407 close(stCh) 408 if res.RC != 0 { 409 t.Errorf("ジョブが正常終了するはずなのに異常終了した. RC(%v)", res.RC) 410 } 411 if len(res.Detail) > 0 { 412 t.Error("ジョブが正常終了するはずなのに、エラーメッセージがある.", res.Detail) 413 } 414 if len(res.Var) == 0 { 415 t.Error("変数なし.") 416 } else if res.Var != "Argument2=B" { 417 t.Errorf("変数内容が不正.[%s]", res.Var) 418 } 419 if len(res.St) == 0 { 420 t.Error("ジョブ開始時間が無い.") 421 } 422 if len(res.Et) == 0 { 423 t.Error("ジョブ終了時間が無い.") 424 } 425 if strings.Index(res.Et, "20140330110120") != -1 { 426 t.Error("テストのテスト") 427 } 428 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 429 if err != nil { 430 t.Error("ジョブログがない。", err.Error()) 431 } 432 defer file.Close() 433 } 434 435 func TestDoJobRequest_標準エラー出力で警告終了するVBSジョブ_RC確認なし(t *testing.T) { 436 req := &message.Request{ 437 Type: "request", 438 NID: 110, 439 JID: "serviceTask_010", 440 Path: "stderr.vbs", 441 Param: "!!!WARN", 442 Env: "", 443 Workspace: "C:\\Go", 444 WarnRC: 4, 445 WarnStr: "WARN", 446 ErrRC: 12, 447 ErrStr: "ERR", 448 } 449 450 stCh := make(chan string, 1) 451 res := DoJobRequest(req, conf, stCh) 452 close(stCh) 453 if res.RC != 0 { 454 t.Error("RCは0のはず.") 455 } 456 if len(res.Detail) == 0 { 457 t.Error("異常終了メッセージが存在しない.") 458 } else if res.Detail != detailWarnPtn { 459 t.Errorf("想定外のメッセージ - %v", res.Detail) 460 } 461 if len(res.Var) == 0 { 462 t.Error("変数なし.") 463 } else if res.Var != "Argument1=!!!WARN" { 464 t.Errorf("変数内容が不正.[%s]", res.Var) 465 } 466 if len(res.St) == 0 { 467 t.Error("ジョブ開始時間がない.") 468 } 469 if len(res.Et) == 0 { 470 t.Error("ジョブ終了時間がない.") 471 } 472 if res.Stat != db.WARN { 473 t.Error("statが警告終了ではない") 474 } 475 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 476 if err != nil { 477 t.Error("ジョブログが存在しない.") 478 } 479 defer file.Close() 480 } 481 482 func TestDoJobRequest_RCで異常終了するジョブ_閾値と同じ(t *testing.T) { 483 req := &message.Request{ 484 Type: "request", 485 NID: 111, 486 JID: "serviceTask_011", 487 Path: "job.bat", 488 Param: "X 12", 489 Env: "TESTENV1=ENVENVENV", 490 Workspace: "C:\\Go", 491 WarnRC: 4, 492 WarnStr: "WARN", 493 ErrRC: 12, 494 ErrStr: "ERR", 495 } 496 497 stCh := make(chan string, 1) 498 res := DoJobRequest(req, conf, stCh) 499 close(stCh) 500 if res.RC != 12 { 501 t.Error("RCは12のはず.") 502 } 503 if len(res.Detail) == 0 { 504 t.Error("異常終了メッセージが存在しない.") 505 } else if res.Detail != detailErrRC { 506 t.Errorf("想定外のメッセージ - %v", res.Detail) 507 } 508 if len(res.Var) == 0 { 509 t.Error("変数が格納されていない.") 510 } 511 if len(res.St) == 0 { 512 t.Error("ジョブ開始時間がない.") 513 } 514 if len(res.Et) == 0 { 515 t.Error("ジョブ終了時間がない.") 516 } 517 if res.Stat != db.ABNORMAL { 518 t.Error("statが異常終了ではない") 519 } 520 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 521 if err != nil { 522 t.Error("ジョブログが存在しない.") 523 } 524 defer file.Close() 525 } 526 527 func TestDoJobRequest_RCで異常終了するがチェックしないジョブ(t *testing.T) { 528 req := &message.Request{ 529 Type: "request", 530 NID: 112, 531 JID: "serviceTask_012", 532 Path: "job.bat", 533 Param: "A 12", 534 Env: "TESTENV1=ENVENVENV", 535 Workspace: "C:\\Go", 536 WarnRC: 0, 537 WarnStr: "WARN", 538 ErrRC: 0, 539 ErrStr: "ERR", 540 } 541 542 stCh := make(chan string, 1) 543 res := DoJobRequest(req, conf, stCh) 544 close(stCh) 545 if res.RC != 12 { 546 t.Error("RCは12のはず.") 547 } 548 if len(res.Detail) != 0 { 549 t.Error("異常終了メッセージが存在しない.") 550 } 551 if len(res.Var) == 0 { 552 t.Error("変数なし.") 553 } else if res.Var != "ENVENVENV A" { 554 t.Errorf("変数内容が不正.[%s]", res.Var) 555 } 556 if len(res.St) == 0 { 557 t.Error("ジョブ開始時間がない.") 558 } 559 if len(res.Et) == 0 { 560 t.Error("ジョブ終了時間がない.") 561 } 562 if res.Stat != db.NORMAL { 563 t.Error("statが正常終了ではない") 564 } 565 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 566 if err != nil { 567 t.Error("ジョブログが存在しない.") 568 } 569 defer file.Close() 570 } 571 572 func TestDoJobRequest_RCで異常終了して標準出力で警告終了するジョブ(t *testing.T) { 573 req := &message.Request{ 574 Type: "request", 575 NID: 113, 576 JID: "serviceTask_013", 577 Path: "job.bat", 578 Param: "X 12", 579 Env: "TESTENV1=WARNING", 580 Workspace: "C:\\Go", 581 WarnRC: 4, 582 WarnStr: "WARN", 583 ErrRC: 12, 584 ErrStr: "ERR", 585 } 586 587 stCh := make(chan string, 1) 588 res := DoJobRequest(req, conf, stCh) 589 close(stCh) 590 if res.RC != 12 { 591 t.Error("RCは12のはず.") 592 } 593 if len(res.Detail) == 0 { 594 t.Error("異常終了メッセージが存在しない.") 595 } else if res.Detail != detailErrRC { 596 t.Errorf("想定外のメッセージ - %v", res.Detail) 597 } 598 if len(res.Var) == 0 { 599 t.Error("変数が格納されていない.") 600 } 601 if len(res.St) == 0 { 602 t.Error("ジョブ開始時間がない.") 603 } 604 if len(res.Et) == 0 { 605 t.Error("ジョブ終了時間がない.") 606 } 607 if res.Stat != db.ABNORMAL { 608 t.Error("statが異常終了ではない") 609 } 610 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 611 if err != nil { 612 t.Error("ジョブログが存在しない.") 613 } 614 defer file.Close() 615 } 616 617 func TestDoJobRequest_RCで警告終了して標準出力で異常終了するジョブ(t *testing.T) { 618 req := &message.Request{ 619 Type: "request", 620 NID: 114, 621 JID: "serviceTask_014", 622 Path: "job.bat", 623 Param: "X 11", 624 Env: "TESTENV1=!!!ERROR!!!", 625 Workspace: "C:\\Go", 626 WarnRC: 4, 627 WarnStr: "WARN", 628 ErrRC: 12, 629 ErrStr: "ERROR", 630 } 631 632 stCh := make(chan string, 1) 633 res := DoJobRequest(req, conf, stCh) 634 close(stCh) 635 if res.RC != 11 { 636 t.Error("RCは11のはず.") 637 } 638 if len(res.Detail) == 0 { 639 t.Error("異常終了メッセージが存在する.") 640 } else if res.Detail != detailErrPtn { 641 t.Errorf("想定外のメッセージ - %v", res.Detail) 642 } 643 if len(res.Var) == 0 { 644 t.Error("変数が格納されていない.") 645 } 646 if len(res.St) == 0 { 647 t.Error("ジョブ開始時間がない.") 648 } 649 if len(res.Et) == 0 { 650 t.Error("ジョブ終了時間がない.") 651 } 652 if res.Stat != db.ABNORMAL { 653 t.Error("statが異常終了ではない") 654 } 655 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 656 if err != nil { 657 t.Error("ジョブログが存在しない.") 658 } 659 defer file.Close() 660 } 661 662 func TestDoJobRequest_日本語ジョブ(t *testing.T) { 663 req := &message.Request{ 664 Type: "request", 665 NID: 115, 666 JID: "serviceTask_015", 667 Path: "あ.bat", 668 Param: "OOO 100", 669 Env: "TESTENV1=!!!ERROR!!!", 670 Workspace: "C:\\Go", 671 WarnRC: 0, 672 WarnStr: "", 673 ErrRC: 0, 674 ErrStr: "", 675 } 676 677 stCh := make(chan string, 1) 678 res := DoJobRequest(req, conf, stCh) 679 close(stCh) 680 if res.RC != 100 { 681 t.Error("RCは100のはず.なのに", res.RC) 682 } 683 if len(res.Detail) != 0 { 684 t.Error("異常終了メッセージが存在する.") 685 } 686 if len(res.Var) == 0 { 687 t.Error("変数なし.") 688 } else if res.Var != "!!!ERROR!!! OOO" { 689 t.Errorf("変数内容が不正.[%s]", res.Var) 690 } 691 if len(res.St) == 0 { 692 t.Error("ジョブ開始時間がない.") 693 } 694 if len(res.Et) == 0 { 695 t.Error("ジョブ終了時間がない.") 696 } 697 if res.Stat != db.NORMAL { 698 t.Error("statが異常終了") 699 } 700 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 701 if err != nil { 702 t.Error("ジョブログが存在しない.") 703 } 704 defer file.Close() 705 } 706 707 func TestDoJobRequest_powershellジョブを実行(t *testing.T) { 708 req := &message.Request{ 709 Type: "request", 710 NID: 116, 711 JID: "serviceTask_016", 712 Path: "job.ps1", 713 Param: "-a あいうえお -b 123 -z", 714 Env: "TESTENV1=ENVENV", 715 Workspace: "C:\\Go", 716 WarnRC: 4, 717 WarnStr: "WARN", 718 ErrRC: 12, 719 ErrStr: "ERR", 720 } 721 722 stCh := make(chan string, 1) 723 res := DoJobRequest(req, conf, stCh) 724 close(stCh) 725 if req.NID != res.NID { 726 t.Error("NIDがリクエストとレスポンスで異なる.") 727 } 728 if req.JID != res.JID { 729 t.Error("IDがリクエストとレスポンスで異なる.") 730 } 731 if res.RC != 0 { 732 t.Errorf("ジョブが正常終了するはずなのに異常終了した. - %v", res.RC) 733 } 734 if len(res.Detail) > 0 { 735 t.Error("ジョブが正常終了するはずなのに、エラーメッセージがある.", res.Detail) 736 } 737 if len(res.Var) == 0 { 738 t.Error("変数なし.") 739 } else if res.Var != "$z is True" { 740 t.Errorf("変数内容が不正.[%s]", res.Var) 741 } 742 if len(res.St) == 0 { 743 t.Error("ジョブ開始時間が無い.") 744 } 745 if len(res.Et) == 0 { 746 t.Error("ジョブ終了時間が無い.") 747 } 748 749 file, err := os.Open(createJoblogFileName(req, stToLocalTimestamp(res.St), res.NID, res.JID)) 750 if err != nil { 751 t.Error("ジョブログがない。", err.Error()) 752 } 753 defer file.Close() 754 } 755 756 func TestDoJobRequest_タイムアウト時間を超えたら異常終了する(t *testing.T) { 757 req := &message.Request{ 758 Type: "request", 759 NID: 117, 760 JID: "serviceTask_017", 761 Path: "twosec.bat", 762 Param: "", 763 Env: "", 764 Workspace: "C:\\Go", 765 WarnRC: 0, 766 WarnStr: "", 767 ErrRC: 0, 768 ErrStr: "", 769 Timeout: 1, 770 } 771 772 stCh := make(chan string, 1) 773 res := DoJobRequest(req, conf, stCh) 774 close(stCh) 775 if res.Stat != db.ABNORMAL { 776 t.Error("異常終了するはずが、正常終了している。") 777 } 778 if len(res.Detail) == 0 { 779 t.Error("異常メッセージがセットされていない。") 780 } 781 }