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 }