93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
package fetch
|
|
|
|
import (
|
|
"cwtch.im/cwtch/protocol"
|
|
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
|
|
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
|
|
"github.com/golang/protobuf/proto"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type TestHandler struct {
|
|
Received bool
|
|
}
|
|
|
|
func (th *TestHandler) HandleGroupMessage(m *protocol.GroupMessage) {
|
|
th.Received = true
|
|
}
|
|
|
|
func TestPeerFetchChannelAttributes(t *testing.T) {
|
|
cssc := new(CwtchPeerFetchChannel)
|
|
if cssc.Type() != "im.cwtch.server.fetch" {
|
|
t.Errorf("cwtch channel type is incorrect %v", cssc.Type())
|
|
}
|
|
|
|
if !cssc.OnlyClientCanOpen() {
|
|
t.Errorf("only clients should be able to open im.cwtch.server.Fetch channel")
|
|
}
|
|
|
|
if cssc.Bidirectional() {
|
|
t.Errorf("im.cwtch.server.fetch should not be bidirectional")
|
|
}
|
|
|
|
if !cssc.Singleton() {
|
|
t.Errorf("im.cwtch.server.fetch should be a Singleton")
|
|
}
|
|
|
|
if cssc.RequiresAuthentication() != "none" {
|
|
t.Errorf("cwtch channel required auth is incorrect %v", cssc.RequiresAuthentication())
|
|
}
|
|
|
|
}
|
|
func TestPeerFetchChannelOpenInbound(t *testing.T) {
|
|
cssc := new(CwtchPeerFetchChannel)
|
|
channel := new(channels.Channel)
|
|
_, err := cssc.OpenInbound(channel, nil)
|
|
if err == nil {
|
|
t.Errorf("client implementation of im.cwtch.server.Fetch should never open an inbound channel")
|
|
}
|
|
}
|
|
|
|
func TestPeerFetchChannel(t *testing.T) {
|
|
pfc := new(CwtchPeerFetchChannel)
|
|
th := new(TestHandler)
|
|
pfc.Handler = th
|
|
channel := new(channels.Channel)
|
|
channel.ID = 3
|
|
channel.SendMessage = func([]byte) {}
|
|
channel.CloseChannel = func() {}
|
|
result, err := pfc.OpenOutbound(channel)
|
|
if err != nil {
|
|
t.Errorf("expected result but also got non-nil error: result:%v, err: %v", result, err)
|
|
}
|
|
|
|
cr := &Protocol_Data_Control.ChannelResult{
|
|
ChannelIdentifier: proto.Int32(3),
|
|
Opened: proto.Bool(true),
|
|
}
|
|
|
|
pfc.OpenOutboundResult(nil, cr)
|
|
if channel.Pending {
|
|
t.Errorf("once opened channel should no longer be pending")
|
|
}
|
|
|
|
csp := &protocol.CwtchServerPacket{
|
|
GroupMessage: &protocol.GroupMessage{
|
|
Ciphertext: []byte("hello"), Signature: []byte{}, Spamguard: []byte{},
|
|
},
|
|
}
|
|
packet, _ := proto.Marshal(csp)
|
|
|
|
pfc.Packet(packet)
|
|
|
|
time.Sleep(time.Second * 2)
|
|
|
|
if th.Received != true {
|
|
t.Errorf("group message should not have been received")
|
|
}
|
|
|
|
pfc.Closed(nil)
|
|
|
|
}
|