go_study/fabric-main/orderer/consensus/smartbft/util_test.go

58 lines
902 B
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package smartbft
import (
"encoding/binary"
"sync"
"testing"
"github.com/stretchr/testify/assert"
)
func TestWorker(t *testing.T) {
work := make([][]byte, 13)
for i := 0; i < 13; i++ {
work[i] = make([]byte, 2)
binary.BigEndian.PutUint16(work[i], uint16(i))
}
workDone := make(map[int]struct{})
var lock sync.Mutex
var workers []worker
for i := 0; i < 7; i++ {
workers = append(workers, worker{
workerNum: 7,
work: work,
id: i,
f: func(data []byte) {
lock.Lock()
defer lock.Unlock()
workDone[int(binary.BigEndian.Uint16(data))] = struct{}{}
},
})
}
var wg sync.WaitGroup
wg.Add(7)
for i := 0; i < len(workers); i++ {
go func(i int, w worker) {
defer wg.Done()
w.doWork()
}(i, workers[i])
}
wg.Wait()
assert.Len(t, workDone, 13)
}