From 3c4ba82a4ab3b4047a3c969969ac528b285be6f4 Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Fri, 22 Jun 2018 08:08:53 -0500 Subject: [PATCH] finish conversion of handler tests --- server/handler_test.go | 59 ++++++++++++++++-------------------------- test/pilosa.go | 7 +++++ 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/server/handler_test.go b/server/handler_test.go index 9ac0f8931..8d001b529 100644 --- a/server/handler_test.go +++ b/server/handler_test.go @@ -551,46 +551,33 @@ func TestHandler_Endpoints(t *testing.T) { } }) -} + t.Run("CORS", func(t *testing.T) { + req := test.MustNewHTTPRequest("OPTIONS", "/index/foo/query", nil) + req.Header.Add("Origin", "http://test/") + req.Header.Add("Access-Control-Request-Method", "POST") -func TestHandler_CORS(t *testing.T) { - t.Skip() // Until test.NewServer() works + w := httptest.NewRecorder() + h.ServeHTTP(w, req) + result := w.Result() - hldr := test.MustOpenHolder() - defer hldr.Close() + // This handler does not support CORS, return Method Not Allowed (405) + if result.StatusCode != 405 { + t.Fatalf("CORS preflight status should be 405, but is %v", result.StatusCode) + } - s := test.NewServer() - s.Handler.API.Holder = hldr.Holder - defer s.Close() + clus := test.MustRunMainWithCluster(t, 1, test.OptAllowedOrigins([]string{"http://test/"})) + w = httptest.NewRecorder() + h := clus[0].Handler.(*http.Handler).Handler + h.ServeHTTP(w, req) + result = w.Result() - // No CORS config present, so should fail - handler := test.MustNewHandler() - - req := test.MustNewHTTPRequest("OPTIONS", "/index/foo/query", nil) - req.Header.Add("Origin", "http://test/") - req.Header.Add("Access-Control-Request-Method", "POST") - - w := httptest.NewRecorder() - handler.ServeHTTP(w, req) - result := w.Result() - - // This handler does not support CORS, return Method Not Allowed (405) - if result.StatusCode != 405 { - t.Fatalf("CORS preflight status should be 405, but is %v", result.StatusCode) - } - - // CORS config should allow preflight response - handler = test.MustNewHandler(http.OptHandlerAllowedOrigins([]string{"http://test/"})) - w = httptest.NewRecorder() - handler.ServeHTTP(w, req) - result = w.Result() - - if result.StatusCode != 200 { - t.Fatalf("CORS preflight status should be 200, but is %v", result.StatusCode) - } - if w.HeaderMap["Access-Control-Allow-Origin"][0] != "http://test/" { - t.Fatal("CORS header not present") - } + if result.StatusCode != 200 { + t.Fatalf("CORS preflight status should be 200, but is %v", result.StatusCode) + } + if w.HeaderMap["Access-Control-Allow-Origin"][0] != "http://test/" { + t.Fatal("CORS header not present") + } + }) } func mustJSONDecode(t *testing.T, r io.Reader) (ret map[string]interface{}) { diff --git a/test/pilosa.go b/test/pilosa.go index 22e89a5df..0f5cdd0d5 100644 --- a/test/pilosa.go +++ b/test/pilosa.go @@ -52,6 +52,13 @@ func OptAntiEntropyInterval(dur time.Duration) MainOpt { } } +func OptAllowedOrigins(origins []string) MainOpt { + return func(m *Main) error { + m.Config.Handler.AllowedOrigins = origins + return nil + } +} + // NewMain returns a new instance of Main with a temporary data directory and random port. func NewMain(opts ...MainOpt) *Main { path, err := ioutil.TempDir("", "pilosa-")