lnd.xprv/htlcswitch/queue_test.go
Andrey Samokhvalov 22d90d6b35 htlcswitch: add packet queue
In this commit pending packet queue have been added. This queue
consumes the htlc packet, store it inside the golang list and send it
to the pending channel upon release notification.
2017-05-31 11:06:08 -07:00

44 lines
864 B
Go

package htlcswitch
import (
"reflect"
"testing"
"time"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/roasbeef/btcutil"
)
// TestWaitingQueueThreadSafety test the thread safety properties of the
// waiting queue, by executing methods in seprate goroutines which operates
// with the same data.
func TestWaitingQueueThreadSafety(t *testing.T) {
q := newWaitingQueue()
a := make([]btcutil.Amount, 1000)
for i := 0; i < len(a); i++ {
a[i] = btcutil.Amount(i)
q.consume(&htlcPacket{
amount: btcutil.Amount(i),
htlc: &lnwire.UpdateAddHTLC{},
})
}
var b []btcutil.Amount
for i := 0; i < len(a); i++ {
q.release()
select {
case packet := <-q.pending:
b = append(b, packet.amount)
case <-time.After(2 * time.Second):
t.Fatal("timeout")
}
}
if !reflect.DeepEqual(b, a) {
t.Fatal("wrong order of the objects")
}
}