diff options
author | Jeff R. Allen <jra@nella.org> | 2015-09-10 23:48:20 +0800 |
---|---|---|
committer | Jeff R. Allen <jra@nella.org> | 2015-09-12 18:49:24 +0800 |
commit | 0d4072777520a665637937efd440e06f18ea0626 (patch) | |
tree | c6814091d82cafaae5d6ec192e174493f8d8d6af /Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go | |
parent | 90f1fe0ed2399f90f01c09e61e244121ef7d148a (diff) | |
download | go-tangerine-0d4072777520a665637937efd440e06f18ea0626.tar.gz go-tangerine-0d4072777520a665637937efd440e06f18ea0626.tar.zst go-tangerine-0d4072777520a665637937efd440e06f18ea0626.zip |
Change go-uuid to use the current supported repository.
Diffstat (limited to 'Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go')
-rw-r--r-- | Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go b/Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go new file mode 100644 index 000000000..3b3d1430d --- /dev/null +++ b/Godeps/_workspace/src/github.com/pborman/uuid/seq_test.go @@ -0,0 +1,66 @@ +// Copyright 2014 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import ( + "flag" + "runtime" + "testing" + "time" +) + +// This test is only run when --regressions is passed on the go test line. +var regressions = flag.Bool("regressions", false, "run uuid regression tests") + +// TestClockSeqRace tests for a particular race condition of returning two +// identical Version1 UUIDs. The duration of 1 minute was chosen as the race +// condition, before being fixed, nearly always occured in under 30 seconds. +func TestClockSeqRace(t *testing.T) { + if !*regressions { + t.Skip("skipping regression tests") + } + duration := time.Minute + + done := make(chan struct{}) + defer close(done) + + ch := make(chan UUID, 10000) + ncpu := runtime.NumCPU() + switch ncpu { + case 0, 1: + // We can't run the test effectively. + t.Skip("skipping race test, only one CPU detected") + return + default: + runtime.GOMAXPROCS(ncpu) + } + for i := 0; i < ncpu; i++ { + go func() { + for { + select { + case <-done: + return + case ch <- NewUUID(): + } + } + }() + } + + uuids := make(map[string]bool) + cnt := 0 + start := time.Now() + for u := range ch { + s := u.String() + if uuids[s] { + t.Errorf("duplicate uuid after %d in %v: %s", cnt, time.Since(start), s) + return + } + uuids[s] = true + if time.Since(start) > duration { + return + } + cnt++ + } +} |