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  }