Browse Source

moving random.go from utils

Closes #10962
Signed-off-by: Srini Brahmaroutu <srbrahma@us.ibm.com>
Srini Brahmaroutu 10 years ago
parent
commit
53ece336dc
5 changed files with 72 additions and 19 deletions
  1. 2 2
      engine/engine.go
  2. 9 0
      pkg/common/randomid.go
  3. 59 0
      pkg/common/randomid_test.go
  4. 0 16
      utils/random.go
  5. 2 1
      utils/utils.go

+ 2 - 2
engine/engine.go

@@ -10,8 +10,8 @@ import (
 	"sync"
 	"time"
 
+	"github.com/docker/docker/pkg/common"
 	"github.com/docker/docker/pkg/ioutils"
-	"github.com/docker/docker/utils"
 )
 
 // Installer is a standard interface for objects which can "install" themselves
@@ -77,7 +77,7 @@ func (eng *Engine) RegisterCatchall(catchall Handler) {
 func New() *Engine {
 	eng := &Engine{
 		handlers: make(map[string]Handler),
-		id:       utils.RandomString(),
+		id:       common.RandomString(),
 		Stdout:   os.Stdout,
 		Stderr:   os.Stderr,
 		Stdin:    os.Stdin,

+ 9 - 0
pkg/common/randomid.go

@@ -36,3 +36,12 @@ func GenerateRandomID() string {
 		return value
 	}
 }
+
+func RandomString() string {
+	id := make([]byte, 32)
+
+	if _, err := io.ReadFull(rand.Reader, id); err != nil {
+		panic(err) // This shouldn't happen
+	}
+	return hex.EncodeToString(id)
+}

+ 59 - 0
pkg/common/randomid_test.go

@@ -0,0 +1,59 @@
+package common
+
+import (
+	"testing"
+)
+
+func TestShortenId(t *testing.T) {
+	id := GenerateRandomID()
+	truncID := TruncateID(id)
+	if len(truncID) != 12 {
+		t.Fatalf("Id returned is incorrect: truncate on %s returned %s", id, truncID)
+	}
+}
+
+func TestShortenIdEmpty(t *testing.T) {
+	id := ""
+	truncID := TruncateID(id)
+	if len(truncID) > len(id) {
+		t.Fatalf("Id returned is incorrect: truncate on %s returned %s", id, truncID)
+	}
+}
+
+func TestShortenIdInvalid(t *testing.T) {
+	id := "1234"
+	truncID := TruncateID(id)
+	if len(truncID) != len(id) {
+		t.Fatalf("Id returned is incorrect: truncate on %s returned %s", id, truncID)
+	}
+}
+
+func TestGenerateRandomID(t *testing.T) {
+	id := GenerateRandomID()
+
+	if len(id) != 64 {
+		t.Fatalf("Id returned is incorrect: %s", id)
+	}
+}
+
+func TestRandomString(t *testing.T) {
+	id := RandomString()
+	if len(id) != 64 {
+		t.Fatalf("Id returned is incorrect: %s", id)
+	}
+}
+
+func TestRandomStringUniqueness(t *testing.T) {
+	repeats := 25
+	set := make(map[string]struct{}, repeats)
+	for i := 0; i < repeats; i = i + 1 {
+		id := RandomString()
+		if len(id) != 64 {
+			t.Fatalf("Id returned is incorrect: %s", id)
+		}
+		if _, ok := set[id]; ok {
+			t.Fatalf("Random number is repeated")
+		}
+		set[id] = struct{}{}
+	}
+}

+ 0 - 16
utils/random.go

@@ -1,16 +0,0 @@
-package utils
-
-import (
-	"crypto/rand"
-	"encoding/hex"
-	"io"
-)
-
-func RandomString() string {
-	id := make([]byte, 32)
-
-	if _, err := io.ReadFull(rand.Reader, id); err != nil {
-		panic(err) // This shouldn't happen
-	}
-	return hex.EncodeToString(id)
-}

+ 2 - 1
utils/utils.go

@@ -21,6 +21,7 @@ import (
 	log "github.com/Sirupsen/logrus"
 	"github.com/docker/docker/autogen/dockerversion"
 	"github.com/docker/docker/pkg/archive"
+	"github.com/docker/docker/pkg/common"
 	"github.com/docker/docker/pkg/fileutils"
 	"github.com/docker/docker/pkg/ioutils"
 )
@@ -311,7 +312,7 @@ var globalTestID string
 // new directory.
 func TestDirectory(templateDir string) (dir string, err error) {
 	if globalTestID == "" {
-		globalTestID = RandomString()[:4]
+		globalTestID = common.RandomString()[:4]
 	}
 	prefix := fmt.Sprintf("docker-test%s-%s-", globalTestID, GetCallerName(2))
 	if prefix == "" {