Revert "Don't use modules"

This reverts commit bffe99aead.
This commit is contained in:
Mathias Hall-Andersen
2018-02-12 22:29:11 +01:00
parent bffe99aead
commit ea4ea6f933
9 changed files with 23 additions and 20 deletions

26
internal/tai64n/tai64n.go Normal file
View File

@@ -0,0 +1,26 @@
package tai64n
import (
"bytes"
"encoding/binary"
"time"
)
const TimestampSize = 12
const base = uint64(4611686018427387914)
type Timestamp [TimestampSize]byte
func Now() Timestamp {
var tai64n Timestamp
now := time.Now()
secs := base + uint64(now.Unix())
nano := uint32(now.UnixNano())
binary.BigEndian.PutUint64(tai64n[:], secs)
binary.BigEndian.PutUint32(tai64n[8:], nano)
return tai64n
}
func (t1 Timestamp) After(t2 Timestamp) bool {
return bytes.Compare(t1[:], t2[:]) > 0
}

View File

@@ -0,0 +1,21 @@
package tai64n
import (
"testing"
"time"
)
/* Testing the essential property of the timestamp
* as used by WireGuard.
*/
func TestMonotonic(t *testing.T) {
old := Now()
for i := 0; i < 10000; i++ {
time.Sleep(time.Nanosecond)
next := Now()
if !next.After(old) {
t.Error("TAI64N, not monotonically increasing on nano-second scale")
}
old = next
}
}