Split Run into two parts.
This will make writing request methods which return different response types simpler.
This commit is contained in:
		
							parent
							
								
									3f6bbaec1f
								
							
						
					
					
						commit
						f760e32967
					
				
							
								
								
									
										79
									
								
								goes.go
									
									
									
									
									
								
							
							
						
						
									
										79
									
								
								goes.go
									
									
									
									
									
								
							| @ -329,8 +329,47 @@ func (c *Connection) Delete(d Document, extraArgs url.Values) (*Response, error) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Run executes an elasticsearch Request. It converts data to Json, sends the
 | // Run executes an elasticsearch Request. It converts data to Json, sends the
 | ||||||
| // request and return the Response obtained
 | // request and returns the Response obtained
 | ||||||
| func (req *Request) Run() (*Response, error) { | func (req *Request) Run() (*Response, error) { | ||||||
|  | 	body, statusCode, err := req.run() | ||||||
|  | 	esResp := &Response{Status: statusCode} | ||||||
|  | 
 | ||||||
|  | 	if err != nil { | ||||||
|  | 		return esResp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if req.method != "HEAD" { | ||||||
|  | 		err = json.Unmarshal(body, &esResp) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return esResp, err | ||||||
|  | 		} | ||||||
|  | 		json.Unmarshal(body, &esResp.Raw) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = json.Unmarshal(body, &esResp) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return &Response{Status: statusCode}, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if req.api == "_bulk" && esResp.Errors { | ||||||
|  | 		for _, item := range esResp.Items { | ||||||
|  | 			for _, i := range item { | ||||||
|  | 				if i.Error != "" { | ||||||
|  | 					return esResp, &SearchError{i.Error, i.Status} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return esResp, &SearchError{Msg: "Unknown error while bulk indexing"} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if esResp.Error != "" { | ||||||
|  | 		return esResp, &SearchError{esResp.Error, esResp.Status} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return esResp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (req *Request) run() ([]byte, uint64, error) { | ||||||
| 	postData := []byte{} | 	postData := []byte{} | ||||||
| 
 | 
 | ||||||
| 	// XXX : refactor this
 | 	// XXX : refactor this
 | ||||||
| @ -341,7 +380,7 @@ func (req *Request) Run() (*Response, error) { | |||||||
| 	} else { | 	} else { | ||||||
| 		b, err := json.Marshal(req.Query) | 		b, err := json.Marshal(req.Query) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return &Response{}, err | 			return nil, 0, err | ||||||
| 		} | 		} | ||||||
| 		postData = b | 		postData = b | ||||||
| 	} | 	} | ||||||
| @ -350,7 +389,7 @@ func (req *Request) Run() (*Response, error) { | |||||||
| 
 | 
 | ||||||
| 	newReq, err := http.NewRequest(req.method, req.Url(), reader) | 	newReq, err := http.NewRequest(req.method, req.Url(), reader) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return &Response{}, err | 		return nil, 0, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if req.method == "POST" || req.method == "PUT" { | 	if req.method == "POST" || req.method == "PUT" { | ||||||
| @ -359,47 +398,21 @@ func (req *Request) Run() (*Response, error) { | |||||||
| 
 | 
 | ||||||
| 	resp, err := req.Conn.Client.Do(newReq) | 	resp, err := req.Conn.Client.Do(newReq) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return &Response{}, err | 		return nil, 0, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	defer resp.Body.Close() | 	defer resp.Body.Close() | ||||||
| 
 | 
 | ||||||
| 	body, err := ioutil.ReadAll(resp.Body) | 	body, err := ioutil.ReadAll(resp.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return &Response{}, err | 		return nil, uint64(resp.StatusCode), err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if resp.StatusCode > 201 && resp.StatusCode < 400 { | 	if resp.StatusCode > 201 && resp.StatusCode < 400 { | ||||||
| 		return &Response{}, errors.New(string(body)) | 		return nil, uint64(resp.StatusCode), errors.New(string(body)) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	esResp := new(Response) | 	return body, uint64(resp.StatusCode), nil | ||||||
| 	if req.method == "HEAD" { |  | ||||||
| 		esResp.Status = uint64(resp.StatusCode) |  | ||||||
| 	} else { |  | ||||||
| 		err = json.Unmarshal(body, &esResp) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return &Response{}, err |  | ||||||
| 		} |  | ||||||
| 		json.Unmarshal(body, &esResp.Raw) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if req.api == "_bulk" && esResp.Errors { |  | ||||||
| 		for _, item := range esResp.Items { |  | ||||||
| 			for _, i := range item { |  | ||||||
| 				if i.Error != "" { |  | ||||||
| 					return &Response{}, &SearchError{i.Error, i.Status} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return &Response{}, &SearchError{Msg: "Unknown error while bulk indexing"} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	if esResp.Error != "" { |  | ||||||
| 		return &Response{}, &SearchError{esResp.Error, esResp.Status} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return esResp, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Url builds a Request for a URL
 | // Url builds a Request for a URL
 | ||||||
|  | |||||||
							
								
								
									
										34
									
								
								goes_test.go
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								goes_test.go
									
									
									
									
									
								
							| @ -156,7 +156,8 @@ func (s *GoesTestSuite) TestDeleteIndexInexistantIndex(c *C) { | |||||||
| 	resp, err := conn.DeleteIndex("foobar") | 	resp, err := conn.DeleteIndex("foobar") | ||||||
| 
 | 
 | ||||||
| 	c.Assert(err.Error(), Equals, "[404] IndexMissingException[[foobar] missing]") | 	c.Assert(err.Error(), Equals, "[404] IndexMissingException[[foobar] missing]") | ||||||
| 	c.Assert(resp, DeepEquals, &Response{}) | 	resp.Raw = nil // Don't make us have to duplicate this.
 | ||||||
|  | 	c.Assert(resp, DeepEquals, &Response{Status: 404, Error: "IndexMissingException[[foobar] missing]"}) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (s *GoesTestSuite) TestDeleteIndexExistingIndex(c *C) { | func (s *GoesTestSuite) TestDeleteIndexExistingIndex(c *C) { | ||||||
| @ -171,8 +172,10 @@ func (s *GoesTestSuite) TestDeleteIndexExistingIndex(c *C) { | |||||||
| 	resp, err := conn.DeleteIndex(indexName) | 	resp, err := conn.DeleteIndex(indexName) | ||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{} | 	expectedResponse := &Response{ | ||||||
| 	expectedResponse.Acknowledged = true | 		Acknowledged: true, | ||||||
|  | 		Status:       200, | ||||||
|  | 	} | ||||||
| 	resp.Raw = nil | 	resp.Raw = nil | ||||||
| 	c.Assert(resp, DeepEquals, expectedResponse) | 	c.Assert(resp, DeepEquals, expectedResponse) | ||||||
| } | } | ||||||
| @ -379,6 +382,7 @@ func (s *GoesTestSuite) TestIndexWithFieldsInStruct(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  201, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| @ -444,6 +448,7 @@ func (s *GoesTestSuite) TestIndexIdDefined(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  201, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| @ -513,10 +518,11 @@ func (s *GoesTestSuite) TestDelete(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
| 		Found: true, | 		Status: 200, | ||||||
| 		Index: indexName, | 		Found:  true, | ||||||
| 		Type:  docType, | 		Index:  indexName, | ||||||
| 		Id:    docId, | 		Type:   docType, | ||||||
|  | 		Id:     docId, | ||||||
| 		// XXX : even after a DELETE the version number seems to be incremented
 | 		// XXX : even after a DELETE the version number seems to be incremented
 | ||||||
| 		Version: 2, | 		Version: 2, | ||||||
| 	} | 	} | ||||||
| @ -527,10 +533,11 @@ func (s *GoesTestSuite) TestDelete(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse = &Response{ | 	expectedResponse = &Response{ | ||||||
| 		Found: false, | 		Status: 404, | ||||||
| 		Index: indexName, | 		Found:  false, | ||||||
| 		Type:  docType, | 		Index:  indexName, | ||||||
| 		Id:    docId, | 		Type:   docType, | ||||||
|  | 		Id:     docId, | ||||||
| 		// XXX : even after a DELETE the version number seems to be incremented
 | 		// XXX : even after a DELETE the version number seems to be incremented
 | ||||||
| 		Version: 3, | 		Version: 3, | ||||||
| 	} | 	} | ||||||
| @ -588,6 +595,7 @@ func (s *GoesTestSuite) TestDeleteByQuery(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  200, | ||||||
| 		Found:   false, | 		Found:   false, | ||||||
| 		Index:   "", | 		Index:   "", | ||||||
| 		Type:    "", | 		Type:    "", | ||||||
| @ -633,6 +641,7 @@ func (s *GoesTestSuite) TestGet(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  200, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
| @ -650,6 +659,7 @@ func (s *GoesTestSuite) TestGet(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse = &Response{ | 	expectedResponse = &Response{ | ||||||
|  | 		Status:  200, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
| @ -1147,6 +1157,7 @@ func (s *GoesTestSuite) TestUpdate(c *C) { | |||||||
| 	time.Sleep(200 * time.Millisecond) | 	time.Sleep(200 * time.Millisecond) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  201, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| @ -1317,6 +1328,7 @@ func (s *GoesTestSuite) TestAddAlias(c *C) { | |||||||
| 	c.Assert(err, IsNil) | 	c.Assert(err, IsNil) | ||||||
| 
 | 
 | ||||||
| 	expectedResponse := &Response{ | 	expectedResponse := &Response{ | ||||||
|  | 		Status:  200, | ||||||
| 		Index:   indexName, | 		Index:   indexName, | ||||||
| 		Type:    docType, | 		Type:    docType, | ||||||
| 		Id:      docId, | 		Id:      docId, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user