github.com/myafeier/fabric@v1.0.1-0.20170722181825-3a4b1f2bce86/gossip/util/misc_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package util 8 9 import ( 10 "crypto/rand" 11 "errors" 12 "testing" 13 14 "time" 15 16 "github.com/spf13/viper" 17 "github.com/stretchr/testify/assert" 18 "github.com/stretchr/testify/mock" 19 ) 20 21 func testHappyPath(t *testing.T) { 22 n1 := RandomInt(10000) 23 n2 := RandomInt(10000) 24 assert.NotEqual(t, n1, n2) 25 n3 := RandomUInt64() 26 n4 := RandomUInt64() 27 assert.NotEqual(t, n3, n4) 28 } 29 30 func TestGetRandomInt(t *testing.T) { 31 testHappyPath(t) 32 } 33 34 func TestNonNegativeValues(t *testing.T) { 35 assert.True(t, RandomInt(1000000) >= 0) 36 } 37 38 func TestGetRandomIntBadInput(t *testing.T) { 39 f1 := func() { 40 RandomInt(0) 41 } 42 f2 := func() { 43 RandomInt(-500) 44 } 45 assert.Panics(t, f1) 46 assert.Panics(t, f2) 47 } 48 49 type reader struct { 50 mock.Mock 51 } 52 53 func (r *reader) Read(p []byte) (int, error) { 54 args := r.Mock.Called(p) 55 n := args.Get(0).(int) 56 err := args.Get(1) 57 if err == nil { 58 return n, nil 59 } 60 return n, err.(error) 61 } 62 63 func TestGetRandomIntNoEntropy(t *testing.T) { 64 rr := rand.Reader 65 defer func() { 66 rand.Reader = rr 67 }() 68 r := &reader{} 69 r.On("Read", mock.Anything).Return(0, errors.New("Not enough entropy")) 70 rand.Reader = r 71 // Make sure randomness still works even when we have no entropy 72 testHappyPath(t) 73 } 74 75 func TestRandomIndices(t *testing.T) { 76 assert.Nil(t, GetRandomIndices(10, 5)) 77 GetRandomIndices(10, 9) 78 GetRandomIndices(10, 12) 79 } 80 81 func TestGetIntOrDefault(t *testing.T) { 82 viper.Set("N", 100) 83 n := GetIntOrDefault("N", 100) 84 assert.Equal(t, 100, n) 85 m := GetIntOrDefault("M", 101) 86 assert.Equal(t, 101, m) 87 } 88 89 func TestGetDurationOrDefault(t *testing.T) { 90 viper.Set("foo", time.Second) 91 foo := GetDurationOrDefault("foo", time.Second*2) 92 assert.Equal(t, time.Second, foo) 93 bar := GetDurationOrDefault("bar", time.Second*2) 94 assert.Equal(t, time.Second*2, bar) 95 } 96 97 func TestPrintStackTrace(t *testing.T) { 98 PrintStackTrace() 99 } 100 101 func TestGetLogger(t *testing.T) { 102 l1 := GetLogger("foo", "bar") 103 l2 := GetLogger("foo", "bar") 104 assert.Equal(t, l1, l2) 105 } 106 107 func TestSet(t *testing.T) { 108 s := NewSet() 109 assert.Len(t, s.ToArray(), 0) 110 assert.Equal(t, s.Size(), 0) 111 assert.False(t, s.Exists(42)) 112 s.Add(42) 113 assert.True(t, s.Exists(42)) 114 assert.Len(t, s.ToArray(), 1) 115 assert.Equal(t, s.Size(), 1) 116 s.Remove(42) 117 assert.False(t, s.Exists(42)) 118 s.Add(42) 119 assert.True(t, s.Exists(42)) 120 s.Clear() 121 assert.False(t, s.Exists(42)) 122 }