103 lines
2.5 KiB
Go
103 lines
2.5 KiB
Go
package peer
|
|
|
|
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"
|
|
)
|
|
|
|
func TestPeerChannelAttributes(t *testing.T) {
|
|
cssc := new(CwtchPeerChannel)
|
|
if cssc.Type() != "im.cwtch.peer" {
|
|
t.Errorf("cwtch channel type is incorrect %v", cssc.Type())
|
|
}
|
|
|
|
if cssc.OnlyClientCanOpen() {
|
|
t.Errorf("either side should be able to open im.cwtch.peer channel")
|
|
}
|
|
|
|
if cssc.Bidirectional() {
|
|
t.Errorf("im.cwtch.peer should not be bidirectional")
|
|
}
|
|
|
|
if !cssc.Singleton() {
|
|
t.Errorf("im.cwtch.server.listen should be a Singleton")
|
|
}
|
|
|
|
if cssc.RequiresAuthentication() != "im.ricochet.auth.3dh" {
|
|
t.Errorf("cwtch channel required auth is incorrect %v", cssc.RequiresAuthentication())
|
|
}
|
|
}
|
|
|
|
type TestHandler struct {
|
|
Received bool
|
|
ReceviedGroupInvite bool
|
|
}
|
|
|
|
func (th *TestHandler) ClientIdentity(ci *protocol.CwtchIdentity) {
|
|
if ci.GetName() == "hello" {
|
|
th.Received = true
|
|
}
|
|
}
|
|
|
|
func (th *TestHandler) HandleGroupInvite(ci *protocol.GroupChatInvite) {
|
|
///if ci.GetName() == "hello" {
|
|
th.ReceviedGroupInvite = true
|
|
//}
|
|
}
|
|
|
|
func (th *TestHandler) GetClientIdentityPacket() []byte {
|
|
return nil
|
|
}
|
|
|
|
func TestPeerChannel(t *testing.T) {
|
|
th := new(TestHandler)
|
|
cpc := new(CwtchPeerChannel)
|
|
cpc.Handler = th
|
|
channel := new(channels.Channel)
|
|
channel.ID = 3
|
|
result, err := cpc.OpenOutbound(channel)
|
|
if err != nil {
|
|
t.Errorf("should have send open channel request instead %v, %v", result, err)
|
|
}
|
|
|
|
cpc2 := new(CwtchPeerChannel)
|
|
channel2 := new(channels.Channel)
|
|
channel2.ID = 3
|
|
sent := false
|
|
channel2.SendMessage = func(message []byte) {
|
|
sent = true
|
|
}
|
|
|
|
control := new(Protocol_Data_Control.Packet)
|
|
proto.Unmarshal(result[:], control)
|
|
ack, err := cpc2.OpenInbound(channel2, control.GetOpenChannel())
|
|
if err != nil {
|
|
t.Errorf("should have ack open channel request instead %v, %v", ack, err)
|
|
}
|
|
|
|
ackpacket := new(Protocol_Data_Control.Packet)
|
|
proto.Unmarshal(ack[:], ackpacket)
|
|
cpc.OpenOutboundResult(nil, ackpacket.GetChannelResult())
|
|
if channel.Pending != false {
|
|
t.Errorf("Channel should no longer be pending")
|
|
}
|
|
|
|
gci := &protocol.GroupChatInvite{
|
|
GroupName: "hello",
|
|
GroupSharedKey: []byte{},
|
|
ServerHost: "abc.onion",
|
|
}
|
|
|
|
cpp := &protocol.CwtchPeerPacket{
|
|
GroupChatInvite: gci,
|
|
}
|
|
packet, _ := proto.Marshal(cpp)
|
|
cpc.Packet(packet)
|
|
if sent && th.ReceviedGroupInvite == false {
|
|
t.Errorf("Should have sent invite packet to handler")
|
|
}
|
|
}
|