7 "github.com/stretchr/testify/require"
10 func TestNewIDPreservesTimestampAndAddsRandomness(t *testing.T) {
11 now := time.UnixMilli(1234567890123)
12 first, err := NewID(now)
13 require.NoError(t, err)
15 second, err := NewID(now)
16 require.NoError(t, err)
17 require.True(t, ValidID(first))
18 require.NotEqual(t, first, second)
19 require.Equal(t, first[:10], second[:10])
21 var milliseconds int64
23 for _, character := range first[:10] {
24 for index, candidate := range idAlphabet {
25 if candidate == character {
26 milliseconds = milliseconds*32 + int64(index)
31 require.Equal(t, now.UnixMilli(), milliseconds)
33 _, err = NewID(time.UnixMilli(-1))
36 _, err = NewID(time.UnixMilli(1 << 48))
40 func TestIdentifiersRejectNoncanonicalText(t *testing.T) {
41 require.True(t, ValidID(deviceID))
43 for _, value := range []string{"", "8123456789ABCDEFGHJKMNPQRST", "0123456789abcdefghjkmnpqrst", "0123456789ABCDEFGHIKMNPQRST"} {
44 require.False(t, ValidID(value), value)
47 for _, value := range []string{"relay", "a0.b1-c2"} {
48 require.True(t, ValidIdentifier(value), value)
51 for _, value := range []string{"", "-relay", "relay.", "a..b", "a.-b", "a_b", "A", "+", "#"} {
52 require.False(t, ValidIdentifier(value), value)