github.com/unirita/cuto@v0.9.8-0.20160830082821-aa6652f877b7/master/config/config_test.go (about) 1 package config 2 3 import ( 4 "strings" 5 "testing" 6 ) 7 8 func generateTestConfig() { 9 Job.DefaultNode = `localhost` 10 Job.DefaultPort = 0 11 Job.DefaultTimeoutMin = 0 12 Job.ConnectionTimeoutSec = 1 13 Job.TimeTrackingSpanMin = 10 14 Job.AttemptLimit = 5 15 Dir.JobnetDir = `.\jobnet` 16 Dir.LogDir = `.\log` 17 DB.DBFile = `.\data\cuto.sqlite` 18 Log.OutputLevel = `info` 19 Log.MaxSizeKB = 1 20 Log.MaxGeneration = 1 21 } 22 23 func TestLoad_存在しないファイルをロードしようとした場合はエラー(t *testing.T) { 24 if err := Load("noexistfilepath"); err == nil { 25 t.Error("エラーが発生していない。") 26 } 27 } 28 29 func TestLoadByReader_Readerから設定値を取得できる(t *testing.T) { 30 conf := ` 31 [job] 32 default_node='localhost' 33 default_port=2015 34 default_timeout_min=30 35 connection_timeout_sec=60 36 time_tracking_span_min=10 37 attempt_limit=5 38 39 [dir] 40 jobnet_dir='jobnet' 41 log_dir='log' 42 43 [db] 44 db_file='cute.db' 45 46 [log] 47 output_level='info' 48 max_size_kb=10240 49 max_generation=2 50 ` 51 52 r := strings.NewReader(conf) 53 err := loadReader(r) 54 if err != nil { 55 t.Fatalf("想定外のエラーが発生した[%s]", err) 56 } 57 58 if Job.DefaultNode != `localhost` { 59 t.Errorf("default_nodeの値[%s]は想定と違っている。", Job.DefaultNode) 60 } 61 if Job.DefaultPort != 2015 { 62 t.Errorf("default_portの値[%d]は想定と違っている。", Job.DefaultPort) 63 } 64 if Job.DefaultTimeoutMin != 30 { 65 t.Errorf("default_timeout_minの値[%d]は想定と違っている。", Job.DefaultTimeoutMin) 66 } 67 if Job.ConnectionTimeoutSec != 60 { 68 t.Errorf("connection_timeout_secの値[%d]は想定と違っている。", Job.ConnectionTimeoutSec) 69 } 70 if Job.TimeTrackingSpanMin != 10 { 71 t.Errorf("time_tracking_span_minの値[%d]は想定と違っている。", Job.TimeTrackingSpanMin) 72 } 73 if Job.AttemptLimit != 5 { 74 t.Errorf("attempt_limitの値[%d]は想定と違っている。", Job.AttemptLimit) 75 } 76 if Dir.JobnetDir != `jobnet` { 77 t.Errorf("jobnet_dirの値[%s]は想定と違っている。", Dir.JobnetDir) 78 } 79 if Dir.LogDir != `log` { 80 t.Errorf("log_dirの値[%s]は想定と違っている。", Dir.LogDir) 81 } 82 if DB.DBFile != `cute.db` { 83 t.Errorf("db_fileの値[%s]は想定と違っている。", DB.DBFile) 84 } 85 if Log.OutputLevel != `info` { 86 t.Errorf("output_levelの値[%s]が想定と違っている。", Log.OutputLevel) 87 } 88 if Log.MaxSizeKB != 10240 { 89 t.Errorf("max_size_kb[%d]は想定と違っている。", Log.MaxSizeKB) 90 } 91 if Log.MaxGeneration != 2 { 92 t.Errorf("max_generation[%d]は想定と違っている。", Log.MaxGeneration) 93 } 94 } 95 96 func TestLoadByReader_CUTOROOTタグを展開できる(t *testing.T) { 97 conf := ` 98 [job] 99 default_node='localhost' 100 default_port=2015 101 default_timeout_min=30 102 connection_timeout_sec=60 103 time_tracking_span_min=10 104 attempt_limit=5 105 106 [dir] 107 jobnet_dir='<CUTOROOT>/jobnet' 108 log_dir='<CUTOROOT>/log' 109 110 [db] 111 db_file='<CUTOROOT>/cuto.db' 112 113 [log] 114 output_level='info' 115 max_size_kb=10240 116 max_generation=2 117 ` 118 119 r := strings.NewReader(conf) 120 err := loadReader(r) 121 if err != nil { 122 t.Fatalf("想定外のエラーが発生した[%s]", err) 123 } 124 if Dir.JobnetDir == `<CUTOROOT>/jobnet` { 125 t.Errorf("jobnet_dir内の<CUTOROOT>が置換されていない") 126 } 127 if Dir.LogDir == `<CUTOROOT>/log` { 128 t.Errorf("log_dir内の<CUTOROOT>が置換されていない") 129 } 130 if DB.DBFile == `<CUTOROOT>/cuto.db` { 131 t.Errorf("db_file内の<CUTOROOT>が置換されていない") 132 } 133 } 134 135 func TestLoadByReader_AttemptLimitが指定されない場合のデフォルト値(t *testing.T) { 136 conf := ` 137 [job] 138 default_node='localhost' 139 default_port=2015 140 default_timeout_min=30 141 connection_timeout_sec=60 142 time_tracking_span_min=10 143 144 [dir] 145 jobnet_dir='jobnet' 146 log_dir='log' 147 148 [db] 149 db_file='cute.db' 150 151 [log] 152 output_level='info' 153 max_size_kb=10240 154 max_generation=2 155 ` 156 157 r := strings.NewReader(conf) 158 err := loadReader(r) 159 if err != nil { 160 t.Fatalf("想定外のエラーが発生した[%s]", err) 161 } 162 163 if Job.AttemptLimit != 1 { 164 t.Errorf("attempt_limitの値[%d]は想定と違っている。", Job.AttemptLimit) 165 } 166 } 167 168 func TestLoadByReader_tomlの書式に沿っていない場合はエラーが発生する(t *testing.T) { 169 conf := ` 170 [job] 171 default_node=localhost 172 default_port=2015 173 default_timeout_min=30 174 connection_timeout_sec=60 175 time_tracking_span_min=10 176 attempt_limit=5 177 178 [dir] 179 jobnet_dir='jobnet' 180 log_dir='log' 181 182 [db] 183 db_file='cute.db' 184 185 [log] 186 output_level='info' 187 max_size_kb=10240 188 max_generation=2 189 ` 190 191 r := strings.NewReader(conf) 192 err := loadReader(r) 193 if err == nil { 194 t.Error("エラーが発生しなかった") 195 } 196 } 197 198 func TestDetectError_設定内容にエラーが無い場合はnilを返す_ポート番号最小値(t *testing.T) { 199 generateTestConfig() 200 if err := DetectError(); err != nil { 201 t.Errorf("想定外のエラーが発生した: %s", err) 202 } 203 } 204 205 func TestDetectError_設定内容にエラーが無い場合はnilを返す_ポート番号最大値(t *testing.T) { 206 generateTestConfig() 207 Job.DefaultPort = 65535 208 if err := DetectError(); err != nil { 209 t.Errorf("想定外のエラーが発生した: %s", err) 210 } 211 } 212 213 func TestDetectError_デフォルトのポート番号が負の値の場合はエラー(t *testing.T) { 214 generateTestConfig() 215 Job.DefaultPort = -1 216 if err := DetectError(); err == nil { 217 t.Error("エラーが発生しなかった。") 218 } 219 } 220 221 func TestDetectError_デフォルトのポート番号が65535を超える場合はエラー(t *testing.T) { 222 generateTestConfig() 223 Job.DefaultPort = 65536 224 if err := DetectError(); err == nil { 225 t.Error("エラーが発生しなかった。") 226 } 227 } 228 229 func TestDetectError_デフォルトの実行タイムアウト時間が負の値の場合はエラー(t *testing.T) { 230 generateTestConfig() 231 Job.DefaultTimeoutMin = -1 232 if err := DetectError(); err == nil { 233 t.Error("エラーが発生しなかった。") 234 } 235 } 236 237 func TestDetectError_接続タイムアウト時間が0以下の場合はエラー(t *testing.T) { 238 generateTestConfig() 239 Job.ConnectionTimeoutSec = 0 240 if err := DetectError(); err == nil { 241 t.Error("エラーが発生しなかった。") 242 } 243 } 244 245 func TestDetectError_経過時間表示間隔が負の値の場合はエラー(t *testing.T) { 246 generateTestConfig() 247 Job.TimeTrackingSpanMin = -1 248 if err := DetectError(); err == nil { 249 t.Error("エラーが発生しなかった。") 250 } 251 } 252 253 func TestDetectError_最大試行回数が0以下の場合はエラー(t *testing.T) { 254 generateTestConfig() 255 Job.AttemptLimit = 0 256 if err := DetectError(); err == nil { 257 t.Error("エラーが発生しなかった。") 258 } 259 } 260 261 func TestDetectError_ログファイル最大サイズが0以下の場合はエラー(t *testing.T) { 262 generateTestConfig() 263 Log.MaxSizeKB = 0 264 if err := DetectError(); err == nil { 265 t.Error("エラーが発生しなかった。") 266 } 267 } 268 269 func TestDetectError_ログファイル最大世代数が0以下の場合はエラー(t *testing.T) { 270 generateTestConfig() 271 Log.MaxGeneration = 0 272 if err := DetectError(); err == nil { 273 t.Error("エラーが発生しなかった。") 274 } 275 }