errors_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package elastic
  2. import (
  3. "bufio"
  4. "fmt"
  5. "net/http"
  6. "strings"
  7. "testing"
  8. )
  9. func TestResponseError(t *testing.T) {
  10. message := "Something went seriously wrong."
  11. raw := "HTTP/1.1 500 Internal Server Error\r\n" +
  12. "\r\n" +
  13. `{"status":500,"error":"` + message + `"}` + "\r\n"
  14. r := bufio.NewReader(strings.NewReader(raw))
  15. resp, err := http.ReadResponse(r, nil)
  16. if err != nil {
  17. t.Fatal(err)
  18. }
  19. err = checkResponse(resp)
  20. if err == nil {
  21. t.Fatalf("expected error; got: %v", err)
  22. }
  23. // Check for correct error message
  24. expected := fmt.Sprintf("elastic: Error %d (%s): %s", resp.StatusCode, http.StatusText(resp.StatusCode), message)
  25. got := err.Error()
  26. if got != expected {
  27. t.Fatalf("expected %q; got: %q", expected, got)
  28. }
  29. // Check that error is of type *elastic.Error, which contains additional information
  30. e, ok := err.(*Error)
  31. if !ok {
  32. t.Fatal("expected error to be of type *elastic.Error")
  33. }
  34. if e.Status != resp.StatusCode {
  35. t.Fatalf("expected status code %d; got: %d", resp.StatusCode, e.Status)
  36. }
  37. if e.Message != message {
  38. t.Fatalf("expected error message %q; got: %q", message, e.Message)
  39. }
  40. }