github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/realtime/network/network_test.go (about) 1 package network 2 3 import ( 4 "bytes" 5 "strings" 6 "testing" 7 ) 8 9 func TestLoadJobexFromReader(t *testing.T) { 10 csv := ` 11 ジョブ名,ノード名,ポート番号,実行ファイル,パラメータ,環境変数,作業フォルダ,警告コード,警告出力,異常コード,異常出力,タイムアウト,セカンダリ実行ノード,セカンダリポート番号 12 job1,123.45.67.89,1234,/scripts/job1.sh,param1,env1,/work,10,warn1,20,err1,3600,secondary,12345 13 job2,12.345.67.89,5678,/scripts/job2.sh,param2,env2,/work2,11,warn2,21,err2,3600,,` 14 15 jobex, err := loadJobexFromReader(strings.NewReader(csv)) 16 if err != nil { 17 t.Fatalf("Unexpected error occured: %s", err) 18 } 19 if len(jobex) != 2 { 20 t.Fatalf("len(jobex) => %d, want %d", len(jobex), 2) 21 } 22 } 23 24 func TestExportJob(t *testing.T) { 25 expected := `,,,,,,,,,,,,, 26 job1,node1,1234,/scripts/job1.sh,param1,env1,/work1,11,warn1,21,err1,100,snode1,1000 27 job2,node2,2345,/scripts/job2.sh,param2,env2,/work2,12,warn2,22,err2,200,snode2,2000 28 ` 29 30 n := new(Network) 31 n.Jobs = []Job{ 32 Job{ 33 Name: "job1", 34 Node: "node1", 35 Port: 1234, 36 Path: "/scripts/job1.sh", 37 Param: "param1", 38 Env: "env1", 39 Work: "/work1", 40 WRC: 11, 41 WPtn: "warn1", 42 ERC: 21, 43 EPtn: "err1", 44 Timeout: 100, 45 SNode: "snode1", 46 SPort: 1000, 47 }, 48 Job{ 49 Name: "job2", 50 Node: "node2", 51 Port: 2345, 52 Path: "/scripts/job2.sh", 53 Param: "param2", 54 Env: "env2", 55 Work: "/work2", 56 WRC: 12, 57 WPtn: "warn2", 58 ERC: 22, 59 EPtn: "err2", 60 Timeout: 200, 61 SNode: "snode2", 62 SPort: 2000, 63 }, 64 } 65 66 w := new(bytes.Buffer) 67 err := n.exportJob(w) 68 if err != nil { 69 t.Fatalf("Unexpected error occured: %s", err) 70 } 71 result := w.String() 72 if result != expected { 73 t.Log("Exported csv is not expected.") 74 t.Log("Expected:") 75 t.Log(expected) 76 t.Log("Actual:") 77 t.Log(result) 78 t.Fail() 79 } 80 } 81 82 func TestParse(t *testing.T) { 83 jsonStr := ` 84 { 85 "flow":"job1->job2->[job3,job4->job5]->job6", 86 "jobs":[ 87 { 88 "name":"job1", 89 "node":"testnode", 90 "port":1234, 91 "path":"/scripts/job1.sh", 92 "param":"abc", 93 "env":"env1=test", 94 "work":"/work", 95 "wrc":5, 96 "wptn":"warning", 97 "erc":10, 98 "eptn":"error", 99 "timeout":30, 100 "snode":"secondary", 101 "sport":2345 102 } 103 ] 104 } 105 ` 106 network, err := Parse(strings.NewReader(jsonStr)) 107 if err != nil { 108 t.Fatalf("Unexpected error occurd: %s", err) 109 } 110 if network.Flow != "job1->job2->[job3,job4->job5]->job6" { 111 t.Logf("Flow => %s", network.Flow) 112 t.Logf("Want %s", "job1->job2->[job3,job4->job5]->job6") 113 t.Fail() 114 } 115 if len(network.Jobs) != 1 { 116 t.Fatalf("len(Jobs) => %d, want %d", len(network.Jobs), 1) 117 } 118 119 job := network.Jobs[0] 120 if job.Name != "job1" { 121 t.Errorf("job.Name => %s, want %s", job.Name, "job1") 122 } 123 if job.Node != "testnode" { 124 t.Errorf("job.Node => %s, want %s", job.Node, "testnode") 125 } 126 if job.Port != 1234 { 127 t.Errorf("job.Port => %d, want %d", job.Port, 1234) 128 } 129 if job.Path != "/scripts/job1.sh" { 130 t.Errorf("job.Path => %s, want %s", job.Path, "/scripts/job1.sh") 131 } 132 if job.Param != "abc" { 133 t.Errorf("job.Param => %s, want %s", job.Param, "abc") 134 } 135 if job.Env != "env1=test" { 136 t.Errorf("job.Env => %s, want %s", job.Env, "env1=test") 137 } 138 if job.Work != "/work" { 139 t.Errorf("job.Work => %s, want %s", job.Work, "/work") 140 } 141 if job.WRC != 5 { 142 t.Errorf("job.WRC => %d, want %d", job.WRC, 5) 143 } 144 if job.WPtn != "warning" { 145 t.Errorf("job.WPtn => %s, want %s", job.WPtn, "warning") 146 } 147 if job.ERC != 10 { 148 t.Errorf("job.ERC => %d, want %d", job.ERC, 10) 149 } 150 if job.EPtn != "error" { 151 t.Errorf("job.EPtn => %s, want %s", job.EPtn, "error") 152 } 153 if job.Timeout != 30 { 154 t.Errorf("job.Timeout => %d, want %d", job.Timeout, 30) 155 } 156 if job.SNode != "secondary" { 157 t.Errorf("job.SNode => %s, want %s", job.SNode, "secondary") 158 } 159 if job.SPort != 2345 { 160 t.Errorf("job.SPort => %d, want %d", job.SPort, 2345) 161 } 162 } 163 164 func TestParse_WithNullValue(t *testing.T) { 165 jsonStr := ` 166 { 167 "flow":"job1->job2->[job3,job4->job5]->job6", 168 "jobs":[ 169 { 170 "name":"job1" 171 }, 172 { 173 "name":"job2" 174 }, 175 { 176 "name":"job3", 177 "node":"realtimenode" 178 } 179 ] 180 } 181 ` 182 jobex = [][]string{ 183 []string{ 184 "job2", 185 "node2", 186 "2345", 187 "/scripts/job2.sh", 188 "param2", 189 "env2", 190 "/work2", 191 "12", 192 "warn2", 193 "22", 194 "err2", 195 "200", 196 "snode2", 197 "2000", 198 }, 199 []string{ 200 "job3", 201 "node3", 202 "3456", 203 "/scripts/job3.sh", 204 "param3", 205 "env3", 206 "/work3", 207 "13", 208 "warn3", 209 "23", 210 "err3", 211 "300", 212 "snode3", 213 "3000", 214 }, 215 } 216 defer func() { 217 jobex := make([][]string, 1) 218 jobex[0] = make([]string, columns) 219 }() 220 221 network, err := Parse(strings.NewReader(jsonStr)) 222 if err != nil { 223 t.Fatalf("Unexpected error occurd: %s", err) 224 } 225 if len(network.Jobs) != 3 { 226 t.Fatalf("len(Jobs) => %d, want %d", len(network.Jobs), 3) 227 } 228 229 firstJob := network.Jobs[0] 230 if firstJob.Name != "job1" { 231 t.Errorf("firstJob.Name => %s, want %s", firstJob.Name, "job1") 232 } 233 if firstJob.Node != "" { 234 t.Errorf("firstJob.Node => %s, want %s", firstJob.Node, "") 235 } 236 if firstJob.Port != 0 { 237 t.Errorf("firstJob.Port => %d, want %d", firstJob.Port, 0) 238 } 239 if firstJob.Path != "" { 240 t.Errorf("firstJob.Path => %s, want %s", firstJob.Path, "") 241 } 242 if firstJob.Param != "" { 243 t.Errorf("firstJob.Param => %s, want %s", firstJob.Param, "") 244 } 245 if firstJob.Env != "" { 246 t.Errorf("firstJob.Env => %s, want %s", firstJob.Env, "") 247 } 248 if firstJob.Work != "" { 249 t.Errorf("firstJob.Work => %s, want %s", firstJob.Work, "") 250 } 251 if firstJob.WRC != 0 { 252 t.Errorf("firstJob.WRC => %d, want %d", firstJob.WRC, 0) 253 } 254 if firstJob.WPtn != "" { 255 t.Errorf("firstJob.WPtn => %s, want %s", firstJob.WPtn, "") 256 } 257 if firstJob.ERC != 0 { 258 t.Errorf("firstJob.ERC => %d, want %d", firstJob.ERC, 0) 259 } 260 if firstJob.EPtn != "" { 261 t.Errorf("firstJob.EPtn => %s, want %s", firstJob.EPtn, "") 262 } 263 if firstJob.Timeout != 0 { 264 t.Errorf("firstJob.Timeout => %d, want %d", firstJob.Timeout, 0) 265 } 266 if firstJob.SNode != "" { 267 t.Errorf("firstJob.SNode => %s, want nil", firstJob.SNode) 268 } 269 if firstJob.SPort != 0 { 270 t.Errorf("firstJob.SPort => %d, want nil", firstJob.SPort) 271 } 272 273 secondJob := network.Jobs[1] 274 if secondJob.Name != "job2" { 275 t.Errorf("secondJob.Name => %s, want %s", secondJob.Name, "job2") 276 } 277 if secondJob.Node != "node2" { 278 t.Errorf("secondJob.Node => %s, want %s", secondJob.Node, "node2") 279 } 280 if secondJob.Port != 2345 { 281 t.Errorf("secondJob.Port => %d, want %d", secondJob.Port, 2345) 282 } 283 if secondJob.Path != "/scripts/job2.sh" { 284 t.Errorf("secondJob.Path => %s, want %s", secondJob.Path, "/scripts/job2.sh") 285 } 286 if secondJob.Param != "param2" { 287 t.Errorf("secondJob.Param => %s, want %s", secondJob.Param, "param2") 288 } 289 if secondJob.Env != "env2" { 290 t.Errorf("secondJob.Env => %s, want %s", secondJob.Env, "env2") 291 } 292 if secondJob.Work != "/work2" { 293 t.Errorf("secondJob.Work => %s, want %s", secondJob.Work, "/work2") 294 } 295 if secondJob.WRC != 12 { 296 t.Errorf("secondJob.WRC => %d, want %d", secondJob.WRC, 12) 297 } 298 if secondJob.WPtn != "warn2" { 299 t.Errorf("secondJob.WPtn => %s, want %s", secondJob.WPtn, "warn2") 300 } 301 if secondJob.ERC != 22 { 302 t.Errorf("secondJob.ERC => %d, want %d", secondJob.ERC, 22) 303 } 304 if secondJob.EPtn != "err2" { 305 t.Errorf("secondJob.EPtn => %s, want %s", secondJob.EPtn, "err2") 306 } 307 if secondJob.Timeout != 200 { 308 t.Errorf("secondJob.Timeout => %d, want %d", secondJob.Timeout, 200) 309 } 310 if secondJob.SNode != "snode2" { 311 t.Errorf("secondJob.SNode => %s, want %s", secondJob.SNode, "snode2") 312 } 313 if secondJob.SPort != 2000 { 314 t.Errorf("secondJob.SPort => %d, want %d", secondJob.SPort, 2000) 315 } 316 317 thirdJob := network.Jobs[2] 318 if thirdJob.Name != "job3" { 319 t.Errorf("thirdJob.Name => %s, want %s", thirdJob.Name, "job3") 320 } 321 if thirdJob.Node != "realtimenode" { 322 t.Errorf("thirdJob.Node => %s, want %s", thirdJob.Node, "realtimenode") 323 } 324 if thirdJob.Port != 3456 { 325 t.Errorf("thirdJob.Port => %d, want %d", thirdJob.Port, 3456) 326 } 327 if thirdJob.Path != "/scripts/job3.sh" { 328 t.Errorf("thirdJob.Path => %s, want %s", thirdJob.Path, "/scripts/job3.sh") 329 } 330 if thirdJob.Param != "param3" { 331 t.Errorf("thirdJob.Param => %s, want %s", thirdJob.Param, "param3") 332 } 333 if thirdJob.Env != "env3" { 334 t.Errorf("thirdJob.Env => %s, want %s", thirdJob.Env, "env3") 335 } 336 if thirdJob.Work != "/work3" { 337 t.Errorf("thirdJob.Work => %s, want %s", thirdJob.Work, "/work3") 338 } 339 if thirdJob.WRC != 13 { 340 t.Errorf("thirdJob.WRC => %d, want %d", thirdJob.WRC, 13) 341 } 342 if thirdJob.WPtn != "warn3" { 343 t.Errorf("thirdJob.WPtn => %s, want %s", thirdJob.WPtn, "warn3") 344 } 345 if thirdJob.ERC != 23 { 346 t.Errorf("thirdJob.ERC => %d, want %d", thirdJob.ERC, 23) 347 } 348 if thirdJob.EPtn != "err3" { 349 t.Errorf("thirdJob.EPtn => %s, want %s", thirdJob.EPtn, "err3") 350 } 351 if thirdJob.Timeout != 300 { 352 t.Errorf("thirdJob.Timeout => %d, want %d", thirdJob.Timeout, 300) 353 } 354 if thirdJob.SNode != "snode3" { 355 t.Errorf("thirdJob.SNode => %s, want %s", thirdJob.SNode, "snode3") 356 } 357 if thirdJob.SPort != 3000 { 358 t.Errorf("thirdJob.SPort => %d, want %d", thirdJob.SPort, 3000) 359 } 360 } 361 362 func TestParse_NonParameterJobex(t *testing.T) { 363 jsonStr := ` 364 { 365 "flow":"job1->job2->[job3,job4->job5]->job6", 366 "jobs":[] 367 } 368 ` 369 jobex = [][]string{ 370 []string{ 371 "job2", 372 "node2", 373 "2345", 374 "/scripts/job2.sh", 375 "param2", 376 "env2", 377 "/work2", 378 "12", 379 "warn2", 380 "22", 381 "err2", 382 "200", 383 "snode2", 384 "2000", 385 }, 386 } 387 defer func() { 388 jobex := make([][]string, 1) 389 jobex[0] = make([]string, columns) 390 }() 391 392 network, err := Parse(strings.NewReader(jsonStr)) 393 if err != nil { 394 t.Fatalf("Unexpected error occurd: %s", err) 395 } 396 if len(network.Jobs) != 1 { 397 t.Fatalf("len(Jobs) => %d, want %d", len(network.Jobs), 1) 398 } 399 400 job := network.Jobs[0] 401 if job.Name != "job2" { 402 t.Errorf("job.Name => %s, want %s", job.Name, "job2") 403 } 404 if job.Node != "node2" { 405 t.Errorf("job.Node => %s, want %s", job.Node, "node2") 406 } 407 if job.Port != 2345 { 408 t.Errorf("job.Port => %d, want %d", job.Port, 2345) 409 } 410 if job.Path != "/scripts/job2.sh" { 411 t.Errorf("job.Path => %s, want %s", job.Path, "/scripts/job2.sh") 412 } 413 if job.Param != "param2" { 414 t.Errorf("job.Param => %s, want %s", job.Param, "param2") 415 } 416 if job.Env != "env2" { 417 t.Errorf("job.Env => %s, want %s", job.Env, "env2") 418 } 419 if job.Work != "/work2" { 420 t.Errorf("job.Work => %s, want %s", job.Work, "/work2") 421 } 422 if job.WRC != 12 { 423 t.Errorf("job.WRC => %d, want %d", job.WRC, 12) 424 } 425 if job.WPtn != "warn2" { 426 t.Errorf("job.WPtn => %s, want %s", job.WPtn, "warn2") 427 } 428 if job.ERC != 22 { 429 t.Errorf("job.ERC => %d, want %d", job.ERC, 22) 430 } 431 if job.EPtn != "err2" { 432 t.Errorf("job.EPtn => %s, want %s", job.EPtn, "err2") 433 } 434 if job.Timeout != 200 { 435 t.Errorf("job.Timeout => %d, want %d", job.Timeout, 200) 436 } 437 if job.SNode != "snode2" { 438 t.Errorf("job.SNode => %s, want %s", job.SNode, "snode2") 439 } 440 if job.SPort != 2000 { 441 t.Errorf("job.SPort => %d, want %d", job.SPort, 2000) 442 } 443 } 444 445 func TestParse_WithJSONError(t *testing.T) { 446 jsonStr := ` 447 { 448 flow:"job1->job2->[job3,job4->job5]->job6", 449 "jobs":[ 450 { 451 "name":"job2", 452 "node":"testnode", 453 "port":1234, 454 "path":"/scripts/job2.sh", 455 "param":"abc", 456 "env":"env1=test", 457 "work":"/work", 458 "wrc":5, 459 "wptn":"warning", 460 "erc":10, 461 "eptn":"error", 462 "timeout":30, 463 "snode":"secondary", 464 "sport":2345 465 }, 466 { 467 "name":"job5", 468 "param":"bcd" 469 } 470 ] 471 } 472 ` 473 _, err := Parse(strings.NewReader(jsonStr)) 474 if err == nil { 475 t.Fatalf("No error occured.") 476 } 477 } 478 479 func TestParse_WithAnonymousJob(t *testing.T) { 480 jsonStr := ` 481 { 482 "flow":"job1->job2->[job3,job4->job5]->job6", 483 "jobs":[ 484 { 485 "node":"testnode", 486 "port":1234, 487 "path":"/scripts/job2.sh", 488 "param":"abc", 489 "env":"env1=test", 490 "work":"/work", 491 "wrc":5, 492 "wptn":"warning", 493 "erc":10, 494 "eptn":"error", 495 "timeout":30, 496 "snode":"secondary", 497 "sport":2345 498 }, 499 { 500 "name":"job5", 501 "param":"bcd" 502 } 503 ] 504 } 505 ` 506 _, err := Parse(strings.NewReader(jsonStr)) 507 if err == nil { 508 t.Fatalf("No error occured.") 509 } 510 }