github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/master/jobnet/parser/jobex_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  )
     7  
     8  func TestParseJobExFile_ファイルが存在しない場合は空のマップを返す(t *testing.T) {
     9  	jeMap, err := ParseJobExFile("noexistsfilepath")
    10  	if err != nil {
    11  		t.Fatalf("想定外のエラーが発生した: %s", err)
    12  	}
    13  	if jeMap == nil {
    14  		t.Fatal("空のマップではなく、nilが返された。")
    15  	}
    16  	if len(jeMap) != 0 {
    17  		t.Error("返されたマップが空ではない。")
    18  	}
    19  }
    20  
    21  func TestParseJobEx_拡張ジョブ定義CSVをパースできる(t *testing.T) {
    22  	csv := `
    23  ジョブ名,ノード名,ポート番号,実行ファイル,パラメータ,環境変数,作業フォルダ,警告コード,警告出力,異常コード,異常出力,タイムアウト
    24  testjob1,123.45.67.89,1234,C:\work\test1.bat,testparam1,testenv1,C:\work1,10,warn1,11,err1,3600
    25  testjob2,12.345.67.89,5678,C:\work\test2.bat,testparam2,testenv2,C:\work2,20,warn2,21,err2,3600`
    26  
    27  	r := strings.NewReader(csv)
    28  	jeMap, err := ParseJobEx(r)
    29  	if err != nil {
    30  		t.Fatalf("想定外のエラーが発生した: %s", err)
    31  	}
    32  
    33  	if len(jeMap) != 2 {
    34  		t.Fatalf("パース結果が2件になるはずが、%d件になった。", len(jeMap))
    35  	}
    36  
    37  	j1, ok := jeMap["testjob1"]
    38  	if !ok {
    39  		t.Fatalf("パース結果にtestjob1がセットされていない。")
    40  	}
    41  
    42  	if j1.Node != `123.45.67.89` {
    43  		t.Errorf("testjob1のノード名のパース結果[%s]が間違っています。", j1.Node)
    44  	}
    45  	if j1.Port != 1234 {
    46  		t.Errorf("testjob1のポート番号のパース結果[%d]が間違っています。", j1.Port)
    47  	}
    48  	if j1.FilePath != `C:\work\test1.bat` {
    49  		t.Errorf("testjob1の実行ファイルパスのパース結果[%s]が間違っています。", j1.FilePath)
    50  	}
    51  	if j1.Param != `testparam1` {
    52  		t.Errorf("testjob1の実行時パラメータのパース結果[%s]が間違っています。", j1.Param)
    53  	}
    54  	if j1.Env != `testenv1` {
    55  		t.Errorf("testjob1の環境変数のパース結果[%s]が間違っています。", j1.Env)
    56  	}
    57  	if j1.WrnRC != 10 {
    58  		t.Errorf("testjob1の警告条件コードのパース結果[%d]が間違っています。", j1.WrnRC)
    59  	}
    60  	if j1.WrnPtn != `warn1` {
    61  		t.Errorf("testjob1の警告出力パターンのパース結果[%s]が間違っています。", j1.WrnPtn)
    62  	}
    63  	if j1.ErrRC != 11 {
    64  		t.Errorf("testjob1の異常条件コードのパース結果[%d]が間違っています。", j1.ErrRC)
    65  	}
    66  	if j1.ErrPtn != `err1` {
    67  		t.Errorf("testjob1の異常出力パターンのパース結果[%s]が間違っています。", j1.ErrPtn)
    68  	}
    69  	if j1.TimeoutMin != 3600 {
    70  		t.Errorf("testjob1の実行タイムアウト時間のパース結果[%d]が間違っています。", j1.TimeoutMin)
    71  	}
    72  
    73  	if _, ok := jeMap["testjob2"]; !ok {
    74  		t.Fatalf("パース結果にtestjob2がセットされていない。")
    75  	}
    76  }
    77  
    78  func TestParseJobEx_空のカラムにゼロ値がセットされる(t *testing.T) {
    79  	csv := `
    80  ジョブ名,ノード名,ポート番号,実行ファイル,パラメータ,環境変数,作業フォルダ,警告コード,警告出力,異常コード,異常出力,タイムアウト
    81  testjob1,,,,,,,,,,,`
    82  
    83  	r := strings.NewReader(csv)
    84  	jeMap, err := ParseJobEx(r)
    85  	if err != nil {
    86  		t.Fatalf("想定外のエラーが発生した: %s", err)
    87  	}
    88  
    89  	if len(jeMap) != 1 {
    90  		t.Fatalf("パース結果が1件になるはずが、%d件になった。", len(jeMap))
    91  	}
    92  
    93  	j1, ok := jeMap["testjob1"]
    94  	if !ok {
    95  		t.Fatalf("パース結果にtestjob1がセットされていない。")
    96  	}
    97  
    98  	if j1.Node != `` {
    99  		t.Errorf("testjob1のノード名のパース結果[%s]が間違っています。", j1.Node)
   100  	}
   101  	if j1.Port != 0 {
   102  		t.Errorf("testjob1のポート番号のパース結果[%d]が間違っています。", j1.Port)
   103  	}
   104  	if j1.FilePath != `` {
   105  		t.Errorf("testjob1の実行ファイルパスのパース結果[%s]が間違っています。", j1.FilePath)
   106  	}
   107  	if j1.Param != `` {
   108  		t.Errorf("testjob1の実行時パラメータのパース結果[%s]が間違っています。", j1.Param)
   109  	}
   110  	if j1.Env != `` {
   111  		t.Errorf("testjob1の環境変数のパース結果[%s]が間違っています。", j1.Env)
   112  	}
   113  	if j1.WrnRC != 0 {
   114  		t.Errorf("testjob1の警告条件コードのパース結果[%s]が間違っています。", j1.WrnRC)
   115  	}
   116  	if j1.WrnPtn != `` {
   117  		t.Errorf("testjob1の警告出力パターンのパース結果[%s]が間違っています。", j1.WrnPtn)
   118  	}
   119  	if j1.ErrRC != 0 {
   120  		t.Errorf("testjob1の異常条件コードのパース結果[%d]が間違っています。", j1.ErrRC)
   121  	}
   122  	if j1.ErrPtn != `` {
   123  		t.Errorf("testjob1の異常出力パターンのパース結果[%s]が間違っています。", j1.ErrPtn)
   124  	}
   125  	if j1.TimeoutMin != -1 {
   126  		t.Errorf("testjob1の実行タイムアウト時間のパース結果[%d]が間違っています。", j1.TimeoutMin)
   127  	}
   128  	if j1.SecondaryNode != `` {
   129  		t.Errorf("testjob1のセカンダリノード名のパース結果[%s]が間違っています。", j1.SecondaryNode)
   130  	}
   131  	if j1.SecondaryPort != 0 {
   132  		t.Errorf("testjob1のセカンダリポート番号のパース結果[%d]が間違っています。", j1.SecondaryPort)
   133  	}
   134  }
   135  
   136  func TestParseJobEx_ジョブ名が無い行はエラーとして無視する(t *testing.T) {
   137  	csv := `
   138  ジョブ名,ノード名,ポート番号,実行ファイル,パラメータ,環境変数,作業フォルダ,警告コード,警告出力,異常コード,異常出力,タイムアウト
   139  ,123.45.67.89,1234,C:\work\test1.bat,testparam1,testenv1,C:\work1,10,warn1,11,err1,3600
   140  testjob2,12.345.67.89,5678,C:\work\test2.bat,testparam2,testenv2,C:\work2,20,warn2,21,err2,3600`
   141  
   142  	r := strings.NewReader(csv)
   143  	jeMap, err := ParseJobEx(r)
   144  	if err != nil {
   145  		t.Fatalf("想定外のエラーが発生した: %s", err)
   146  	}
   147  
   148  	if len(jeMap) != 1 {
   149  		t.Fatalf("パース結果が2件になるはずが、%d件になった。", len(jeMap))
   150  	}
   151  
   152  	if _, ok := jeMap["testjob2"]; !ok {
   153  		t.Fatalf("パース結果にtestjob2がセットされていない。")
   154  	}
   155  }
   156  
   157  func TestParseJobEx_セカンダリサーバント情報をパースできる(t *testing.T) {
   158  	csv := `
   159  ジョブ名,ノード名,ポート番号,実行ファイル,パラメータ,環境変数,作業フォルダ,警告コード,警告出力,異常コード,異常出力,タイムアウト,セカンダリ実行ノード,セカンダリポート番号
   160  testjob1,123.45.67.89,1234,C:\work\test1.bat,testparam1,testenv1,C:\work1,10,warn1,11,err1,3600,secondary,12345
   161  testjob2,12.345.67.89,5678,C:\work\test2.bat,testparam2,testenv2,C:\work2,20,warn2,21,err2,3600,,`
   162  
   163  	r := strings.NewReader(csv)
   164  	jeMap, err := ParseJobEx(r)
   165  	if err != nil {
   166  		t.Fatalf("想定外のエラーが発生した: %s", err)
   167  	}
   168  
   169  	if len(jeMap) != 2 {
   170  		t.Fatalf("パース結果が2件になるはずが、%d件になった。", len(jeMap))
   171  	}
   172  
   173  	j1, ok := jeMap["testjob1"]
   174  	if !ok {
   175  		t.Fatalf("パース結果にtestjob1がセットされていない。")
   176  	}
   177  
   178  	if j1.SecondaryNode != `secondary` {
   179  		t.Errorf("testjob1のセカンダリノード名のパース結果[%s]が間違っています。", j1.SecondaryNode)
   180  	}
   181  	if j1.SecondaryPort != 12345 {
   182  		t.Errorf("testjob1のセカンダリポート番号のパース結果[%d]が間違っています。", j1.SecondaryPort)
   183  	}
   184  
   185  	j2, ok := jeMap["testjob2"]
   186  	if !ok {
   187  		t.Fatalf("パース結果にtestjob2がセットされていない。")
   188  	}
   189  
   190  	if j2.SecondaryNode != `` {
   191  		t.Errorf("testjob2のセカンダリノード名のパース結果[%s]が間違っています。", j2.SecondaryNode)
   192  	}
   193  	if j2.SecondaryPort != 0 {
   194  		t.Errorf("testjob2のセカンダリポート番号のパース結果[%d]が間違っています。", j2.SecondaryPort)
   195  	}
   196  }