1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsenpackage proto_test 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport ( 8*1c12ee1eSDan Willemsen "fmt" 9*1c12ee1eSDan Willemsen "testing" 10*1c12ee1eSDan Willemsen 11*1c12ee1eSDan Willemsen "google.golang.org/protobuf/internal/impl" 12*1c12ee1eSDan Willemsen piface "google.golang.org/protobuf/runtime/protoiface" 13*1c12ee1eSDan Willemsen) 14*1c12ee1eSDan Willemsen 15*1c12ee1eSDan Willemsen// TestValidate tests the internal message validator. 16*1c12ee1eSDan Willemsen// 17*1c12ee1eSDan Willemsen// Despite being more properly associated with the internal/impl package, 18*1c12ee1eSDan Willemsen// it is located here to take advantage of the test wire encoder/decoder inputs. 19*1c12ee1eSDan Willemsen 20*1c12ee1eSDan Willemsenfunc TestValidateValid(t *testing.T) { 21*1c12ee1eSDan Willemsen for _, test := range testValidMessages { 22*1c12ee1eSDan Willemsen for _, m := range test.decodeTo { 23*1c12ee1eSDan Willemsen t.Run(fmt.Sprintf("%s (%T)", test.desc, m), func(t *testing.T) { 24*1c12ee1eSDan Willemsen mt := m.ProtoReflect().Type() 25*1c12ee1eSDan Willemsen want := impl.ValidationValid 26*1c12ee1eSDan Willemsen if test.validationStatus != 0 { 27*1c12ee1eSDan Willemsen want = test.validationStatus 28*1c12ee1eSDan Willemsen } 29*1c12ee1eSDan Willemsen out, status := impl.Validate(mt, piface.UnmarshalInput{ 30*1c12ee1eSDan Willemsen Buf: test.wire, 31*1c12ee1eSDan Willemsen }) 32*1c12ee1eSDan Willemsen if status != want { 33*1c12ee1eSDan Willemsen t.Errorf("Validate(%x) = %v, want %v", test.wire, status, want) 34*1c12ee1eSDan Willemsen } 35*1c12ee1eSDan Willemsen if got, want := (out.Flags&piface.UnmarshalInitialized != 0), !test.partial; got != want && !test.nocheckValidInit && status == impl.ValidationValid { 36*1c12ee1eSDan Willemsen t.Errorf("Validate(%x): initialized = %v, want %v", test.wire, got, want) 37*1c12ee1eSDan Willemsen } 38*1c12ee1eSDan Willemsen }) 39*1c12ee1eSDan Willemsen } 40*1c12ee1eSDan Willemsen } 41*1c12ee1eSDan Willemsen} 42*1c12ee1eSDan Willemsen 43*1c12ee1eSDan Willemsenfunc TestValidateInvalid(t *testing.T) { 44*1c12ee1eSDan Willemsen for _, test := range testInvalidMessages { 45*1c12ee1eSDan Willemsen for _, m := range test.decodeTo { 46*1c12ee1eSDan Willemsen t.Run(fmt.Sprintf("%s (%T)", test.desc, m), func(t *testing.T) { 47*1c12ee1eSDan Willemsen mt := m.ProtoReflect().Type() 48*1c12ee1eSDan Willemsen _, got := impl.Validate(mt, piface.UnmarshalInput{ 49*1c12ee1eSDan Willemsen Buf: test.wire, 50*1c12ee1eSDan Willemsen }) 51*1c12ee1eSDan Willemsen want := impl.ValidationInvalid 52*1c12ee1eSDan Willemsen if got != want { 53*1c12ee1eSDan Willemsen t.Errorf("Validate(%x) = %v, want %v", test.wire, got, want) 54*1c12ee1eSDan Willemsen } 55*1c12ee1eSDan Willemsen }) 56*1c12ee1eSDan Willemsen } 57*1c12ee1eSDan Willemsen } 58*1c12ee1eSDan Willemsen} 59