notify/record_negotiation_test.go

79 lines
2.3 KiB
Go
Raw Normal View History

package notify
import (
"context"
"net"
"testing"
"time"
)
func TestNegotiateRecordStreamOpenMetadataEnablesBatchAck(t *testing.T) {
reqMetadata, respMetadata := negotiateRecordStreamOpenMetadata(StreamRecordChannel, StreamMetadata{
recordStreamMetadataCapBatchAckKey: recordStreamMetadataEnabledValue,
})
if !recordStreamUseBatchAck(reqMetadata) {
t.Fatal("request metadata should enable batch ack")
}
if !recordStreamUseBatchAck(respMetadata) {
t.Fatal("response metadata should enable batch ack")
}
}
func TestNegotiateRecordStreamOpenMetadataKeepsFallbackWithoutCapability(t *testing.T) {
reqMetadata, respMetadata := negotiateRecordStreamOpenMetadata(StreamRecordChannel, nil)
if recordStreamUseBatchAck(reqMetadata) {
t.Fatalf("request metadata should keep fallback mode: %+v", reqMetadata)
}
if recordStreamUseBatchAck(respMetadata) {
t.Fatalf("response metadata should keep fallback mode: %+v", respMetadata)
}
}
func TestOpenRecordStreamNegotiatesBatchAck(t *testing.T) {
server := NewServer().(*ServerCommon)
secret := []byte("0123456789abcdef0123456789abcdef")
server = newRunningPeerAttachServerForTest(t, func(server *ServerCommon) {
server.SetSecretKey(secret)
})
acceptedCh := make(chan RecordAcceptInfo, 1)
server.SetRecordStreamHandler(func(info RecordAcceptInfo) error {
acceptedCh <- info
return nil
})
client := NewClient().(*ClientCommon)
client.SetSecretKey(secret)
left, right := net.Pipe()
defer right.Close()
bootstrapPeerAttachConnForTest(t, server, right)
if err := client.ConnectByConn(left); err != nil {
t.Fatalf("client ConnectByConn failed: %v", err)
}
defer func() {
client.setByeFromServer(true)
_ = client.Stop()
}()
record, err := client.OpenRecordStream(context.Background(), RecordOpenOptions{})
if err != nil {
t.Fatalf("OpenRecordStream failed: %v", err)
}
defer func() {
_ = record.Close()
}()
if !recordStreamUseBatchAck(record.Metadata()) {
t.Fatalf("client record stream metadata should negotiate batch ack: %+v", record.Metadata())
}
select {
case accepted := <-acceptedCh:
if !recordStreamUseBatchAck(accepted.Metadata) {
t.Fatalf("accepted record metadata should negotiate batch ack: %+v", accepted.Metadata)
}
case <-time.After(2 * time.Second):
t.Fatal("timed out waiting accepted record stream")
}
}