mirror of
https://github.com/logos-messaging/noise.git
synced 2026-01-02 14:13:07 +00:00
77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package pipe
|
|
|
|
import (
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/titanous/noise/box"
|
|
. "gopkg.in/check.v1"
|
|
)
|
|
|
|
func Test(t *testing.T) { TestingT(t) }
|
|
|
|
type S struct{}
|
|
|
|
var _ = Suite(&S{})
|
|
|
|
type rwc struct {
|
|
io.Reader
|
|
io.WriteCloser
|
|
}
|
|
|
|
func (s *S) TestRoundtrip(c *C) {
|
|
serverR, clientW := io.Pipe()
|
|
clientR, serverW := io.Pipe()
|
|
|
|
sk, err := box.Noise255.GenerateKey(nil)
|
|
c.Assert(err, IsNil)
|
|
ck, err := box.Noise255.GenerateKey(nil)
|
|
c.Assert(err, IsNil)
|
|
serverConfig := &Config{
|
|
Cipher: box.Noise255,
|
|
Key: &sk,
|
|
PeerKey: &box.Key{Public: ck.Public},
|
|
}
|
|
clientConfig := &Config{
|
|
Cipher: box.Noise255,
|
|
Key: &ck,
|
|
PeerKey: &box.Key{Public: sk.Public},
|
|
}
|
|
|
|
server, err := Server(&rwc{serverR, serverW}, serverConfig)
|
|
c.Assert(err, IsNil)
|
|
client, err := Client(&rwc{clientR, clientW}, clientConfig)
|
|
c.Assert(err, IsNil)
|
|
|
|
ch := make(chan error)
|
|
msg := []byte("yellow submarine")
|
|
res := make([]byte, 16)
|
|
var readN int
|
|
go func() {
|
|
var err error
|
|
readN, err = server.Read(res)
|
|
ch <- err
|
|
}()
|
|
|
|
n, err := client.Write(msg)
|
|
c.Assert(err, IsNil)
|
|
c.Assert(n, Equals, len(msg))
|
|
c.Assert(<-ch, IsNil)
|
|
c.Assert(readN, Equals, len(res))
|
|
c.Assert(res, DeepEquals, msg)
|
|
|
|
go func() {
|
|
res = make([]byte, 16)
|
|
var err error
|
|
readN, err = client.Read(res)
|
|
ch <- err
|
|
}()
|
|
|
|
n, err = server.Write(msg)
|
|
c.Assert(err, IsNil)
|
|
c.Assert(n, Equals, len(msg))
|
|
c.Assert(<-ch, IsNil)
|
|
c.Assert(readN, Equals, len(res))
|
|
c.Assert(res, DeepEquals, msg)
|
|
}
|