| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package dtls
- import (
- "context"
- "crypto/tls"
- "fmt"
- "testing"
- "time"
- "github.com/pion/dtls/v2/internal/net/dpipe"
- "github.com/pion/dtls/v2/pkg/crypto/selfsign"
- "github.com/pion/logging"
- "github.com/pion/transport/test"
- )
- func TestSimpleReadWrite(t *testing.T) {
- report := test.CheckRoutines(t)
- defer report()
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- ca, cb := dpipe.Pipe()
- certificate, err := selfsign.GenerateSelfSigned()
- if err != nil {
- t.Fatal(err)
- }
- gotHello := make(chan struct{})
- go func() {
- server, sErr := testServer(ctx, cb, &Config{
- Certificates: []tls.Certificate{certificate},
- LoggerFactory: logging.NewDefaultLoggerFactory(),
- }, false)
- if sErr != nil {
- t.Error(sErr)
- return
- }
- buf := make([]byte, 1024)
- if _, sErr = server.Read(buf); sErr != nil {
- t.Error(sErr)
- }
- gotHello <- struct{}{}
- if sErr = server.Close(); sErr != nil {
- t.Error(sErr)
- }
- }()
- client, err := testClient(ctx, ca, &Config{
- LoggerFactory: logging.NewDefaultLoggerFactory(),
- InsecureSkipVerify: true,
- }, false)
- if err != nil {
- t.Fatal(err)
- }
- if _, err = client.Write([]byte("hello")); err != nil {
- t.Error(err)
- }
- select {
- case <-gotHello:
- // OK
- case <-time.After(time.Second * 5):
- t.Error("timeout")
- }
- if err = client.Close(); err != nil {
- t.Error(err)
- }
- }
- func benchmarkConn(b *testing.B, n int64) {
- b.Run(fmt.Sprintf("%d", n), func(b *testing.B) {
- ctx := context.Background()
- ca, cb := dpipe.Pipe()
- certificate, err := selfsign.GenerateSelfSigned()
- server := make(chan *Conn)
- go func() {
- s, sErr := testServer(ctx, cb, &Config{
- Certificates: []tls.Certificate{certificate},
- }, false)
- if err != nil {
- b.Error(sErr)
- return
- }
- server <- s
- }()
- if err != nil {
- b.Fatal(err)
- }
- hw := make([]byte, n)
- b.ReportAllocs()
- b.SetBytes(int64(len(hw)))
- go func() {
- client, cErr := testClient(ctx, ca, &Config{InsecureSkipVerify: true}, false)
- if cErr != nil {
- b.Error(err)
- }
- for {
- if _, cErr = client.Write(hw); cErr != nil {
- b.Error(err)
- }
- }
- }()
- s := <-server
- buf := make([]byte, 2048)
- for i := 0; i < b.N; i++ {
- if _, err = s.Read(buf); err != nil {
- b.Error(err)
- }
- }
- })
- }
- func BenchmarkConnReadWrite(b *testing.B) {
- for _, n := range []int64{16, 128, 512, 1024, 2048} {
- benchmarkConn(b, n)
- }
- }
|