1// Copyright 2016 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Package util provides general utility functions for the CT personality.
16package util
17
18import "time"
19
20// TimeSource can provide the current time, or be replaced by a mock in tests to return
21// specific values.
22type TimeSource interface {
23	// Now returns the current time in real implementations or a suitable value in others
24	Now() time.Time
25}
26
27// SystemTimeSource provides the current system local time
28type SystemTimeSource struct{}
29
30// Now returns the true current local time.
31func (s SystemTimeSource) Now() time.Time {
32	return time.Now()
33}
34
35// FixedTimeSource provides a fixed time for use in tests.
36// It should not be used in production code.
37type FixedTimeSource struct {
38	fakeTime time.Time
39}
40
41// NewFixedTimeSource creates a FixedTimeSource instance
42func NewFixedTimeSource(t time.Time) *FixedTimeSource {
43	return &FixedTimeSource{fakeTime: t}
44}
45
46// Now returns the time value this instance contains
47func (f *FixedTimeSource) Now() time.Time {
48	return f.fakeTime
49}
50