KCL: Fix random number generator
Fix the random number generator by adding seed. https://stackoverflow.com/questions/12321133/golang-random-number-generator-how-to-seed-properly Jira CNA-1119 Change-Id: Idfe23d84f31a47dcf43c8025632ff6f115614d34
This commit is contained in:
parent
22de13ef8a
commit
9addbb57f0
3 changed files with 53 additions and 2 deletions
|
|
@ -20,6 +20,7 @@ package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
|
@ -31,6 +32,7 @@ const (
|
||||||
|
|
||||||
func RandStringBytesMaskImpr(n int) string {
|
func RandStringBytesMaskImpr(n int) string {
|
||||||
b := make([]byte, n)
|
b := make([]byte, n)
|
||||||
|
rand.Seed(time.Now().UTC().UnixNano())
|
||||||
// A rand.Int63() generates 63 random bits, enough for letterIdxMax letters!
|
// A rand.Int63() generates 63 random bits, enough for letterIdxMax letters!
|
||||||
for i, cache, remain := n-1, rand.Int63(), letterIdxMax; i >= 0; {
|
for i, cache, remain := n-1, rand.Int63(), letterIdxMax; i >= 0; {
|
||||||
if remain == 0 {
|
if remain == 0 {
|
||||||
|
|
|
||||||
50
clientlibrary/utils/random_test.go
Normal file
50
clientlibrary/utils/random_test.go
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018 VMware, Inc.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||||
|
* associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||||
|
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is furnished to do
|
||||||
|
* so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||||
|
* portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
|
||||||
|
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestRandom(t *testing.T) {
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
s1 := RandStringBytesMaskImpr(10)
|
||||||
|
s2 := RandStringBytesMaskImpr(10)
|
||||||
|
if s1 == s2 {
|
||||||
|
t.Fatalf("failed in generating random string. s1: %s, s2: %s", s1, s2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRandomNum(t *testing.T) {
|
||||||
|
rand.Seed(time.Now().UTC().UnixNano())
|
||||||
|
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
s1 := rand.Int63()
|
||||||
|
s2 := rand.Int63()
|
||||||
|
if s1 == s2 {
|
||||||
|
t.Fatalf("failed in generating random string. s1: %d, s2: %d", s1, s2)
|
||||||
|
}
|
||||||
|
fmt.Println(s1)
|
||||||
|
fmt.Println(s2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -335,10 +335,9 @@ func (checkpointer *DynamoCheckpoint) getItem(shardID string) (map[string]*dynam
|
||||||
}
|
}
|
||||||
|
|
||||||
func (checkpointer *DynamoCheckpoint) removeItem(shardID string) error {
|
func (checkpointer *DynamoCheckpoint) removeItem(shardID string) error {
|
||||||
var item *dynamodb.DeleteItemOutput
|
|
||||||
err := try.Do(func(attempt int) (bool, error) {
|
err := try.Do(func(attempt int) (bool, error) {
|
||||||
var err error
|
var err error
|
||||||
item, err = checkpointer.svc.DeleteItem(&dynamodb.DeleteItemInput{
|
_, err = checkpointer.svc.DeleteItem(&dynamodb.DeleteItemInput{
|
||||||
TableName: aws.String(checkpointer.TableName),
|
TableName: aws.String(checkpointer.TableName),
|
||||||
Key: map[string]*dynamodb.AttributeValue{
|
Key: map[string]*dynamodb.AttributeValue{
|
||||||
LEASE_KEY_KEY: {
|
LEASE_KEY_KEY: {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue