diff --git a/executor_test.go b/executor_test.go index 7a0c95622..a54e394ed 100644 --- a/executor_test.go +++ b/executor_test.go @@ -489,6 +489,7 @@ func TestExecutor_Execute_Remote_Bitmap(t *testing.T) { // The local node owns slice 1. idx := MustOpenIndex() defer idx.Close() + s.Handler.Index = idx.Index idx.MustCreateFragmentIfNotExists("d", "f", pilosa.ViewStandard, 1).MustSetBits(10, (1*SliceWidth)+1) e := NewExecutor(idx.Index, c) @@ -516,6 +517,7 @@ func TestExecutor_Execute_Remote_Count(t *testing.T) { // Create local executor data. The local node owns slice 1. idx := MustOpenIndex() defer idx.Close() + s.Handler.Index = idx.Index idx.MustCreateFragmentIfNotExists("d", "f", pilosa.ViewStandard, 1).MustSetBits(10, (1*SliceWidth)+1) idx.MustCreateFragmentIfNotExists("d", "f", pilosa.ViewStandard, 1).MustSetBits(10, (1*SliceWidth)+2) @@ -552,6 +554,7 @@ func TestExecutor_Execute_Remote_SetBit(t *testing.T) { // Create local executor data. idx := MustOpenIndex() defer idx.Close() + s.Handler.Index = idx.Index // Create frame. if _, err := idx.MustCreateDBIfNotExists("d", pilosa.DBOptions{}).CreateFrame("f", pilosa.FrameOptions{}); err != nil { @@ -597,6 +600,7 @@ func TestExecutor_Execute_Remote_SetBit_With_Timestamp(t *testing.T) { // Create local executor data. idx := MustOpenIndex() defer idx.Close() + s.Handler.Index = idx.Index // Create frame. if f, err := idx.MustCreateDBIfNotExists("d", pilosa.DBOptions{}).CreateFrame("f", pilosa.FrameOptions{}); err != nil { @@ -664,6 +668,7 @@ func TestExecutor_Execute_Remote_TopN(t *testing.T) { // Create local executor data on slice 1 & 3. idx := MustOpenIndex() defer idx.Close() + s.Handler.Index = idx.Index idx.MustCreateFragmentIfNotExists("d", "f", pilosa.ViewStandard, 1).MustSetBits(30, (1*SliceWidth)+1) idx.MustCreateFragmentIfNotExists("d", "f", pilosa.ViewStandard, 3).MustSetBits(30, (3*SliceWidth)+2) diff --git a/handler_test.go b/handler_test.go index 478720e23..20944de7c 100644 --- a/handler_test.go +++ b/handler_test.go @@ -22,8 +22,14 @@ import ( // Ensure the handler returns "not found" for invalid paths. func TestHandler_NotFound(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + + h := NewHandler() + h.Index = idx.Index + w := httptest.NewRecorder() - NewHandler().ServeHTTP(w, MustNewHTTPRequest("GET", "/no_such_path", nil)) + h.ServeHTTP(w, MustNewHTTPRequest("GET", "/no_such_path", nil)) if w.Code != http.StatusNotFound { t.Fatalf("invalid status: %d", w.Code) } @@ -130,7 +136,11 @@ func TestHandler_MaxSlices_Inverse(t *testing.T) { // Ensure the handler can accept URL arguments. func TestHandler_Query_Args_URL(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { if db != "db0" { t.Fatalf("unexpected db: %s", db) @@ -153,7 +163,11 @@ func TestHandler_Query_Args_URL(t *testing.T) { // Ensure the handler can accept arguments via protobufs. func TestHandler_Query_Args_Protobuf(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { if db != "db0" { t.Fatalf("unexpected db: %s", db) @@ -188,7 +202,13 @@ func TestHandler_Query_Args_Protobuf(t *testing.T) { // Ensure the handler returns an error when parsing bad arguments. func TestHandler_Query_Args_Err(t *testing.T) { w := httptest.NewRecorder() - NewHandler().ServeHTTP(w, MustNewHTTPRequest("POST", "/db/db0/query?slices=a,b", strings.NewReader("Bitmap(id=100)"))) + idx := MustOpenIndex() + defer idx.Close() + + h := NewHandler() + h.Index = idx.Index + + h.ServeHTTP(w, MustNewHTTPRequest("POST", "/db/db0/query?slices=a,b", strings.NewReader("Bitmap(id=100)"))) if w.Code != http.StatusBadRequest { t.Fatalf("unexpected status code: %d", w.Code) } else if body := w.Body.String(); body != `{"error":"invalid slice argument"}`+"\n" { @@ -198,7 +218,11 @@ func TestHandler_Query_Args_Err(t *testing.T) { // Ensure the handler can execute a query with a uint64 response as JSON. func TestHandler_Query_Uint64_JSON(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return []interface{}{uint64(100)}, nil } @@ -214,7 +238,11 @@ func TestHandler_Query_Uint64_JSON(t *testing.T) { // Ensure the handler can execute a query with a uint64 response as protobufs. func TestHandler_Query_Uint64_Protobuf(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return []interface{}{uint64(100)}, nil } @@ -237,7 +265,11 @@ func TestHandler_Query_Uint64_Protobuf(t *testing.T) { // Ensure the handler can execute a query that returns a bitmap as JSON. func TestHandler_Query_Bitmap_JSON(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { bm := pilosa.NewBitmap(1, 3, 66, pilosa.SliceWidth+1) bm.Attrs = map[string]interface{}{"a": "b", "c": 1, "d": true} @@ -287,7 +319,11 @@ func TestHandler_Query_Bitmap_Profiles_JSON(t *testing.T) { // Ensure the handler can execute a query that returns a bitmap as protobuf. func TestHandler_Query_Bitmap_Protobuf(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { bm := pilosa.NewBitmap(1, pilosa.SliceWidth+1) bm.Attrs = map[string]interface{}{"a": "b", "c": int64(1), "d": true} @@ -386,7 +422,11 @@ func TestHandler_Query_Bitmap_Profiles_Protobuf(t *testing.T) { // Ensure the handler can execute a query that returns pairs as JSON. func TestHandler_Query_Pairs_JSON(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return []interface{}{[]pilosa.Pair{ {ID: 1, Count: 2}, @@ -405,7 +445,11 @@ func TestHandler_Query_Pairs_JSON(t *testing.T) { // Ensure the handler can execute a query that returns pairs as protobuf. func TestHandler_Query_Pairs_Protobuf(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return []interface{}{[]pilosa.Pair{ {ID: 1, Count: 2}, @@ -431,7 +475,11 @@ func TestHandler_Query_Pairs_Protobuf(t *testing.T) { // Ensure the handler can return an error as JSON. func TestHandler_Query_Err_JSON(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return nil, errors.New("marker") } @@ -447,7 +495,11 @@ func TestHandler_Query_Err_JSON(t *testing.T) { // Ensure the handler can return an error as protobuf. func TestHandler_Query_Err_Protobuf(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Executor.ExecuteFn = func(ctx context.Context, db string, query *pql.Query, slices []uint64, opt *pilosa.ExecOptions) ([]interface{}, error) { return nil, errors.New("marker") } @@ -470,8 +522,13 @@ func TestHandler_Query_Err_Protobuf(t *testing.T) { // Ensure the handler returns "method not allowed" for non-POST queries. func TestHandler_Query_MethodNotAllowed(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + + h := NewHandler() + h.Index = idx.Index w := httptest.NewRecorder() - NewHandler().ServeHTTP(w, MustNewHTTPRequest("GET", "/db/d/query", nil)) + h.ServeHTTP(w, MustNewHTTPRequest("GET", "/db/d/query", nil)) if w.Code != http.StatusMethodNotAllowed { t.Fatalf("invalid status: %d", w.Code) } @@ -479,7 +536,11 @@ func TestHandler_Query_MethodNotAllowed(t *testing.T) { // Ensure the handler returns an error if there is a parsing error.. func TestHandler_Query_ErrParse(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index w := httptest.NewRecorder() h.ServeHTTP(w, MustNewHTTPRequest("POST", "/db/db0/query?slices=0,1", strings.NewReader("bad_fn("))) if w.Code != http.StatusBadRequest { @@ -739,22 +800,29 @@ func TestHandler_Fragment_BackupRestore(t *testing.T) { // Ensure the handler can retrieve the version. func TestHandler_Version(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() - h.Version = "1.0.0" + h.Index = idx.Index w := httptest.NewRecorder() r := MustNewHTTPRequest("GET", "/version", nil) h.ServeHTTP(w, r) if w.Code != http.StatusOK { t.Fatalf("unexpected status code: %d", w.Code) - } else if w.Body.String() != `{"version":"1.0.0"}`+"\n" { + } else if w.Body.String() != `{"version":"`+pilosa.Version+`"}`+"\n" { t.Fatalf("unexpected body: %q", w.Body.String()) } } // Ensure the handler can return a list of nodes for a fragment. func TestHandler_Fragment_Nodes(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index h.Cluster = NewCluster(3) h.Cluster.ReplicaN = 2 @@ -770,7 +838,11 @@ func TestHandler_Fragment_Nodes(t *testing.T) { // Ensure the handler can return expvars without panicking. func TestHandler_Expvars(t *testing.T) { + idx := MustOpenIndex() + defer idx.Close() + h := NewHandler() + h.Index = idx.Index w := httptest.NewRecorder() r := MustNewHTTPRequest("GET", "/debug/vars", nil) h.ServeHTTP(w, r)