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  }