@@ -3,13 +3,17 @@ package cli
33import (
44 "context"
55 "errors"
6+ "fmt"
67 "io/ioutil"
78 "os"
89 "path/filepath"
910 "time"
1011
1112 defaults "github.com/creasty/defaults"
1213 "github.com/netresearch/ofelia/core"
14+ "github.com/netresearch/ofelia/middlewares"
15+
16+ "github.com/sirupsen/logrus"
1317
1418 . "gopkg.in/check.v1"
1519)
@@ -345,6 +349,55 @@ func (s *SuiteConfig) TestIniConfigUpdateGlob(c *C) {
345349 c .Assert (cfg .RunJobs ["foo" ].GetSchedule (), Equals , "@every 10s" )
346350}
347351
352+ // TestIniConfigUpdateGlobalChange verifies global middleware options and log
353+ // level are reloaded.
354+ func (s * SuiteConfig ) TestIniConfigUpdateGlobalChange (c * C ) {
355+ tmp , err := ioutil .TempFile ("" , "ofelia_*.ini" )
356+ c .Assert (err , IsNil )
357+ defer os .Remove (tmp .Name ())
358+
359+ dir := c .MkDir ()
360+ content1 := fmt .Sprintf ("[global]\n log-level = INFO\n save-folder = %s\n " ,
361+ dir )
362+ content1 += "save-only-on-error = false\n "
363+ content1 += "[job-run \" foo\" ]\n schedule = @every 5s\n image = busybox\n command = echo foo\n "
364+ _ , err = tmp .WriteString (content1 )
365+ c .Assert (err , IsNil )
366+ tmp .Close ()
367+
368+ logrus .SetLevel (logrus .InfoLevel )
369+
370+ cfg , err := BuildFromFile (tmp .Name (), & TestLogger {})
371+ c .Assert (err , IsNil )
372+ cfg .logger = & TestLogger {}
373+ cfg .dockerHandler = & DockerHandler {}
374+ cfg .sh = core .NewScheduler (& TestLogger {})
375+ cfg .buildSchedulerMiddlewares (cfg .sh )
376+
377+ ApplyLogLevel (cfg .Global .LogLevel )
378+ ms := cfg .sh .Middlewares ()
379+ c .Assert (ms , HasLen , 1 )
380+ saveMw := ms [0 ].(* middlewares.Save )
381+ c .Assert (saveMw .SaveOnlyOnError , Equals , false )
382+ c .Assert (logrus .GetLevel (), Equals , logrus .InfoLevel )
383+
384+ oldTime := cfg .configModTime
385+ content2 := fmt .Sprintf ("[global]\n log-level = DEBUG\n save-folder = %s\n save-only-on-error = true\n " , dir )
386+ content2 += "[job-run \" foo\" ]\n schedule = @every 5s\n image = busybox\n command = echo foo\n "
387+ err = os .WriteFile (tmp .Name (), []byte (content2 ), 0o644 )
388+ c .Assert (err , IsNil )
389+ c .Assert (waitForModTimeChange (tmp .Name (), oldTime ), IsNil )
390+
391+ err = cfg .iniConfigUpdate ()
392+ c .Assert (err , IsNil )
393+ c .Assert (cfg .Global .LogLevel , Equals , "DEBUG" )
394+ ms = cfg .sh .Middlewares ()
395+ c .Assert (ms , HasLen , 1 )
396+ saveMw = ms [0 ].(* middlewares.Save )
397+ c .Assert (saveMw .SaveOnlyOnError , Equals , true )
398+ c .Assert (logrus .GetLevel (), Equals , logrus .DebugLevel )
399+ }
400+
348401func waitForModTimeChange (path string , after time.Time ) error {
349402 info , err := os .Stat (path )
350403 if err != nil {
0 commit comments