@@ -134,6 +134,22 @@ const tests = `
134134 - [logrotate, logdir/logfile.log, logdir/logfile.log.1]
135135 - [log, line 3, logdir/logfile.log]
136136 - [expect, line 3, logdir/logfile.log]
137+
138+ - name: overwrite
139+ param_filters:
140+ logrotateMvCfg: [mv]
141+ commands:
142+ - [mkdir, logdir]
143+ - [log, file 1 line 1, logdir/logfile1.log]
144+ - [log, file 2 line 1, logdir/logfile2.log]
145+ - [start file tailer, readall=true, fail_on_missing_logfile=false, logdir/*]
146+ - [expect, file 1 line 1, logdir/logfile1.log]
147+ - [expect, file 2 line 1, logdir/logfile2.log]
148+ - [logrotate, logdir/logfile1.log, logdir/logfile2.log]
149+ - [log, file 2 line 2, logdir/logfile2.log]
150+ - [log, file 1 line 2, logdir/logfile1.log]
151+ - [expect, file 1 line 2, logdir/logfile1.log]
152+ - [expect, file 2 line 2, logdir/logfile2.log]
137153`
138154
139155// // The following test fails on Windows in tearDown() when removing logdir.
@@ -146,13 +162,14 @@ const tests = `
146162// `
147163
148164type testConfigType struct {
149- Name string
150- Commands [][]string
165+ Name string
166+ ParamFilters map [string ][]string `yaml:"param_filters"`
167+ Commands [][]string
151168}
152169
153170func TestAll (t * testing.T ) {
154171 testConfigs := make ([]testConfigType , 0 )
155- err := yaml .Unmarshal ([]byte (tests ), & testConfigs )
172+ err := yaml .UnmarshalStrict ([]byte (tests ), & testConfigs )
156173 if err != nil {
157174 t .Fatal (err )
158175 }
@@ -162,15 +179,19 @@ func TestAll(t *testing.T) {
162179 // All logratate configs except for copy and copytruncate can be combined with logratateMoveConfig.
163180 for _ , logrotateCfg := range []logrotateConfig {_create , _nocreate , _create_from_temp } {
164181 for _ , logrotateMvCfg := range []logrotateMoveConfig {mv , cp , rm } {
165- runTest (t , testConfig .Name , loggerCfg , tailerOpt , logrotateCfg , logrotateMvCfg , testConfig .Commands )
182+ if ! skip (testConfig , loggerCfg , logrotateCfg , logrotateMvCfg ) {
183+ runTest (t , testConfig .Name , loggerCfg , tailerOpt , logrotateCfg , logrotateMvCfg , testConfig .Commands )
184+ }
166185 }
167186 }
168187 for _ , loggerCfg := range []loggerConfig {keepOpen , closeFileAfterEachLine } {
169188 // When the logger keeps the file open, only the logrotate options 'copy' and 'copytruncate' make sense.
170189 for _ , logrotateCfg := range []logrotateConfig {_copy , _copytruncate } {
171190 for _ , logrotateMvCfg := range []logrotateMoveConfig {none } {
172191 // The logroatate configs copytruncate and copy require logroatateMoveConfig == none.
173- runTest (t , testConfig .Name , loggerCfg , tailerOpt , logrotateCfg , logrotateMvCfg , testConfig .Commands )
192+ if ! skip (testConfig , loggerCfg , logrotateCfg , logrotateMvCfg ) {
193+ runTest (t , testConfig .Name , loggerCfg , tailerOpt , logrotateCfg , logrotateMvCfg , testConfig .Commands )
194+ }
174195 }
175196 }
176197 }
@@ -225,6 +246,28 @@ func TestFileMissingOnStartup(t *testing.T) {
225246 runTest (t , "fail on missing startup" , closeFileAfterEachLine , fseventTailer , _nocreate , mv , test )
226247}
227248
249+ func skip (config testConfigType , loggerCfg loggerConfig , logrotateCfg logrotateConfig , logrotateMvCfg logrotateMoveConfig ) bool {
250+ if len (config .ParamFilters ["loggerCfg" ]) > 0 && ! containsAsString (loggerCfg , config .ParamFilters ["loggerCfg" ]) {
251+ return true
252+ }
253+ if len (config .ParamFilters ["logrotateCfg" ]) > 0 && ! containsAsString (logrotateCfg , config .ParamFilters ["logrotateCfg" ]) {
254+ return true
255+ }
256+ if len (config .ParamFilters ["logrotateMvCfg" ]) > 0 && ! containsAsString (logrotateMvCfg , config .ParamFilters ["logrotateMvCfg" ]) {
257+ return true
258+ }
259+ return false
260+ }
261+
262+ func containsAsString (item fmt.Stringer , slice []string ) bool {
263+ for _ , entry := range slice {
264+ if item .String () == entry {
265+ return true
266+ }
267+ }
268+ return false
269+ }
270+
228271func runTest (t * testing.T , testName string , loggerCfg loggerConfig , tailerCfg fileTailerConfig , logrotateCfg logrotateConfig , logrotateMvCfg logrotateMoveConfig , cmds [][]string ) {
229272 params := []fmt.Stringer {loggerCfg , tailerCfg , logrotateCfg , logrotateMvCfg }
230273 join (params , "," )
0 commit comments