diff options
-rw-r--r-- | src/guuid.go | 16 | ||||
-rw-r--r-- | tests/guuid.go | 13 |
2 files changed, 21 insertions, 8 deletions
diff --git a/src/guuid.go b/src/guuid.go index f4c6d7b..e4f5f14 100644 --- a/src/guuid.go +++ b/src/guuid.go @@ -17,8 +17,8 @@ const ( ) var ( - dashIndexes = []int { 8, 13, 18, 23 } - emptyUUID = UUID {} + dashIndexes = []int{ 8, 13, 18, 23 } + randomReader = rand.Reader ErrBadLength = errors.New("guuid: str isn't of the correct length") ErrBadDashCount = errors.New("guuid: Bad count of dashes in string") @@ -35,7 +35,7 @@ func NewFrom(r io.Reader) (UUID, error) { var uuid UUID _, err := io.ReadFull(r, uuid[:]) if err != nil { - return emptyUUID, err + return UUID{}, err } uuid[6] = (uuid[6] & 0x0f) | 0x40 // v4 uuid[8] = (uuid[8] & 0x3f) | 0x80 // variant 10 @@ -43,7 +43,7 @@ func NewFrom(r io.Reader) (UUID, error) { } func New() UUID { - uuid, err := NewFrom(rand.Reader) + uuid, err := NewFrom(randomReader) if err != nil { panic(err) } @@ -77,23 +77,23 @@ func (uuid UUID) String() string { func FromString(str string) (UUID, error) { if len(str) != encodedLength { - return emptyUUID, ErrBadLength + return UUID{}, ErrBadLength } if strings.Count(str, "-") != dashCount { - return emptyUUID, ErrBadDashCount + return UUID{}, ErrBadDashCount } for _, idx := range dashIndexes { if str[idx] != '-' { - return emptyUUID, ErrBadDashPosition + return UUID{}, ErrBadDashPosition } } hexstr := strings.Join(strings.Split(str, "-"), "") data, err := hex.DecodeString(hexstr) if err != nil { - return emptyUUID, err + return UUID{}, err } return [ByteCount]byte(data), nil diff --git a/tests/guuid.go b/tests/guuid.go index 786a32c..58e748e 100644 --- a/tests/guuid.go +++ b/tests/guuid.go @@ -165,6 +165,19 @@ func test_New() { var uuid UUID = New() assertEq(len(uuid), 16) }) + + testing("panic when the randomReader fails", func() { + savedReader := randomReader + randomReader = strings.NewReader("abc") + defer func() { + r := recover() + assertEq(r == nil, false) + randomReader = savedReader + }() + + New() + assertEq(true, false) + }) } func test_String() { |