summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/guuid.go16
-rw-r--r--tests/guuid.go13
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() {