func runJSON(t crossdock.T, dispatcher yarpc.Dispatcher) { assert := crossdock.Assert(t) checks := crossdock.Checks(t) headers := yarpc.NewHeaders().With("hello", "json") token := random.String(5) resBody, resMeta, err := jsonCall(dispatcher, headers, token) if skipOnConnRefused(t, err) { return } if checks.NoError(err, "json: call failed") { assert.Equal(token, resBody, "body echoed") resHeaders := internal.RemoveVariableHeaderKeys(resMeta.Headers()) assert.Equal(headers, resHeaders, "headers echoed") } }
func hello(t crossdock.T, dispatcher yarpc.Dispatcher) { assert := crossdock.Assert(t) checks := crossdock.Checks(t) // TODO headers should be at yarpc, not transport headers := yarpc.NewHeaders().With("hello", "raw") token := random.Bytes(5) resBody, resMeta, err := rawCall(dispatcher, headers, "echo/raw", token) if skipOnConnRefused(t, err) { return } if checks.NoError(err, "raw: call failed") { assert.Equal(token, resBody, "body echoed") resHeaders := internal.RemoveVariableHeaderKeys(resMeta.Headers()) assert.Equal(headers, resHeaders, "headers echoed") } }
func runThrift(t crossdock.T, dispatcher yarpc.Dispatcher) { assert := crossdock.Assert(t) checks := crossdock.Checks(t) headers := yarpc.NewHeaders().With("hello", "thrift") token := random.String(5) resBody, resMeta, err := thriftCall(dispatcher, headers, token) if skipOnConnRefused(t, err) { return } if checks.NoError(err, "thrift: call failed") { assert.Equal(token, resBody, "body echoed") resHeaders := internal.RemoveVariableHeaderKeys(resMeta.Headers()) assert.Equal(headers, resHeaders, "headers echoed") } t.Tag("server", t.Param(params.Server)) gauntlet.RunGauntlet(t, gauntlet.Config{ Dispatcher: dispatcher, ServerName: serverName, }) }
// Run runs the headers behavior func Run(t crossdock.T) { t = createHeadersT(t) fatals := crossdock.Fatals(t) assert := crossdock.Assert(t) checks := crossdock.Checks(t) dispatcher := disp.Create(t) fatals.NoError(dispatcher.Start(), "could not start Dispatcher") defer dispatcher.Stop() var caller headerCaller encoding := t.Param(params.Encoding) switch encoding { case "raw": caller = rawCaller{raw.New(dispatcher.Channel("yarpc-test"))} case "json": caller = jsonCaller{json.New(dispatcher.Channel("yarpc-test"))} case "thrift": caller = thriftCaller{echoclient.New(dispatcher.Channel("yarpc-test"))} default: fatals.Fail("", "unknown encoding %q", encoding) } token1 := random.String(10) token2 := random.String(10) tests := []struct { desc string give yarpc.Headers want yarpc.Headers }{ { "valid headers", yarpc.NewHeaders().With("token1", token1).With("token2", token2), yarpc.NewHeaders().With("token1", token1).With("token2", token2), }, { "non-string values", yarpc.NewHeaders().With("token", "42"), yarpc.NewHeaders().With("token", "42"), }, { "empty strings", yarpc.NewHeaders().With("token", ""), yarpc.NewHeaders().With("token", ""), }, { "no headers", yarpc.Headers{}, yarpc.NewHeaders(), }, { "empty map", yarpc.NewHeaders(), yarpc.NewHeaders(), }, { "varying casing", yarpc.NewHeaders().With("ToKeN1", token1).With("tOkEn2", token2), yarpc.NewHeaders().With("token1", token1).With("token2", token2), }, { "http header conflict", yarpc.NewHeaders().With("Rpc-Procedure", "does not exist"), yarpc.NewHeaders().With("rpc-procedure", "does not exist"), }, { "mixed case value", yarpc.NewHeaders().With("token", "MIXED case Value"), yarpc.NewHeaders().With("token", "MIXED case Value"), }, } for _, tt := range tests { got, err := caller.Call(tt.give) if checks.NoError(err, "%v: call failed", tt.desc) { gotHeaders := internal.RemoveVariableHeaderKeys(got) assert.Equal(tt.want, gotHeaders, "%v: returns valid headers", tt.desc) } } }