From 4ae606a320c4f4372e13377e82d68cbdfc8c6b3a Mon Sep 17 00:00:00 2001 From: kencx Date: Mon, 6 Jun 2022 13:35:26 +0800 Subject: [PATCH] Refactor setLock to accept key value pairs This allows SetCron and Lock to use the same function setLockValue. It also removes the need to call getLock explicitly in tests by returning the lock object. --- internal/lock/lock.go | 32 +++++++++++++++++++------------- internal/lock/lock_test.go | 10 +++++----- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/internal/lock/lock.go b/internal/lock/lock.go index 4667cb1..4e9fd52 100644 --- a/internal/lock/lock.go +++ b/internal/lock/lock.go @@ -14,6 +14,10 @@ var lock *viper.Viper var file string var once sync.Once +const ( + RUNNING = "running" +) + func getLock() *viper.Viper { if lock == nil { @@ -37,36 +41,38 @@ func getLock() *viper.Viper { return lock } -func setLock(locked bool) error { +func setLockValue(key string, value interface{}) (*viper.Viper, error) { lock := getLock() - if locked { - running := lock.GetBool("running") - if running { + + if key == RUNNING { + value := value.(bool) + if value && lock.GetBool(key) { colors.Error.Println("an instance is already running. exiting") os.Exit(1) } } - lock.Set("running", locked) + + lock.Set(key, value) if err := lock.WriteConfigAs(file); err != nil { - return err + return nil, err } - return nil + return lock, nil } func GetCron(location string) int64 { - lock := getLock() - return lock.GetInt64("cron." + location) + return getLock().GetInt64("cron." + location) } func SetCron(location string, value int64) { - lock.Set("cron."+location, value) - lock.WriteConfigAs(file) + setLockValue("cron."+location, value) } func Lock() error { - return setLock(true) + _, err := setLockValue(RUNNING, true) + return err } func Unlock() error { - return setLock(false) + _, err := setLockValue(RUNNING, false) + return err } diff --git a/internal/lock/lock_test.go b/internal/lock/lock_test.go index 3d7feb7..d5e90f4 100644 --- a/internal/lock/lock_test.go +++ b/internal/lock/lock_test.go @@ -31,7 +31,7 @@ func TestLock(t *testing.T) { setup(t) t.Run("getLock", func(t *testing.T) { - result := getLock().GetBool("running") + result := getLock().GetBool(RUNNING) if result { t.Errorf("got %v, want %v", result, false) @@ -39,24 +39,24 @@ func TestLock(t *testing.T) { }) t.Run("lock", func(t *testing.T) { - err := Lock() + lock, err := setLockValue(RUNNING, true) if err != nil { t.Errorf("unexpected error: %v", err) } - result := getLock().GetBool("running") + result := lock.GetBool(RUNNING) if !result { t.Errorf("got %v, want %v", result, true) } }) t.Run("unlock", func(t *testing.T) { - err := Unlock() + lock, err := setLockValue(RUNNING, false) if err != nil { t.Errorf("unexpected error: %v", err) } - result := getLock().GetBool("running") + result := lock.GetBool(RUNNING) if result { t.Errorf("got %v, want %v", result, false) }