diff --git a/channels/adminListener.go b/channels/adminListener.go index 8a4d5cabd5c5f9e140e257b8a729dd4fd349ddab..8ee876bc2e6937b05432074c1ff0b85f96ecadec 100644 --- a/channels/adminListener.go +++ b/channels/adminListener.go @@ -44,9 +44,9 @@ func (al *adminListener) Listen(payload []byte, // check the round to ensure the message is not a replay if id.Round(cm.RoundID) != round.ID { - jww.WARN.Printf("The round message %s send on %d referenced "+ + jww.WARN.Printf("The round message %s send on %s referenced "+ "(%d) was not the same as the round the message was found on (%d)", - msgID, al.chID, cm.RoundID, round.ID, al.chID) + msgID, al.chID, cm.RoundID, round.ID) return } diff --git a/channels/emoji.go b/channels/emoji.go index d65844745e2c81ea549a962a81999fefc09e7214..c3a9f7456f54b56a36ceca3b5daa4b8eff8a4556 100644 --- a/channels/emoji.go +++ b/channels/emoji.go @@ -1,8 +1,8 @@ package channels import ( - "github.com/forPelevin/gomoji" "github.com/pkg/errors" + jww "github.com/spf13/jwalterweatherman" ) var InvalidReaction = errors.New("The reaction is not valid, " + @@ -10,13 +10,6 @@ var InvalidReaction = errors.New("The reaction is not valid, " + // ValidateReaction checks that the reaction only contains a single Emoji func ValidateReaction(reaction string) error { - if len(gomoji.RemoveEmojis(reaction)) > 0 { - return InvalidReaction - } - - if len(gomoji.FindAll(reaction)) != 1 { - return InvalidReaction - } - + jww.WARN.Printf("Reaction Validation Not Yet Implemented") return nil } diff --git a/channels/messages.go b/channels/messages.go index cc071a74c92ba452deb4f353d6eb783c2e9f6cee..15ec90f8a3291cc85c067ccc61caa70cbfd4cb2b 100644 --- a/channels/messages.go +++ b/channels/messages.go @@ -30,7 +30,7 @@ func NewUserMessageInternal(ursMsg *UserMessage) (*UserMessageInternal, error) { return &UserMessageInternal{ userMessage: ursMsg, channelMessage: channelMessage, - messageID: channel.MakeMessageID(channelMessage.Payload), + messageID: channel.MakeMessageID(ursMsg.Message), }, nil } diff --git a/channels/messages_test.go b/channels/messages_test.go index 27101a1c26e15bbdb58aef297ee88022a8bd9e60..afcb89d56261df9495aba13c3cabc76548c04918 100644 --- a/channels/messages_test.go +++ b/channels/messages_test.go @@ -8,14 +8,18 @@ package channels import ( - "bytes" "github.com/golang/protobuf/proto" + "gitlab.com/elixxir/crypto/channel" + "reflect" "testing" ) func TestUserMessageInternal_GetChannelMessage(t *testing.T) { channelMsg := &ChannelMessage{ - Payload: []byte("ban_badUSer"), + Lease: 69, + RoundID: 42, + PayloadType: 7, + Payload: []byte("ban_badUSer"), } serialized, err := proto.Marshal(channelMsg) @@ -33,10 +37,121 @@ func TestUserMessageInternal_GetChannelMessage(t *testing.T) { internal, _ := NewUserMessageInternal(usrMsg) received := internal.GetChannelMessage() - if !bytes.Equal(received.Payload, channelMsg.Payload) { + if !reflect.DeepEqual(received.Payload, channelMsg.Payload) || + received.Lease != channelMsg.Lease || + received.RoundID != channelMsg.RoundID || + received.PayloadType != channelMsg.PayloadType { t.Fatalf("GetChannelMessage did not return expected data."+ "\nExpected: %v"+ "\nReceived: %v", channelMsg, received) } +} + +func TestUserMessageInternal_GetUserMessage(t *testing.T) { + channelMsg := &ChannelMessage{ + Lease: 69, + RoundID: 42, + PayloadType: 7, + Payload: []byte("ban_badUSer"), + } + + serialized, err := proto.Marshal(channelMsg) + if err != nil { + t.Fatalf("Marshal error: %v", err) + } + + usrMsg := &UserMessage{ + Message: serialized, + ValidationSignature: []byte("sig"), + Signature: []byte("sig2"), + Username: "hunter2", + ECCPublicKey: []byte("key"), + UsernameLease: 666, + } + + internal, _ := NewUserMessageInternal(usrMsg) + received := internal.GetUserMessage() + + if !reflect.DeepEqual(received.Message, usrMsg.Message) || + received.Username != usrMsg.Username || + received.UsernameLease != usrMsg.UsernameLease || + !reflect.DeepEqual(received.Signature, usrMsg.Signature) || + !reflect.DeepEqual(received.ValidationSignature, usrMsg.ValidationSignature) || + !reflect.DeepEqual(received.ECCPublicKey, usrMsg.ECCPublicKey) { + t.Fatalf("GetUserMessage did not return expected data."+ + "\nExpected: %v"+ + "\nReceived: %v", usrMsg, received) + } +} + +func TestUserMessageInternal_GetMessageID(t *testing.T) { + channelMsg := &ChannelMessage{ + Lease: 69, + RoundID: 42, + PayloadType: 7, + Payload: []byte("ban_badUSer"), + } + + serialized, err := proto.Marshal(channelMsg) + if err != nil { + t.Fatalf("Marshal error: %v", err) + } + + usrMsg := &UserMessage{ + Message: serialized, + ValidationSignature: []byte("sig"), + Signature: []byte("sig2"), + Username: "hunter2", + ECCPublicKey: []byte("key"), + UsernameLease: 666, + } + + internal, _ := NewUserMessageInternal(usrMsg) + received := internal.GetMessageID() + + expected := channel.MakeMessageID(usrMsg.Message) + + if !reflect.DeepEqual(expected, received) { + t.Fatalf("GetMessageID did not return expected data."+ + "\nExpected: %v"+ + "\nReceived: %v", expected, received) + } +} + +// Ensures the serialization hasn't changed, changing the message IDs. The +// protocol is tolerant of this because only the sender seralizes, but +// it would be good to know when this changes. If this test breaks, report it, +// but it should be safe to update the expected +func TestUserMessageInternal_GetMessageID_Consistency(t *testing.T) { + expected := "ChMsgID-cfw4O6M47N9pqdtTcQjm/SSVqehTPGQd7cAMrNP9bcc=" + + channelMsg := &ChannelMessage{ + Lease: 69, + RoundID: 42, + PayloadType: 7, + Payload: []byte("ban_badUSer"), + } + serialized, err := proto.Marshal(channelMsg) + if err != nil { + t.Fatalf("Marshal error: %v", err) + } + + usrMsg := &UserMessage{ + Message: serialized, + ValidationSignature: []byte("sig"), + Signature: []byte("sig2"), + Username: "hunter2", + ECCPublicKey: []byte("key"), + UsernameLease: 666, + } + + internal, _ := NewUserMessageInternal(usrMsg) + received := internal.GetMessageID() + + if expected != received.String() { + t.Fatalf("GetMessageID did not return expected data."+ + "\nExpected: %v"+ + "\nReceived: %v", expected, received) + } } diff --git a/channels/userListener.go b/channels/userListener.go index d81c5485701e28be109abb04523b3c291eb1afca..366342457fcc5426a1949205703f64ab1405d319 100644 --- a/channels/userListener.go +++ b/channels/userListener.go @@ -48,7 +48,7 @@ func (gul *userListener) Listen(payload []byte, if id.Round(cm.RoundID) != round.ID { jww.WARN.Printf("The round message %s send on %d referenced "+ "(%d) was not the same as the round the message was found on (%d)", - msgID, gul.chID, cm.RoundID, round.ID, gul.chID) + msgID, gul.chID, cm.RoundID, round.ID) return }