func (suite *errorsImplSuite) SetupTest() {
	suite.Suite.SetupTest()
	suite.rawErrs = map[string]errors.Error{
		"uid1": errors.InternalServerError("com.foo.uid1", "uid1"),
		"uid2": errors.InternalServerError("com.foo.uid2", "uid2"),
		"uid3": errors.InternalServerError("com.foo.uid2", "uid3"), // Same service uid as uid2
	}
	suite.errs = &errorsImpl{}
	for uid, err := range suite.rawErrs {
		req, reqErr := client.NewJsonRequest(err.Code(), err.Description(), nil)
		if reqErr != nil {
			panic(reqErr)
		}
		suite.errs.set(uid, req, err, nil)
	}
}
func TestJsonHttpCall(t *testing.T) {
	// zoning service is OpenToTheWorld and should have _some_ zone surrounding Somerset House
	json := []byte(`{"location":{"lat":51.510761,"lng":-0.1174437}}`)
	req, err := client.NewJsonRequest("com.hailocab.service.zoning", "search", json)
	if err != nil {
		t.Fatalf("Error creating request: %v", err)
	}
	rsp := &searchproto.Response{}

	caller := HttpCaller("https://api2-staging.elasticride.com")
	perr := caller(req, rsp)

	if perr != nil {
		t.Fatalf("Error executing request: %v", perr)
	}

	if len(rsp.GetZones()) == 0 {
		t.Error("Expecting > 0 zones, got back 0")
	}
}
func TestJsonHttpCallThatFails(t *testing.T) {
	// discovery service is NOT open to the world, because it's a kernel service
	req, err := client.NewJsonRequest("com.hailocab.kernel.discovery", "services", []byte(`{}`))
	if err != nil {
		t.Fatalf("Error creating request: %v", err)
	}
	rsp := &servicesproto.Response{}

	caller := HttpCaller("https://api2-staging.elasticride.com")
	perr := caller(req, rsp)

	if perr == nil {
		t.Fatal("We are EXPECTING as error executing request")
	}

	if perr.Code() != "com.hailocab.api.rpc.auth" {
		t.Errorf("Expecting code 'com.hailocab.api.rpc.auth' got '%s'", perr.Code())
	}
	if perr.Type() != "FORBIDDEN" {
		t.Errorf("Expecting type 'FORBIDDEN' got '%s'", perr.Type())
	}
}
// ScopedJsonRequest does just the same as ScopedRequest but with JSON payload
func (self *Request) ScopedJsonRequest(service, endpoint string, payload []byte) (*client.Request, error) {
	r, err := client.NewJsonRequest(service, endpoint, payload)
	if err != nil {
		return nil, err
	}
	// load in scope
	if self.SessionID() != "" {
		r.SetSessionID(self.SessionID())
	} else {
		// double check Auth() scope
		if self.Auth().IsAuth() {
			r.SetSessionID(self.Auth().AuthUser().SessId)
		}
	}
	r.SetTraceID(self.TraceID())
	r.SetParentMessageID(self.MessageID())

	// scope -- who WE are (not who sent it to us)
	r.SetFrom(Name)
	r.SetFromEndpoint(self.Endpoint())

	return r, nil
}