auth_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package apiclient
  2. import (
  3. "context"
  4. "net/http"
  5. "net/url"
  6. "testing"
  7. log "github.com/sirupsen/logrus"
  8. "github.com/stretchr/testify/assert"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestApiAuth(t *testing.T) {
  12. log.SetLevel(log.TraceLevel)
  13. mux, urlx, teardown := setup()
  14. mux.HandleFunc("/decisions", func(w http.ResponseWriter, r *http.Request) {
  15. testMethod(t, r, "GET")
  16. if r.Header.Get("X-Api-Key") == "ixu" {
  17. assert.Equal(t, r.URL.RawQuery, "ip=1.2.3.4")
  18. w.WriteHeader(http.StatusOK)
  19. w.Write([]byte(`null`))
  20. } else {
  21. w.WriteHeader(http.StatusForbidden)
  22. w.Write([]byte(`{"message":"access forbidden"}`))
  23. }
  24. })
  25. log.Printf("URL is %s", urlx)
  26. apiURL, err := url.Parse(urlx + "/")
  27. if err != nil {
  28. t.Fatalf("parsing api url: %s", apiURL)
  29. }
  30. defer teardown()
  31. //ok no answer
  32. auth := &APIKeyTransport{
  33. APIKey: "ixu",
  34. }
  35. newcli, err := NewDefaultClient(apiURL, "v1", "toto", auth.Client())
  36. if err != nil {
  37. t.Fatalf("new api client: %s", err)
  38. }
  39. alert := DecisionsListOpts{IPEquals: new(string)}
  40. *alert.IPEquals = "1.2.3.4"
  41. _, resp, err := newcli.Decisions.List(context.Background(), alert)
  42. require.NoError(t, err)
  43. if resp.Response.StatusCode != http.StatusOK {
  44. t.Errorf("Alerts.List returned status: %d, want %d", resp.Response.StatusCode, http.StatusOK)
  45. }
  46. //ko bad token
  47. auth = &APIKeyTransport{
  48. APIKey: "bad",
  49. }
  50. newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client())
  51. if err != nil {
  52. t.Fatalf("new api client: %s", err)
  53. }
  54. _, resp, err = newcli.Decisions.List(context.Background(), alert)
  55. log.Infof("--> %s", err)
  56. if resp.Response.StatusCode != http.StatusForbidden {
  57. t.Errorf("Alerts.List returned status: %d, want %d", resp.Response.StatusCode, http.StatusOK)
  58. }
  59. assert.Contains(t, err.Error(), "API error: access forbidden")
  60. //ko empty token
  61. auth = &APIKeyTransport{}
  62. newcli, err = NewDefaultClient(apiURL, "v1", "toto", auth.Client())
  63. if err != nil {
  64. t.Fatalf("new api client: %s", err)
  65. }
  66. _, _, err = newcli.Decisions.List(context.Background(), alert)
  67. require.Error(t, err)
  68. log.Infof("--> %s", err)
  69. assert.Contains(t, err.Error(), "APIKey is empty")
  70. }