diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:23:18 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:23:18 +0000 |
commit | 43a123c1ae6613b3efeed291fa552ecd909d3acf (patch) | |
tree | fd92518b7024bc74031f78a1cf9e454b65e73665 /src/time/internal_test.go | |
parent | Initial commit. (diff) | |
download | golang-1.20-43a123c1ae6613b3efeed291fa552ecd909d3acf.tar.xz golang-1.20-43a123c1ae6613b3efeed291fa552ecd909d3acf.zip |
Adding upstream version 1.20.14.upstream/1.20.14upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/time/internal_test.go')
-rw-r--r-- | src/time/internal_test.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/time/internal_test.go b/src/time/internal_test.go new file mode 100644 index 0000000..4c4a720 --- /dev/null +++ b/src/time/internal_test.go @@ -0,0 +1,72 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package time + +func init() { + // Force US/Pacific for time zone tests. + ForceUSPacificForTesting() +} + +func initTestingZone() { + // For hermeticity, use only tzinfo source from the test's GOROOT, + // not the system sources and not whatever GOROOT may happen to be + // set in the process's environment (if any). + // This test runs in GOROOT/src/time, so GOROOT is "../..", + // but it is theoretically possible + sources := []string{"../../lib/time/zoneinfo.zip"} + z, err := loadLocation("America/Los_Angeles", sources) + if err != nil { + panic("cannot load America/Los_Angeles for testing: " + err.Error() + "; you may want to use -tags=timetzdata") + } + z.name = "Local" + localLoc = *z +} + +var origPlatformZoneSources []string = platformZoneSources + +func disablePlatformSources() (undo func()) { + platformZoneSources = nil + return func() { + platformZoneSources = origPlatformZoneSources + } +} + +var Interrupt = interrupt +var DaysIn = daysIn + +func empty(arg any, seq uintptr) {} + +// Test that a runtimeTimer with a period that would overflow when on +// expiration does not throw or cause other timers to hang. +// +// This test has to be in internal_test.go since it fiddles with +// unexported data structures. +func CheckRuntimeTimerPeriodOverflow() { + // We manually create a runtimeTimer with huge period, but that expires + // immediately. The public Timer interface would require waiting for + // the entire period before the first update. + r := &runtimeTimer{ + when: runtimeNano(), + period: 1<<63 - 1, + f: empty, + arg: nil, + } + startTimer(r) + defer stopTimer(r) + + // If this test fails, we will either throw (when siftdownTimer detects + // bad when on update), or other timers will hang (if the timer in a + // heap is in a bad state). There is no reliable way to test this, but + // we wait on a short timer here as a smoke test (alternatively, timers + // in later tests may hang). + <-After(25 * Millisecond) +} + +var ( + MinMonoTime = Time{wall: 1 << 63, ext: -1 << 63, loc: UTC} + MaxMonoTime = Time{wall: 1 << 63, ext: 1<<63 - 1, loc: UTC} + + NotMonoNegativeTime = Time{wall: 0, ext: -1<<63 + 50} +) |