github.com/gogo/protobuf@v1.3.2/test/types/types_test.go.in (about)

     1  // Protocol Buffers for Go with Gadgets
     2  //
     3  // Copyright (c) 2016, The GoGo Authors. All rights reserved.
     4  // http://github.com/gogo/protobuf
     5  //
     6  // Redistribution and use in source and binary forms, with or without
     7  // modification, are permitted provided that the following conditions are
     8  // met:
     9  //
    10  //     * Redistributions of source code must retain the above copyright
    11  // notice, this list of conditions and the following disclaimer.
    12  //     * Redistributions in binary form must reproduce the above
    13  // copyright notice, this list of conditions and the following disclaimer
    14  // in the documentation and/or other materials provided with the
    15  // distribution.
    16  //
    17  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    18  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    19  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    20  // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    21  // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    22  // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    23  // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    24  // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    25  // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    27  // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    28  
    29  package types
    30  
    31  import (
    32  	"testing"
    33  	"time"
    34  	math_rand "math/rand"
    35  
    36  	"github.com/gogo/protobuf/proto"
    37  	"github.com/gogo/protobuf/jsonpb"
    38  )
    39  
    40  func TestFullCircleProtoToStd(t *testing.T) {
    41  	seed := time.Now().UnixNano()
    42  	popr := math_rand.New(math_rand.NewSource(seed))
    43  	protoMsg := NewPopulatedProtoTypes(popr, true)
    44  	protoData, err := proto.Marshal(protoMsg)
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  	stdMsg := &StdTypes{}
    49  	if err2 := proto.Unmarshal(protoData, stdMsg); err2 != nil {
    50  		t.Fatal(err)
    51  	}
    52  	stdData, err := proto.Marshal(stdMsg)
    53  	if err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	protoMsgOut := &ProtoTypes{}
    57  	if err3 := proto.Unmarshal(stdData, protoMsgOut); err3 != nil {
    58  		t.Fatal(err)
    59  	}
    60  	if !protoMsg.Equal(protoMsgOut) {
    61  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
    62  	}
    63  }
    64  
    65  func TestJsonFullCircleProtoToStd(t *testing.T) {
    66  	seed := time.Now().UnixNano()
    67  	popr := math_rand.New(math_rand.NewSource(seed))
    68  	protoMsg := NewPopulatedProtoTypes(popr, true)
    69  	j := &jsonpb.Marshaler{}
    70  	protoData, err := j.MarshalToString(protoMsg)
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  	stdMsg := &StdTypes{}
    75  	if err2 := jsonpb.UnmarshalString(protoData, stdMsg); err2 != nil {
    76  		t.Fatal(err)
    77  	}
    78  	stdData, err := j.MarshalToString(stdMsg)
    79  	if err != nil {
    80  		t.Fatal(err)
    81  	}
    82  	protoMsgOut := &ProtoTypes{}
    83  	if err3 := jsonpb.UnmarshalString(stdData, protoMsgOut); err3 != nil {
    84  		t.Fatal(err)
    85  	}
    86  	if !protoMsg.Equal(protoMsgOut) {
    87  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
    88  	}
    89  }
    90  
    91  func TestFullCircleRepProtoToStd(t *testing.T) {
    92  	seed := time.Now().UnixNano()
    93  	popr := math_rand.New(math_rand.NewSource(seed))
    94  	protoMsg := NewPopulatedRepProtoTypes(popr, true)
    95  	protoData, err := proto.Marshal(protoMsg)
    96  	if err != nil {
    97  		t.Fatal(err)
    98  	}
    99  	stdMsg := &RepStdTypes{}
   100  	if err2 := proto.Unmarshal(protoData, stdMsg); err2 != nil {
   101  		t.Fatal(err)
   102  	}
   103  	stdData, err := proto.Marshal(stdMsg)
   104  	if err != nil {
   105  		t.Fatal(err)
   106  	}
   107  	protoMsgOut := &RepProtoTypes{}
   108  	if err3 := proto.Unmarshal(stdData, protoMsgOut); err3 != nil {
   109  		t.Fatal(err)
   110  	}
   111  	if !protoMsg.Equal(protoMsgOut) {
   112  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   113  	}
   114  }
   115  
   116  func TestJsonFullCircleRepProtoToStd(t *testing.T) {
   117  	seed := time.Now().UnixNano()
   118  	popr := math_rand.New(math_rand.NewSource(seed))
   119  	protoMsg := NewPopulatedRepProtoTypes(popr, true)
   120  	j := &jsonpb.Marshaler{}
   121  	protoData, err := j.MarshalToString(protoMsg)
   122  	if err != nil {
   123  		t.Fatal(err)
   124  	}
   125  	stdMsg := &RepStdTypes{}
   126  	if err2 := jsonpb.UnmarshalString(protoData, stdMsg); err2 != nil {
   127  		t.Fatal(err)
   128  	}
   129  	stdData, err := j.MarshalToString(stdMsg)
   130  	if err != nil {
   131  		t.Fatal(err)
   132  	}
   133  	protoMsgOut := &RepProtoTypes{}
   134  	if err3 := jsonpb.UnmarshalString(stdData, protoMsgOut); err3 != nil {
   135  		t.Fatal(err)
   136  	}
   137  	if !protoMsg.Equal(protoMsgOut) {
   138  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   139  	}
   140  }
   141  
   142  
   143  func TestFullCircleMapProtoToStd(t *testing.T) {
   144  	seed := time.Now().UnixNano()
   145  	popr := math_rand.New(math_rand.NewSource(seed))
   146  	protoMsg := NewPopulatedMapProtoTypes(popr, true)
   147  	protoData, err := proto.Marshal(protoMsg)
   148  	if err != nil {
   149  		t.Fatal(err)
   150  	}
   151  	stdMsg := &MapStdTypes{}
   152  	if err2 := proto.Unmarshal(protoData, stdMsg); err2 != nil {
   153  		t.Fatal(err)
   154  	}
   155  	stdData, err := proto.Marshal(stdMsg)
   156  	if err != nil {
   157  		t.Fatal(err)
   158  	}
   159  	protoMsgOut := &MapProtoTypes{}
   160  	if err3 := proto.Unmarshal(stdData, protoMsgOut); err3 != nil {
   161  		t.Fatal(err)
   162  	}
   163  	if !protoMsg.Equal(protoMsgOut) {
   164  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   165  	}
   166  }
   167  
   168  func TestJsonFullCircleMapProtoToStd(t *testing.T) {
   169  	seed := time.Now().UnixNano()
   170  	popr := math_rand.New(math_rand.NewSource(seed))
   171  	protoMsg := NewPopulatedMapProtoTypes(popr, true)
   172  	j := &jsonpb.Marshaler{}
   173  	protoData, err := j.MarshalToString(protoMsg)
   174  	if err != nil {
   175  		t.Fatal(err)
   176  	}
   177  	stdMsg := &MapStdTypes{}
   178  	if err2 := jsonpb.UnmarshalString(protoData, stdMsg); err2 != nil {
   179  		t.Fatal(err)
   180  	}
   181  	stdData, err := j.MarshalToString(stdMsg)
   182  	if err != nil {
   183  		t.Fatal(err)
   184  	}
   185  	protoMsgOut := &MapProtoTypes{}
   186  	if err3 := jsonpb.UnmarshalString(stdData, protoMsgOut); err3 != nil {
   187  		t.Fatal(err)
   188  	}
   189  	if !protoMsg.Equal(protoMsgOut) {
   190  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   191  	}
   192  }
   193  
   194  func TestFullCircleOneofProtoToStd(t *testing.T) {
   195  	seed := time.Now().UnixNano()
   196  	popr := math_rand.New(math_rand.NewSource(seed))
   197  	protoMsg := NewPopulatedOneofProtoTypes(popr, true)
   198  	protoData, err := proto.Marshal(protoMsg)
   199  	if err != nil {
   200  		t.Fatal(err)
   201  	}
   202  	stdMsg := &OneofStdTypes{}
   203  	if err2 := proto.Unmarshal(protoData, stdMsg); err2 != nil {
   204  		t.Fatal(err)
   205  	}
   206  	stdData, err := proto.Marshal(stdMsg)
   207  	if err != nil {
   208  		t.Fatal(err)
   209  	}
   210  	protoMsgOut := &OneofProtoTypes{}
   211  	if err3 := proto.Unmarshal(stdData, protoMsgOut); err3 != nil {
   212  		t.Fatal(err)
   213  	}
   214  	if !protoMsg.Equal(protoMsgOut) {
   215  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   216  	}
   217  }
   218  
   219  func TestJsonFullCircleOneofProtoToStd(t *testing.T) {
   220  	seed := time.Now().UnixNano()
   221  	popr := math_rand.New(math_rand.NewSource(seed))
   222  	protoMsg := NewPopulatedOneofProtoTypes(popr, true)
   223  	j := &jsonpb.Marshaler{}
   224  	protoData, err := j.MarshalToString(protoMsg)
   225  	if err != nil {
   226  		t.Fatal(err)
   227  	}
   228  	stdMsg := &OneofStdTypes{}
   229  	if err2 := jsonpb.UnmarshalString(protoData, stdMsg); err2 != nil {
   230  		t.Fatal(err)
   231  	}
   232  	stdData, err := j.MarshalToString(stdMsg)
   233  	if err != nil {
   234  		t.Fatal(err)
   235  	}
   236  	protoMsgOut := &OneofProtoTypes{}
   237  	if err3 := jsonpb.UnmarshalString(stdData, protoMsgOut); err3 != nil {
   238  		t.Fatal(err)
   239  	}
   240  	if !protoMsg.Equal(protoMsgOut) {
   241  		t.Fatalf("want %#v got %#v", protoMsg, protoMsgOut)
   242  	}
   243  }