go.dedis.ch/onet/v4@v4.0.0-pre1/network/encoding_test.go (about) 1 package network 2 3 import ( 4 "crypto/rand" 5 "go.dedis.ch/kyber/v4/pairing" 6 "go.dedis.ch/kyber/v4/pairing/bn256" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "go.dedis.ch/kyber/v4" 12 "go.dedis.ch/kyber/v4/suites" 13 ) 14 15 type TestRegisterS1 struct { 16 I int64 17 } 18 19 type TestRegisterS2 struct { 20 I int64 21 } 22 23 type TestRegisterS3 struct { 24 P1 kyber.Point 25 P2 kyber.Point 26 C1 TestContainer1 27 C2 TestContainer2 28 } 29 30 type TestContainer1 struct { 31 P kyber.Point 32 S kyber.Scalar 33 } 34 35 type TestContainer2 struct { 36 P kyber.Point 37 S kyber.Scalar 38 } 39 40 func TestRegisterMessage(t *testing.T) { 41 if !MessageType(&TestRegisterS1{}).Equal(ErrorType) { 42 t.Fatal("TestRegister should not yet be there") 43 } 44 45 trType := RegisterMessage(&TestRegisterS1{}) 46 if trType.IsNil() { 47 t.Fatal("Couldn't register TestRegister-struct") 48 } 49 50 if !MessageType(&TestRegisterS1{}).Equal(trType) { 51 t.Fatal("TestRegister is different now") 52 } 53 if !MessageType(TestRegisterS1{}).Equal(trType) { 54 t.Fatal("TestRegister is different now") 55 } 56 } 57 58 func TestRegisterMessages(t *testing.T) { 59 oldRegistry := registry 60 registry = newTypeRegistry() 61 types := RegisterMessages(&TestRegisterS1{}, &TestRegisterS2{}) 62 assert.True(t, MessageType(&TestRegisterS1{}).Equal(types[0])) 63 assert.True(t, MessageType(&TestRegisterS2{}).Equal(types[1])) 64 registry = oldRegistry 65 } 66 67 func TestUnmarshalRegister(t *testing.T) { 68 trType := RegisterMessage(&TestRegisterS1{}) 69 buff, err := Marshal(&TestRegisterS1{10}) 70 require.Nil(t, err) 71 72 ty, b, err := Unmarshal(buff, tSuite) 73 assert.Nil(t, err) 74 assert.Equal(t, trType, ty) 75 assert.Equal(t, int64(10), b.(*TestRegisterS1).I) 76 77 var randType [16]byte 78 rand.Read(randType[:]) 79 buff = append(randType[:], buff[16:]...) 80 ty, b, err = Unmarshal(buff, tSuite) 81 assert.NotNil(t, err) 82 assert.Equal(t, ErrorType, ty) 83 } 84 85 func TestMarshalKyberTypes(t *testing.T) { 86 RegisterMessages(&TestRegisterS3{}) 87 testMKT(t, pairing.NewSuiteBn256()) 88 testMKT(t, bn256.NewSuiteG1()) 89 testMKT(t, bn256.NewSuiteG2()) 90 testMKT(t, bn256.NewSuiteGT()) 91 } 92 93 func testMKT(t *testing.T, s kyber.Group) { 94 ed25519 := suites.MustFind("Ed25519") 95 96 obj := &TestRegisterS3{ 97 P1: ed25519.Point(), 98 P2: s.Point(), 99 C1: TestContainer1{P: ed25519.Point(), S: ed25519.Scalar()}, 100 C2: TestContainer2{P: s.Point(), S: s.Scalar()}, 101 } 102 103 buff, err := Marshal(obj) 104 require.Nil(t, err) 105 106 _, msg, err := Unmarshal(buff, ed25519) 107 require.Nil(t, err) 108 obj2 := msg.(*TestRegisterS3) 109 require.NotNil(t, obj2.C1) 110 require.NotNil(t, obj2.C1.P) 111 require.NotNil(t, obj2.C2) 112 require.NotNil(t, obj2.C2.P) 113 require.NotNil(t, obj2.P1) 114 require.NotNil(t, obj2.P2) 115 require.Equal(t, obj2.P1.String(), obj.P1.String()) 116 require.Equal(t, obj2.P2.String(), obj.P2.String()) 117 require.Equal(t, obj2.C2.P.String(), obj.C2.P.String()) 118 }