Home | History | Annotate | Download | only in proto
      1 // Go support for Protocol Buffers - Google's data interchange format
      2 //
      3 // Copyright 2014 The Go Authors.  All rights reserved.
      4 // https://github.com/golang/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 //     * Neither the name of Google Inc. nor the names of its
     17 // contributors may be used to endorse or promote products derived from
     18 // this software without specific prior written permission.
     19 //
     20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     22 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     23 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     24 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     30 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31 
     32 package proto_test
     33 
     34 import (
     35 	"bytes"
     36 	"fmt"
     37 	"testing"
     38 
     39 	"github.com/golang/protobuf/proto"
     40 	. "github.com/golang/protobuf/proto/test_proto"
     41 )
     42 
     43 func TestUnmarshalMessageSetWithDuplicate(t *testing.T) {
     44 	/*
     45 		Message{
     46 			Tag{1, StartGroup},
     47 			Message{
     48 				Tag{2, Varint}, Uvarint(12345),
     49 				Tag{3, Bytes}, Bytes("hoo"),
     50 			},
     51 			Tag{1, EndGroup},
     52 			Tag{1, StartGroup},
     53 			Message{
     54 				Tag{2, Varint}, Uvarint(12345),
     55 				Tag{3, Bytes}, Bytes("hah"),
     56 			},
     57 			Tag{1, EndGroup},
     58 		}
     59 	*/
     60 	var in []byte
     61 	fmt.Sscanf("0b10b9601a03686f6f0c0b10b9601a036861680c", "%x", &in)
     62 
     63 	/*
     64 		Message{
     65 			Tag{1, StartGroup},
     66 			Message{
     67 				Tag{2, Varint}, Uvarint(12345),
     68 				Tag{3, Bytes}, Bytes("hoohah"),
     69 			},
     70 			Tag{1, EndGroup},
     71 		}
     72 	*/
     73 	var want []byte
     74 	fmt.Sscanf("0b10b9601a06686f6f6861680c", "%x", &want)
     75 
     76 	var m MyMessageSet
     77 	if err := proto.Unmarshal(in, &m); err != nil {
     78 		t.Fatalf("unexpected Unmarshal error: %v", err)
     79 	}
     80 	got, err := proto.Marshal(&m)
     81 	if err != nil {
     82 		t.Fatalf("unexpected Marshal error: %v", err)
     83 	}
     84 
     85 	if !bytes.Equal(got, want) {
     86 		t.Errorf("output mismatch:\ngot  %x\nwant %x", got, want)
     87 	}
     88 }
     89