This repository has been archived by the owner on Oct 24, 2022. It is now read-only.
forked from kubeedge/kubeedge
/
timer.go
95 lines (80 loc) · 2.46 KB
/
timer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
Copyright 2019 The KubeEdge Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package utils
import (
"sync"
"time"
)
// TestTimer represents a test timer
type TestTimer struct {
Name string
StartTime time.Time
EndTime time.Time
}
// End is used to end the test timer
func (testTimer *TestTimer) End() {
if !testTimer.IsEnded() {
testTimer.EndTime = time.Now()
}
}
// IsEnded represents if the test timer is ended
func (testTimer *TestTimer) IsEnded() bool {
return !testTimer.EndTime.IsZero()
}
// Duration is used to calculate the duration
func (testTimer *TestTimer) Duration() time.Duration {
endTime := testTimer.EndTime
if !testTimer.IsEnded() {
endTime = time.Now()
}
return endTime.Sub(testTimer.StartTime)
}
// PrintResult prints the result of the test timer
func (testTimer *TestTimer) PrintResult() {
if testTimer.IsEnded() {
Info("Test case name: %s start time: %v duration: %v\n",
testTimer.Name, testTimer.StartTime, testTimer.Duration())
} else {
Info("Test case name: %s start time: %v duration: %v so far\n",
testTimer.Name, testTimer.StartTime, testTimer.Duration())
}
}
// TestTimerGroup includes one or more test timers
type TestTimerGroup struct {
mutex sync.Mutex
testTimers []*TestTimer
}
// NewTestTimerGroup creates a new test timer group
func NewTestTimerGroup() *TestTimerGroup {
return &TestTimerGroup{}
}
// NewTestTimer creates a new test timer
func (group *TestTimerGroup) NewTestTimer(name string) *TestTimer {
group.mutex.Lock()
defer group.mutex.Unlock()
testTimer := &TestTimer{Name: name, StartTime: time.Now()}
group.testTimers = append(group.testTimers, testTimer)
return testTimer
}
// GetTestTimers returns test timers
func (group *TestTimerGroup) GetTestTimers() []*TestTimer {
return group.testTimers
}
// PrintResult prints the results of all test timers.
func (group *TestTimerGroup) PrintResult() {
group.mutex.Lock()
defer group.mutex.Unlock()
for _, testTimer := range group.testTimers {
testTimer.PrintResult()
}
}