本文整理汇总了Golang中go/uber/org/thriftrw/wire.NewValueI32函数的典型用法代码示例。如果您正苦于以下问题:Golang NewValueI32函数的具体用法?Golang NewValueI32怎么用?Golang NewValueI32使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewValueI32函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestEnumWithDuplicateValuesWire
func TestEnumWithDuplicateValuesWire(t *testing.T) {
tests := []struct {
e te.EnumWithDuplicateValues
v wire.Value
}{
{te.EnumWithDuplicateValuesP, wire.NewValueI32(0)},
{te.EnumWithDuplicateValuesQ, wire.NewValueI32(-1)},
{te.EnumWithDuplicateValuesR, wire.NewValueI32(0)},
}
for _, tt := range tests {
assertRoundTrip(t, &tt.e, tt.v, "EnumWithDuplicateValues")
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:14,代码来源:enum_test.go
示例2: TestEnumDefaultWire
func TestEnumDefaultWire(t *testing.T) {
tests := []struct {
e te.EnumDefault
v wire.Value
}{
{te.EnumDefaultFoo, wire.NewValueI32(0)},
{te.EnumDefaultBar, wire.NewValueI32(1)},
{te.EnumDefaultBaz, wire.NewValueI32(2)},
}
for _, tt := range tests {
assertRoundTrip(t, &tt.e, tt.v, "EnumDefault")
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:14,代码来源:enum_test.go
示例3: ToWire
func (v *PrimitiveRequiredStruct) ToWire() (wire.Value, error) {
var (
fields [8]wire.Field
i int = 0
w wire.Value
err error
)
w, err = wire.NewValueBool(v.BoolField), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 1, Value: w}
i++
w, err = wire.NewValueI8(v.ByteField), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 2, Value: w}
i++
w, err = wire.NewValueI16(v.Int16Field), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 3, Value: w}
i++
w, err = wire.NewValueI32(v.Int32Field), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 4, Value: w}
i++
w, err = wire.NewValueI64(v.Int64Field), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 5, Value: w}
i++
w, err = wire.NewValueDouble(v.DoubleField), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 6, Value: w}
i++
w, err = wire.NewValueString(v.StringField), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 7, Value: w}
i++
if v.BinaryField == nil {
return w, errors.New("field BinaryField of PrimitiveRequiredStruct is required")
}
w, err = wire.NewValueBinary(v.BinaryField), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 8, Value: w}
i++
return wire.NewValueStruct(wire.Struct{Fields: fields[:i]}), nil
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:60,代码来源:types.go
示例4: TestUnionFromWireInconsistencies
func TestUnionFromWireInconsistencies(t *testing.T) {
tests := []struct {
desc string
input wire.Value
success *tu.Document
failure string
}{
{
desc: "multiple recognized fields",
input: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueBinary([]byte{1, 2, 3})},
{ID: 2, Value: wire.NewValueString("hello")},
}}),
failure: "should have exactly one field: got 2 fields",
},
{
desc: "recognized and unrecognized fields",
input: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueBinary([]byte{1, 2, 3})},
{ID: 3, Value: wire.NewValueString("hello")},
}}),
success: &tu.Document{Pdf: []byte{1, 2, 3}},
},
{
desc: "recognized field duplicates",
input: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueBinary([]byte{1, 2, 3})},
{ID: 1, Value: wire.NewValueBinary([]byte{4, 5, 6})},
}}),
success: &tu.Document{Pdf: []byte{4, 5, 6}},
},
{
desc: "only unrecognized fields",
input: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 2, Value: wire.NewValueI32(42)}, // also a type mismatch
{ID: 3, Value: wire.NewValueString("hello")},
}}),
failure: "should have exactly one field: got 0 fields",
},
{
desc: "no fields",
input: wire.NewValueStruct(wire.Struct{}),
failure: "should have exactly one field: got 0 fields",
},
}
for _, tt := range tests {
var o tu.Document
err := o.FromWire(tt.input)
if tt.success != nil {
if assert.NoError(t, err, tt.desc) {
assert.Equal(t, tt.success, &o, tt.desc)
}
} else {
if assert.Error(t, err, tt.desc) {
assert.Contains(t, err.Error(), tt.failure, tt.desc)
}
}
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:60,代码来源:struct_test.go
示例5: TestStructFromWireUnrecognizedField
func TestStructFromWireUnrecognizedField(t *testing.T) {
tests := []struct {
desc string
give wire.Value
want ts.ContactInfo
wantError string
}{
{
desc: "unknown field",
give: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("foo")},
{ID: 2, Value: wire.NewValueI32(42)},
}}),
want: ts.ContactInfo{EmailAddress: "foo"},
},
{
desc: "only unknown field",
give: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 2, Value: wire.NewValueString("bar")},
}}),
wantError: "field EmailAddress of ContactInfo is required",
},
{
desc: "wrong type for recognized field",
give: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueI32(42)},
{ID: 1, Value: wire.NewValueString("foo")},
}}),
want: ts.ContactInfo{EmailAddress: "foo"},
},
}
for _, tt := range tests {
var o ts.ContactInfo
err := o.FromWire(tt.give)
if tt.wantError != "" {
if assert.Error(t, err, tt.desc) {
assert.Contains(t, err.Error(), tt.wantError)
}
} else {
if assert.NoError(t, err, tt.desc) {
assert.Equal(t, tt.want, o)
}
}
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:47,代码来源:struct_test.go
示例6: ForEach
func (m _Map_I32_I32_MapItemList) ForEach(f func(wire.MapItem) error) error {
for k, v := range m {
kw, err := wire.NewValueI32(k), error(nil)
if err != nil {
return err
}
vw, err := wire.NewValueI32(v), error(nil)
if err != nil {
return err
}
err = f(wire.MapItem{Key: kw, Value: vw})
if err != nil {
return err
}
}
return nil
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:17,代码来源:types.go
示例7: ToWire
func (v *ThriftTest_TestMulti_Args) ToWire() (wire.Value, error) {
var (
fields [6]wire.Field
i int = 0
w wire.Value
err error
)
if v.Arg0 != nil {
w, err = wire.NewValueI8(*(v.Arg0)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 1, Value: w}
i++
}
if v.Arg1 != nil {
w, err = wire.NewValueI32(*(v.Arg1)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 2, Value: w}
i++
}
if v.Arg2 != nil {
w, err = wire.NewValueI64(*(v.Arg2)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 3, Value: w}
i++
}
if v.Arg3 != nil {
w, err = wire.NewValueMap(_Map_I16_String_MapItemList(v.Arg3)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 4, Value: w}
i++
}
if v.Arg4 != nil {
w, err = v.Arg4.ToWire()
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 5, Value: w}
i++
}
if v.Arg5 != nil {
w, err = v.Arg5.ToWire()
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 6, Value: w}
i++
}
return wire.NewValueStruct(wire.Struct{Fields: fields[:i]}), nil
}
开发者ID:yarpc,项目名称:yarpc-go,代码行数:57,代码来源:thrifttest_testmulti.go
示例8: ToWire
func (v *ThriftTest_TestI32_Args) ToWire() (wire.Value, error) {
var (
fields [1]wire.Field
i int = 0
w wire.Value
err error
)
if v.Thing != nil {
w, err = wire.NewValueI32(*(v.Thing)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 1, Value: w}
i++
}
return wire.NewValueStruct(wire.Struct{Fields: fields[:i]}), nil
}
开发者ID:yarpc,项目名称:yarpc-go,代码行数:17,代码来源:thrifttest_testi32.go
示例9: TestDisableEnveloperEncode
func TestDisableEnveloperEncode(t *testing.T) {
rand := rand.New(rand.NewSource(time.Now().Unix()))
tests := []struct {
value wire.Value
want []byte
}{
{
wire.NewValueStruct(wire.Struct{Fields: []wire.Field{}}),
[]byte{0x00},
},
{
wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueI32(42)},
}}),
[]byte{
0x08, 0x00, 0x01,
0x00, 0x00, 0x00, 0x2a,
0x00,
},
},
}
for _, tt := range tests {
e := wire.Envelope{Value: tt.value, Type: wire.Call}
generate(&e.Name, rand)
generate(&e.SeqID, rand)
var buffer bytes.Buffer
proto := disableEnvelopingProtocol{protocol.Binary, wire.Reply}
if !assert.NoError(t, proto.EncodeEnveloped(e, &buffer)) {
continue
}
assert.Equal(t, tt.want, buffer.Bytes())
gotE, err := proto.DecodeEnveloped(bytes.NewReader(tt.want))
if !assert.NoError(t, err) {
continue
}
assert.Equal(t, wire.Reply, gotE.Type)
assert.True(t, wire.ValuesAreEqual(tt.value, gotE.Value))
}
}
开发者ID:yarpc,项目名称:yarpc-go,代码行数:45,代码来源:envelope_test.go
示例10: ForEach
func (m _Map_I32_Map_I32_I32_MapItemList) ForEach(f func(wire.MapItem) error) error {
for k, v := range m {
if v == nil {
return fmt.Errorf("invalid [%v]: value is nil", k)
}
kw, err := wire.NewValueI32(k), error(nil)
if err != nil {
return err
}
vw, err := wire.NewValueMap(_Map_I32_I32_MapItemList(v)), error(nil)
if err != nil {
return err
}
err = f(wire.MapItem{Key: kw, Value: vw})
if err != nil {
return err
}
}
return nil
}
开发者ID:yarpc,项目名称:yarpc-go,代码行数:20,代码来源:thrifttest_testmapmap.go
示例11: ToWire
func (v *HandshakeResponse) ToWire() (wire.Value, error) {
var (
fields [4]wire.Field
i int = 0
w wire.Value
err error
)
w, err = wire.NewValueString(v.Name), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 1, Value: w}
i++
w, err = wire.NewValueI32(v.APIVersion), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 2, Value: w}
i++
if v.Features == nil {
return w, errors.New("field Features of HandshakeResponse is required")
}
w, err = wire.NewValueList(_List_Feature_ValueList(v.Features)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 3, Value: w}
i++
if v.LibraryVersion != nil {
w, err = wire.NewValueString(*(v.LibraryVersion)), error(nil)
if err != nil {
return w, err
}
fields[i] = wire.Field{ID: 4, Value: w}
i++
}
return wire.NewValueStruct(wire.Struct{Fields: fields[:i]}), nil
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:38,代码来源:types.go
示例12: TestOptionalEnum
func TestOptionalEnum(t *testing.T) {
foo := te.EnumDefaultFoo
tests := []struct {
s te.StructWithOptionalEnum
v wire.Value
}{
{
te.StructWithOptionalEnum{E: &foo},
wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueI32(0)},
}}),
},
{
te.StructWithOptionalEnum{},
wire.NewValueStruct(wire.Struct{Fields: []wire.Field{}}),
},
}
for _, tt := range tests {
assertRoundTrip(t, &tt.s, tt.v, "StructWithOptionalEnum")
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:23,代码来源:enum_test.go
示例13: TestClient
func TestClient(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
internalError := exception.ExceptionTypeInternalError
unknownMethod := exception.ExceptionTypeUnknownMethod
tests := []struct {
desc string
// Either transportError or decode* can be set.
transportError error
decodeEnvelope wire.Envelope
decodeError error
wantError error // expected error if any
}{
{
desc: "nothing went wrong",
decodeEnvelope: wire.Envelope{
Name: "hello",
Type: wire.Reply,
SeqID: 1,
Value: wire.NewValueStruct(wire.Struct{}),
},
},
{
desc: "decode error",
decodeError: errors.New("great sadness"),
wantError: errors.New("great sadness"),
},
{
desc: "internal error",
decodeEnvelope: wire.Envelope{
Name: "hello",
Type: wire.Exception,
SeqID: 1,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("great sadness")},
{ID: 2, Value: wire.NewValueI32(6)}, // Internal error
}}),
},
wantError: &exception.TApplicationException{
Message: ptr.String("great sadness"),
Type: &internalError,
},
},
{
desc: "unknown method",
decodeEnvelope: wire.Envelope{
Name: "hello",
Type: wire.Exception,
SeqID: 1,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString(`unknown method "hello"`)},
{ID: 2, Value: wire.NewValueI32(1)}, // Internal error
}}),
},
wantError: &exception.TApplicationException{
Message: ptr.String(`unknown method "hello"`),
Type: &unknownMethod,
},
},
{
desc: "unknown envelope type",
decodeEnvelope: wire.Envelope{
Name: "hello",
Type: wire.EnvelopeType(12),
SeqID: 1,
Value: wire.NewValueStruct(wire.Struct{}),
},
wantError: errUnknownEnvelopeType(12),
},
{
desc: "transport error",
transportError: errors.New("great sadness"),
wantError: errors.New("great sadness"),
},
}
for _, tt := range tests {
proto := NewMockProtocol(mockCtrl)
proto.EXPECT().EncodeEnveloped(
wire.Envelope{
Name: "hello",
Type: wire.Call,
SeqID: 1,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("world")},
}}),
},
gomock.Any(),
).Do(func(_ wire.Envelope, w io.Writer) {
_, err := w.Write([]byte{1, 2, 3})
assert.NoError(t, err, tt.desc)
}).Return(nil)
transport := envelopetest.NewMockTransport(mockCtrl)
if tt.transportError != nil {
transport.EXPECT().Send([]byte{1, 2, 3}).Return(nil, tt.transportError)
//.........这里部分代码省略.........
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:101,代码来源:client_test.go
示例14: vi32
func vi32(i int32) wire.Value {
return wire.NewValueI32(i)
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:3,代码来源:value_test.go
示例15: ToWire
func (v ExceptionType) ToWire() (wire.Value, error) {
return wire.NewValueI32(int32(v)), nil
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:3,代码来源:types.go
示例16: TestStructValidation
//.........这里部分代码省略.........
}),
),
},
}}),
wantError: "field EndPoint of Edge is required",
},
{
desc: "User: contact: missing emailAddress",
deserialize: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("hello")},
{
ID: 2,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{}}),
},
}}),
typ: reflect.TypeOf(ts.User{}),
wantError: "field EmailAddress of ContactInfo is required",
},
{
desc: "PrimitiveContainersRequired: missing list",
serialize: &tc.PrimitiveContainersRequired{
SetOfInts: map[int32]struct{}{
1: {},
2: {},
3: {},
},
MapOfIntsToDoubles: map[int64]float64{1: 2.3, 4: 5.6},
},
deserialize: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{
ID: 2,
Value: wire.NewValueSet(
wire.ValueListFromSlice(wire.TI32, []wire.Value{
wire.NewValueI32(1),
wire.NewValueI32(2),
wire.NewValueI32(3),
}),
),
},
{
ID: 3,
Value: wire.NewValueMap(
wire.MapItemListFromSlice(wire.TI64, wire.TDouble, []wire.MapItem{
{
Key: wire.NewValueI64(1),
Value: wire.NewValueDouble(2.3),
},
{
Key: wire.NewValueI64(4),
Value: wire.NewValueDouble(5.6),
},
}),
),
},
}}),
wantError: "field ListOfStrings of PrimitiveContainersRequired is required",
},
{
desc: "PrimitiveContainersRequired: missing set",
serialize: &tc.PrimitiveContainersRequired{
ListOfStrings: []string{"hello", "world"},
MapOfIntsToDoubles: map[int64]float64{1: 2.3, 4: 5.6},
},
deserialize: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{
ID: 1,
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:67,代码来源:struct_test.go
示例17: TestStructWithDefaults
func TestStructWithDefaults(t *testing.T) {
enumDefaultFoo := te.EnumDefaultFoo
enumDefaultBar := te.EnumDefaultBar
enumDefaultBaz := te.EnumDefaultBaz
tests := []struct {
give *ts.DefaultsStruct
giveWire wire.Value
wantToWire wire.Value
wantFromWire *ts.DefaultsStruct
}{
{
give: &ts.DefaultsStruct{},
giveWire: wire.NewValueStruct(wire.Struct{}),
wantToWire: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueI32(100)},
{ID: 2, Value: wire.NewValueI32(200)},
{ID: 3, Value: wire.NewValueI32(1)},
{ID: 4, Value: wire.NewValueI32(2)},
{
ID: 5,
Value: wire.NewValueList(
wire.ValueListFromSlice(wire.TBinary, []wire.Value{
wire.NewValueString("hello"),
wire.NewValueString("world"),
}),
),
},
{
ID: 6,
Value: wire.NewValueList(
wire.ValueListFromSlice(wire.TDouble, []wire.Value{
wire.NewValueDouble(1.0),
wire.NewValueDouble(2.0),
wire.NewValueDouble(3.0),
}),
),
},
{
ID: 7,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{
ID: 1,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueDouble(1.0)},
{ID: 2, Value: wire.NewValueDouble(2.0)},
}}),
},
{
ID: 2,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueDouble(100.0)},
{ID: 2, Value: wire.NewValueDouble(200.0)},
}}),
},
}}),
},
{
ID: 8,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{
ID: 1,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueDouble(1.0)},
{ID: 2, Value: wire.NewValueDouble(2.0)},
}}),
},
{
ID: 2,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueDouble(3.0)},
{ID: 2, Value: wire.NewValueDouble(4.0)},
}}),
},
}}),
},
}}),
wantFromWire: &ts.DefaultsStruct{
RequiredPrimitive: int32p(100),
OptionalPrimitive: int32p(200),
RequiredEnum: &enumDefaultBar,
OptionalEnum: &enumDefaultBaz,
RequiredList: []string{"hello", "world"},
OptionalList: []float64{1.0, 2.0, 3.0},
RequiredStruct: &ts.Frame{
TopLeft: &ts.Point{X: 1.0, Y: 2.0},
Size: &ts.Size{Width: 100.0, Height: 200.0},
},
OptionalStruct: &ts.Edge{
StartPoint: &ts.Point{X: 1.0, Y: 2.0},
EndPoint: &ts.Point{X: 3.0, Y: 4.0},
},
},
},
{
give: &ts.DefaultsStruct{
RequiredPrimitive: int32p(0),
OptionalEnum: &enumDefaultFoo,
//.........这里部分代码省略.........
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:101,代码来源:struct_test.go
示例18: TestClient
func TestClient(t *testing.T) {
tests := []struct {
desc string
giveRequestBody envelope.Enveloper // outgoing request body
giveResponseEnvelope *wire.Envelope // returned on DecodeEnveloped()
giveResponseBody *wire.Value // return on Decode()
clientOptions []ClientOption
expectCall bool // whether outbound.Call is expected
wantRequestEnvelope *wire.Envelope // expect EncodeEnveloped(x)
wantRequestBody *wire.Value // expect Encode(x)
wantError string // whether an error is expected
}{
{
desc: "happy case",
clientOptions: []ClientOption{Enveloped},
giveRequestBody: fakeEnveloper(wire.Call),
wantRequestEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Call,
Value: wire.NewValueStruct(wire.Struct{}),
},
expectCall: true,
giveResponseEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Reply,
Value: wire.NewValueStruct(wire.Struct{}),
},
},
{
desc: "happy case without enveloping",
giveRequestBody: fakeEnveloper(wire.Call),
wantRequestBody: valueptr(wire.NewValueStruct(wire.Struct{})),
expectCall: true,
giveResponseBody: valueptr(wire.NewValueStruct(wire.Struct{})),
},
{
desc: "wrong envelope type for request",
clientOptions: []ClientOption{Enveloped},
giveRequestBody: fakeEnveloper(wire.Reply),
wantError: `failed to encode "thrift" request body for procedure ` +
`"MyService::someMethod" of service "service": unexpected envelope type: Reply`,
},
{
desc: "TApplicationException",
clientOptions: []ClientOption{Enveloped},
giveRequestBody: fakeEnveloper(wire.Call),
wantRequestEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Call,
Value: wire.NewValueStruct(wire.Struct{}),
},
expectCall: true,
giveResponseEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Exception,
Value: wire.NewValueStruct(wire.Struct{Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("great sadness")},
{ID: 2, Value: wire.NewValueI32(7)},
}}),
},
wantError: `thrift request to procedure "MyService::someMethod" of ` +
`service "service" encountered an internal failure: ` +
"TApplicationException{Message: great sadness, Type: PROTOCOL_ERROR}",
},
{
desc: "wrong envelope type for response",
clientOptions: []ClientOption{Enveloped},
giveRequestBody: fakeEnveloper(wire.Call),
wantRequestEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Call,
Value: wire.NewValueStruct(wire.Struct{}),
},
expectCall: true,
giveResponseEnvelope: &wire.Envelope{
Name: "someMethod",
SeqID: 1,
Type: wire.Call,
Value: wire.NewValueStruct(wire.Struct{}),
},
wantError: `failed to decode "thrift" response body for procedure ` +
`"MyService::someMethod" of service "service": unexpected envelope type: Call`,
},
}
for _, tt := range tests {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
proto := NewMockProtocol(mockCtrl)
if tt.wantRequestEnvelope != nil {
proto.EXPECT().EncodeEnveloped(*tt.wantRequestEnvelope, gomock.Any()).
Do(func(_ wire.Envelope, w io.Writer) {
//.........这里部分代码省略.........
开发者ID:yarpc,项目名称:yarpc-go,代码行数:101,代码来源:outbound_test.go
示例19: ReadValue
// ReadValue reads a value off the given type off the wire starting at the
// given offset.
//
// Returns the Value, the new offset, and an error if there was a decode error.
func (br *Reader) ReadValue(t wire.Type, off int64) (wire.Value, int64, error) {
switch t {
case wire.TBool:
b, off, err := br.readByte(off)
if err != nil {
return wire.Value{}, off, err
}
if b != 0 && b != 1 {
return wire.Value{}, off, decodeErrorf(
"invalid value %q for bool field", b,
)
}
return wire.NewValueBool(b == 1), off, nil
case wire.TI8:
b, off, err := br.readByte(off)
return wire.NewValueI8(int8(b)), off, err
case wire.TDouble:
value, off, err := br.readInt64(off)
d := math.Float64frombits(uint64(value))
return wire.NewValueDouble(d), off, err
case wire.TI16:
n, off, err := br.readInt16(off)
return wire.NewValueI16(n), off, err
case wire.TI32:
n, off, err := br.readInt32(off)
return wire.NewValueI32(n), off, err
case wire.TI64:
n, off, err := br.readInt64(off)
return wire.NewValueI64(n), off, err
case wire.TBinary:
v, off, err := br.readBytes(off)
return wire.NewValueBinary(v), off, err
case wire.TStruct:
s, off, err := br.readStruct(off)
return wire.NewValueStruct(s), off, err
case wire.TMap:
m, off, err := br.readMap(off)
return wire.NewValueMap(m), off, err
case wire.TSet:
s, off, err := br.readSet(off)
return wire.NewValueSet(s), off, err
case wire.TList:
l, off, err := br.readList(off)
return wire.NewValueList(l), off, err
default:
return wire.Value{}, off, decodeErrorf("unknown ttype %v", t)
}
}
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:65,代码来源:reader.go
示例20: TestReadReply
func TestReadReply(t *testing.T) {
tests := []struct {
desc string
bs []byte
want wire.Value
wantSeqID int32
wantErr string
}{
{
desc: "Invalid envelope",
bs: []byte{0},
wantErr: "unexpected EOF",
},
{
desc: "Unexpected envelope type",
bs: []byte{
0x80, 0x01, 0x00, 0x01, // version|type:4 = 1 | call
0x00, 0x00, 0x00, 0x03, // name length = 3
'a', 'b', 'c', // "abc"
0x00, 0x00, 0x04, 0xd2, // seqID:4 = 1234
// <struct>
0x00, // stop
},
want: wire.NewValueStruct(wire.Struct{}),
wantSeqID: 1234,
wantErr: "unknown envelope",
},
{
desc: "Valid reply",
bs: []byte{
0x80, 0x01, 0x00, 0x02, // version|type:4 = 2 | reply
0x00, 0x00, 0x00, 0x03, // name length = 3
'a', 'b', 'c', // "abc"
0x00, 0x00, 0x04, 0xd2, // seqID:4 = 1234
// <struct>
0x00, // stop
},
want: wire.NewValueStruct(wire.Struct{}),
wantSeqID: 1234,
},
{
desc: "Invalid exception",
bs: []byte{
0x80, 0x01, 0x00, 0x03, // version|type:4 = 3 | exception
0x00, 0x00, 0x00, 0x03, // name length = 3
'a', 'b', 'c', // "abc"
0x00, 0x00, 0x04, 0xd2, // seqID:4 = 1234
// <struct> (invalid)
0x08, // type:1 = i32
0x00, 0x01, // id:2 = 1
0x00, 0x00, 0x00, 0x01, // value = 1
0x00, // stop
},
want: wire.NewValueStruct(wire.Struct{
Fields: []wire.Field{
{ID: 1, Value: wire.NewValueI32(1)},
},
}),
wantSeqID: 1234,
// TODO: This should probably fail to decode. Right now, it's being ignored.
// wantErr: "failed to decode exception",
wantErr: "TApplicationException{}",
},
{
desc: "Valid exception",
bs: []byte{
0x80, 0x01, 0x00, 0x03, // version|type:4 = 3 | exception
0x00, 0x00, 0x00, 0x03, // name length = 3
'a', 'b', 'c', // "abc"
0x00, 0x00, 0x04, 0xd2, // seqID:4 = 1234
// <struct>
0x0b, // type:1 = string
0x00, 0x01, // id:2 = 1
0x00, 0x00, 0x00, 0x06, // length = 3
'e', 'r', 'r', 'M', 's', 'g', // "errMsg"
0x08, // type:1 = i32
0x00, 0x02, // id:2 = 2
0x00, 0x00, 0x00, 0x01, // value = 1 (unknown method)
0x00, // stop
},
want: wire.NewValueStruct(wire.Struct{
Fields: []wire.Field{
{ID: 1, Value: wire.NewValueString("errMsg")},
{ID: 2, Value: wire.NewValueI32(1)},
},
}),
wantSeqID: 1234,
wantErr: "TApplicationException{Message: errMsg, Type: UNKNOWN_METHOD}",
},
}
for _, tt := range tests {
result, seqID, err := ReadReply(protocol.Binary, bytes.NewReader(tt.bs))
if tt.wantErr != "" {
if assert.Error(t, err, tt.desc) {
assert.Contains(t, err.Error(), tt.wantErr, "%v: error mismatch", tt.desc)
//.........这里部分代码省略.........
开发者ID:thriftrw,项目名称:thriftrw-go,代码行数:101,代码来源:envelope_test.go
注:本文中的go/uber/org/thriftrw/wire.NewValueI32函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论