ducky/devices
2015-11-14
Parent:b6494e1a499e
ducky/devices/vendor/code.google.com/p/go-uuid/uuid/version1.go
Add more interface tests. Add a test to ensure that, when retrieving Devices, no error is returned if a Device cannot be found. Add a test to ensure that, when adding Devices, adding a Device that shares an ID with a Device already in the Storer returns an ErrDeviceAlreadyExists error. This involved creating the ErrDeviceAlreadyExists error, and modifying the in-memory implementation to properly return it. Fix a go vet issue in our previous test, wherein we forgot to pass the storer to a log message, resulting in a mismatch between the number of variables expected and the number of variables provided. Rename our tests to be better reflective of what they actually test.
1 // Copyright 2011 Google Inc. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package uuid
7 import (
8 "encoding/binary"
9 )
11 // NewUUID returns a Version 1 UUID based on the current NodeID and clock
12 // sequence, and the current time. If the NodeID has not been set by SetNodeID
13 // or SetNodeInterface then it will be set automatically. If the NodeID cannot
14 // be set NewUUID returns nil. If clock sequence has not been set by
15 // SetClockSequence then it will be set automatically. If GetTime fails to
16 // return the current NewUUID returns nil.
17 func NewUUID() UUID {
18 if nodeID == nil {
19 SetNodeInterface("")
20 }
22 now, seq, err := GetTime()
23 if err != nil {
24 return nil
25 }
27 uuid := make([]byte, 16)
29 time_low := uint32(now & 0xffffffff)
30 time_mid := uint16((now >> 32) & 0xffff)
31 time_hi := uint16((now >> 48) & 0x0fff)
32 time_hi |= 0x1000 // Version 1
34 binary.BigEndian.PutUint32(uuid[0:], time_low)
35 binary.BigEndian.PutUint16(uuid[4:], time_mid)
36 binary.BigEndian.PutUint16(uuid[6:], time_hi)
37 binary.BigEndian.PutUint16(uuid[8:], seq)
38 copy(uuid[10:], nodeID)
40 return uuid
41 }