func TestNoMergeExtensionMerge(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UnixNano())) bigm := test.NewPopulatedMyExtendable(r, true) m := test.NewPopulatedNinOptNative(r, true) err := proto.SetExtension(bigm, test.E_FieldB, m) if err != nil { panic(err) } data, err := proto.Marshal(bigm) if err != nil { panic(err) } key := uint32(101)<<3 | uint32(2) data2 := make([]byte, 10) n := binary.PutUvarint(data2, uint64(key)) data2 = data2[:n] data = append(data, data2...) data4, err := proto.Marshal(test.NewPopulatedNinOptNative(r, true)) if err != nil { panic(err) } data3 := make([]byte, 10) n = binary.PutUvarint(data3, uint64(len(data4))) data3 = data3[:n] data = append(data, data3...) data = append(data, data4...) err = fieldpath.NoMerge(data, test.ThetestDescription(), "test", "MyExtendable") if err == nil || !strings.Contains(err.Error(), "requires merging") { t.Fatalf("should require merging") } }
func TestFull(t *testing.T) { buf := newBuffer() writer := io.NewFullWriter(buf) reader := io.NewFullReader(buf, 1024*1024) r := rand.New(rand.NewSource(time.Now().UnixNano())) msgIn := test.NewPopulatedNinOptNative(r, true) if err := writer.WriteMsg(msgIn); err != nil { panic(err) } if err := writer.Close(); err != nil { panic(err) } msgOut := &test.NinOptNative{} if err := reader.ReadMsg(msgOut); err != nil { panic(err) } if err := msgIn.VerboseEqual(msgOut); err != nil { panic(err) } if err := reader.ReadMsg(msgOut); err != nil { if err != goio.EOF { panic(err) } } if err := reader.Close(); err != nil { panic(err) } if !buf.closed { t.Fatalf("did not close buffer") } }
func TestNoMergeNoMerge(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UnixNano())) m := test.NewPopulatedNinOptNative(r, true) data, err := proto.Marshal(m) if err != nil { panic(err) } err = fieldpath.NoMerge(data, test.ThetestDescription(), "test", "NinOptNative") if err != nil { panic(err) } }
func TestNoMergeMerge(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UnixNano())) m := test.NewPopulatedNinOptNative(r, true) if m.Field1 == nil { m.Field1 = proto.Float64(1.1) } data, err := proto.Marshal(m) if err != nil { panic(err) } key := byte(uint32(1)<<3 | uint32(1)) data = append(data, key, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) err = fieldpath.NoMerge(data, test.ThetestDescription(), "test", "NinOptNative") if err == nil || !strings.Contains(err.Error(), "NinOptNative.Field1 requires merging") { t.Fatalf("Field1 should require merging") } }
func TestNoMergeExtensionNoMerge(t *testing.T) { r := rand.New(rand.NewSource(time.Now().UnixNano())) bigm := test.NewPopulatedMyExtendable(r, true) m := test.NewPopulatedNinOptNative(r, true) err := proto.SetExtension(bigm, test.E_FieldB, m) if err != nil { panic(err) } data, err := proto.Marshal(bigm) if err != nil { panic(err) } err = fieldpath.NoMerge(data, test.ThetestDescription(), "test", "MyExtendable") if err != nil { panic(err) } }
func iotest(writer io.WriteCloser, reader io.ReadCloser) error { size := 1000 msgs := make([]*test.NinOptNative, size) r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := range msgs { msgs[i] = test.NewPopulatedNinOptNative(r, true) //issue 31 if i == 5 { msgs[i] = &test.NinOptNative{} } //issue 31 if i == 999 { msgs[i] = &test.NinOptNative{} } err := writer.WriteMsg(msgs[i]) if err != nil { return err } } if err := writer.Close(); err != nil { return err } i := 0 for { msg := &test.NinOptNative{} if err := reader.ReadMsg(msg); err != nil { if err == goio.EOF { break } return err } if err := msg.VerboseEqual(msgs[i]); err != nil { return err } i++ } if i != size { panic("not enough messages read") } if err := reader.Close(); err != nil { return err } return nil }