From 35980234b51212ef14318be7653513745c6f413e Mon Sep 17 00:00:00 2001 From: thibauult Date: Fri, 12 Jan 2024 12:38:59 +0100 Subject: [PATCH] Added tests for the Timer --- cmd/root.go | 28 ++++++++++++---------------- util/metrics.go | 9 +++++++++ util/metrics_test.go | 17 +++++++++++++++++ 3 files changed, 38 insertions(+), 16 deletions(-) create mode 100644 util/metrics_test.go diff --git a/cmd/root.go b/cmd/root.go index 198f9b6..f5d6c2f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -36,6 +36,16 @@ openhue controls your Philips Hue lighting system }, } + cmd.AddGroup(&cobra.Group{ + ID: string(OpenHueCmdGroupConfig), + Title: "Configuration", + }) + + cmd.AddGroup(&cobra.Group{ + ID: string(OpenHueCmdGroupHue), + Title: "Philips Hue", + }) + return cmd } @@ -66,9 +76,6 @@ func Execute(buildInfo *openhue.BuildInfo) { // create the root command root := NewCmdOpenHue(ctx) - // init groups - initGroups(root) - // add sub commands root.AddCommand(version.NewCmdVersion(ctx)) root.AddCommand(setup.NewCmdAuth(ctx.Io)) @@ -83,19 +90,8 @@ func Execute(buildInfo *openhue.BuildInfo) { cobra.CheckErr(err) } -func initGroups(rootCmd *cobra.Command) { - rootCmd.AddGroup(&cobra.Group{ - ID: string(OpenHueCmdGroupConfig), - Title: "Configuration", - }) - - rootCmd.AddGroup(&cobra.Group{ - ID: string(OpenHueCmdGroupHue), - Title: "Philips Hue", - }) -} - -// isCmdInGroup verifies if a given cobra.Command belongs to a certain OpenHueCmdGroup +// isCmdInGroup verifies if a given cobra.Command belongs to a certain OpenHueCmdGroup. +// This function will recursively command parents until the root one (e.g. parent is nil) func isCmdInGroup(cmd *cobra.Command, id OpenHueCmdGroup) bool { if cmd.GroupID == string(id) { diff --git a/util/metrics.go b/util/metrics.go index fc351ab..aaac519 100644 --- a/util/metrics.go +++ b/util/metrics.go @@ -2,10 +2,12 @@ package util import "time" +// NewTimer creates a new started Timer func NewTimer() *Timer { return new(Timer).start() } +// Timer can be used to monitor the execution time of a given method type Timer struct { t0 time.Time } @@ -15,6 +17,13 @@ func (t *Timer) start() *Timer { return t } +// Reset sets the Timer initial time to time.Now() +func (t *Timer) Reset() *Timer { + t.t0 = time.Now() + return t +} + +// SinceInMillis returns the elapsed time in milliseconds since the Timer was started or Reset func (t *Timer) SinceInMillis() int64 { return time.Since(t.t0).Milliseconds() } diff --git a/util/metrics_test.go b/util/metrics_test.go new file mode 100644 index 0000000..e9fe785 --- /dev/null +++ b/util/metrics_test.go @@ -0,0 +1,17 @@ +package util + +import ( + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +func TestNewTimer(t *testing.T) { + timer := NewTimer() + assert.NotNil(t, timer) + time.Sleep(1 * time.Millisecond) + assert.True(t, timer.SinceInMillis() >= 1, "we slept for 1 millis") + timer.Reset() + time.Sleep(2 * time.Millisecond) + assert.True(t, timer.SinceInMillis() >= 2, "we slept for 2 millis") +}