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  }