go.dedis.ch/onet/v4@v4.0.0-pre1/network/tls_test.go (about)

     1  package network
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/require"
     9  	"go.dedis.ch/kyber/v4/suites"
    10  	"go.dedis.ch/kyber/v4/util/key"
    11  )
    12  
    13  func NewTestTLSHost(suite suites.Suite, port int) (*TCPHost, error) {
    14  	addr := NewTLSAddress("127.0.0.1:" + strconv.Itoa(port))
    15  	kp := key.NewKeyPair(suite)
    16  	e := NewServerIdentity(kp.Public, addr)
    17  	e.SetPrivate(kp.Private)
    18  	return NewTCPHost(e, suite)
    19  }
    20  
    21  func NewTestRouterTLS(suite suites.Suite, port int) (*Router, error) {
    22  	h, err := NewTestTLSHost(suite, port)
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  	h.sid.Address = h.TCPListener.Address()
    27  	r := NewRouter(h.sid, h)
    28  	return r, nil
    29  }
    30  
    31  type hello struct {
    32  	Hello string
    33  	From  ServerIdentity
    34  }
    35  
    36  func TestTLS(t *testing.T) {
    37  	testTLS(t, tSuite)
    38  }
    39  
    40  func TestTLS_bn256(t *testing.T) {
    41  	s := suites.MustFind("bn256.g2")
    42  	testTLS(t, s)
    43  }
    44  
    45  func testTLS(t *testing.T, s suites.Suite) {
    46  	r1, err := NewTestRouterTLS(s, 0)
    47  	require.Nil(t, err, "new tcp router")
    48  	r2, err := NewTestRouterTLS(s, 0)
    49  	require.Nil(t, err, "new tcp router 2")
    50  
    51  	ready := make(chan bool)
    52  	stop := make(chan bool)
    53  	rcv := make(chan bool, 1)
    54  
    55  	mt := RegisterMessage(&hello{})
    56  	r1.Dispatcher.RegisterProcessorFunc(mt, func(*Envelope) error {
    57  		rcv <- true
    58  		return nil
    59  	})
    60  
    61  	go func() {
    62  		ready <- true
    63  		r1.Start()
    64  		stop <- true
    65  	}()
    66  	go func() {
    67  		ready <- true
    68  		r2.Start()
    69  		stop <- true
    70  	}()
    71  
    72  	<-ready
    73  	<-ready
    74  
    75  	// We want these cleanups to happen if we leave by the require failing
    76  	// or by the end of the function.
    77  	defer func() {
    78  		r1.Stop()
    79  		r2.Stop()
    80  
    81  		for i := 0; i < 2; i++ {
    82  			select {
    83  			case <-stop:
    84  			case <-time.After(100 * time.Millisecond):
    85  				t.Fatal("Could not stop router", i)
    86  			}
    87  		}
    88  	}()
    89  
    90  	// now send a message from r2 to r1
    91  	sentLen, err := r2.Send(r1.ServerIdentity, &hello{
    92  		Hello: "Howdy.",
    93  		From:  *r2.ServerIdentity,
    94  	})
    95  	require.Nil(t, err, "Could not router.Send")
    96  	require.NotZero(t, sentLen)
    97  
    98  	<-rcv
    99  }
   100  
   101  func BenchmarkMsgTCP(b *testing.B) {
   102  	r1, err := NewTestRouterTCP(0)
   103  	require.Nil(b, err, "new tcp router")
   104  	r2, err := NewTestRouterTCP(0)
   105  	require.Nil(b, err, "new tcp router 2")
   106  	benchmarkMsg(b, r1, r2)
   107  }
   108  
   109  func BenchmarkMsgTLS(b *testing.B) {
   110  	r1, err := NewTestRouterTLS(tSuite, 0)
   111  	require.Nil(b, err, "new tls router")
   112  	r2, err := NewTestRouterTLS(tSuite, 0)
   113  	require.Nil(b, err, "new tls router 2")
   114  	benchmarkMsg(b, r1, r2)
   115  }
   116  
   117  func benchmarkMsg(b *testing.B, r1, r2 *Router) {
   118  	mt := RegisterMessage(&hello{})
   119  	r1.Dispatcher.RegisterProcessorFunc(mt, func(*Envelope) error {
   120  		// Don't do anything. We are not interested in
   121  		// benchmarking this work.
   122  		return nil
   123  	})
   124  
   125  	ready := make(chan bool)
   126  	stop := make(chan bool)
   127  
   128  	go func() {
   129  		ready <- true
   130  		r1.Start()
   131  		stop <- true
   132  	}()
   133  	go func() {
   134  		ready <- true
   135  		r2.Start()
   136  		stop <- true
   137  	}()
   138  
   139  	<-ready
   140  	<-ready
   141  
   142  	// Setup is complete.
   143  	b.ReportAllocs()
   144  	b.ResetTimer()
   145  
   146  	// Send one message from r2 to r1.
   147  	for i := 0; i < b.N; i++ {
   148  		_, err := r2.Send(r1.ServerIdentity, &hello{
   149  			Hello: "Howdy.",
   150  			From:  *r2.ServerIdentity,
   151  		})
   152  		if err != nil {
   153  			b.Log("Could not router.Send")
   154  		}
   155  	}
   156  
   157  	r1.Stop()
   158  	r2.Stop()
   159  
   160  	for i := 0; i < 2; i++ {
   161  		select {
   162  		case <-stop:
   163  		case <-time.After(100 * time.Millisecond):
   164  			b.Fatal("Could not stop router", i)
   165  		}
   166  	}
   167  }
   168  
   169  func Test_pubFromCN(t *testing.T) {
   170  	p1 := tSuite.Point().Pick(tSuite.RandomStream())
   171  
   172  	// old-style
   173  	cn := p1.String()
   174  
   175  	p2, err := pubFromCN(tSuite, cn)
   176  	require.NoError(t, err)
   177  	require.True(t, p2.Equal(p1))
   178  
   179  	// new-style
   180  	cn = pubToCN(p1)
   181  
   182  	p2, err = pubFromCN(tSuite, cn)
   183  	require.NoError(t, err)
   184  	require.True(t, p2.Equal(p1))
   185  }