finish stubbing out the Schemar methods in the test

This commit is contained in:
Travis Turner 2023-02-17 15:43:14 -06:00
parent ba044148a7
commit 3692635391
No known key found for this signature in database
GPG key ID: 3FB5CF5C97A37B30
5 changed files with 106 additions and 36 deletions

View file

@ -71,8 +71,7 @@ func (c *Client) CreateDatabase(ctx context.Context, qdb *dax.QualifiedDatabase)
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
b, _ := io.ReadAll(resp.Body)
return errors.Errorf("status code: %d: %s", resp.StatusCode, b)
return errors.Wrapf(errors.UnmarshalJSON(resp.Body), "status code: %d", resp.StatusCode)
}
return nil
@ -158,8 +157,7 @@ func (c *Client) DatabaseByName(ctx context.Context, orgID dax.OrganizationID, n
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
b, _ := io.ReadAll(resp.Body)
return nil, errors.Wrapf(errors.UnmarshalJSON(b), "status code: %d", resp.StatusCode)
return nil, errors.Wrapf(errors.UnmarshalJSON(resp.Body), "status code: %d", resp.StatusCode)
}
var qdb *dax.QualifiedDatabase
@ -645,8 +643,7 @@ func (c *Client) RegisterNode(ctx context.Context, node *dax.Node) error {
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
b, _ := io.ReadAll(resp.Body)
return errors.Wrapf(errors.UnmarshalJSON(b), "registration request to %s status code: %d: %s", url, resp.StatusCode, b)
return errors.Wrapf(errors.UnmarshalJSON(resp.Body), "registration request to %s status code: %d", url, resp.StatusCode)
}
return nil
@ -676,8 +673,7 @@ func (c *Client) CheckInNode(ctx context.Context, node *dax.Node) error {
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
b, _ := io.ReadAll(resp.Body)
return errors.Wrapf(errors.UnmarshalJSON(b), "status code: %d: %s", resp.StatusCode, b)
return errors.Wrapf(errors.UnmarshalJSON(resp.Body), "status code: %d", resp.StatusCode)
}
return nil

View file

@ -81,7 +81,7 @@ func (s *server) postCreateDatabase(w http.ResponseWriter, r *http.Request) {
err := s.controller.CreateDatabase(ctx, req)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
http.Error(w, errors.MarshalJSON(err), http.StatusBadRequest)
return
}

View file

@ -15,6 +15,7 @@ import (
"github.com/featurebasedb/featurebase/v3/dax"
"github.com/featurebasedb/featurebase/v3/dax/controller"
controllerclient "github.com/featurebasedb/featurebase/v3/dax/controller/client"
"github.com/featurebasedb/featurebase/v3/dax/controller/schemar"
queryerclient "github.com/featurebasedb/featurebase/v3/dax/queryer/client"
"github.com/featurebasedb/featurebase/v3/dax/server"
"github.com/featurebasedb/featurebase/v3/dax/server/test"
@ -739,12 +740,60 @@ func TestDAXIntegration(t *testing.T) {
t.Run("Schemar", func(t *testing.T) {
t.Run("CreateDatabase", func(t *testing.T) {
log.Printf("client: %+v", client)
err := client.CreateDatabase(ctx, qdb)
err := client.CreateDatabase(ctx, nil)
log.Printf("ERR: %v", err)
if assert.Error(t, err) {
assert.True(t, errors.Is(err, controller.ErrCodeNodeKeyInvalid))
assert.True(t, errors.Is(err, schemar.ErrCodeDatabaseNameInvalid))
}
})
t.Run("DropDatabase", func(t *testing.T) {
//DropDatabase(context.Context, QualifiedDatabaseID) error
})
t.Run("DatabaseByName", func(t *testing.T) {
// DatabaseByName(ctx context.Context, orgID OrganizationID, dbname DatabaseName) (*QualifiedDatabase, error)
})
t.Run("DatabaseByID", func(t *testing.T) {
// DatabaseByID(ctx context.Context, qdbid QualifiedDatabaseID) (*QualifiedDatabase, error)
})
t.Run("SetDatabaseOption", func(t *testing.T) {
// SetDatabaseOption(ctx context.Context, qdbid QualifiedDatabaseID, option string, value string) error
})
t.Run("Databases", func(t *testing.T) {
// Databases(context.Context, OrganizationID, ...DatabaseID) ([]*QualifiedDatabase, error)
})
t.Run("CreateTable", func(t *testing.T) {
// CreateTable(ctx context.Context, qtbl *QualifiedTable) error
})
t.Run("DropTable", func(t *testing.T) {
// DropTable(ctx context.Context, qtid QualifiedTableID) error
})
t.Run("TableByName", func(t *testing.T) {
// TableByName(ctx context.Context, qdbid QualifiedDatabaseID, tname TableName) (*QualifiedTable, error)
})
t.Run("TableByID", func(t *testing.T) {
// TableByID(ctx context.Context, qtid QualifiedTableID) (*QualifiedTable, error)
})
t.Run("Tables", func(t *testing.T) {
// Tables(ctx context.Context, qdbid QualifiedDatabaseID, tids ...TableID) ([]*QualifiedTable, error)
})
t.Run("CreateField", func(t *testing.T) {
// CreateField(ctx context.Context, qtid QualifiedTableID, fld *Field) error
})
t.Run("DropField", func(t *testing.T) {
// DropField(ctx context.Context, qtid QualifiedTableID, fname FieldName) error
})
})
})
})

View file

@ -9,8 +9,7 @@ import (
)
var _ computer.Registrar = (*wrappedControllerClient)(nil)
//var _ dax.Schemar = (*wrappedControllerClient)(nil)
var _ dax.Schemar = (*wrappedControllerClient)(nil)
// wrappedControllerClient is a wrapper around the controller client which we
// use in tests to ensure that all of the methods for the computer.Registrar
@ -21,13 +20,11 @@ var _ computer.Registrar = (*wrappedControllerClient)(nil)
// package, but that seems overly compilicated right now.
type wrappedControllerClient struct {
cli *controllerclient.Client
dax.Schemar
}
func newWrappedControllerClient(cli *controllerclient.Client) *wrappedControllerClient {
return &wrappedControllerClient{
cli: cli,
Schemar: dax.NewNopSchemar(),
cli: cli,
}
}
@ -41,25 +38,54 @@ func (w *wrappedControllerClient) CheckInNode(ctx context.Context, node *dax.Nod
// Schemar
/*
func (w *wrappedControllerClient) CreateDatabase(context.Context, *QualifiedDatabase) error
func (w *wrappedControllerClient) DropDatabase(context.Context, QualifiedDatabaseID) error
func (w *wrappedControllerClient) CreateDatabase(ctx context.Context, qdb *dax.QualifiedDatabase) error {
return w.cli.CreateDatabase(ctx, qdb)
}
DatabaseByName(ctx context.Context, orgID OrganizationID, dbname DatabaseName) (*QualifiedDatabase, error)
DatabaseByID(ctx context.Context, qdbid QualifiedDatabaseID) (*QualifiedDatabase, error)
func (w *wrappedControllerClient) DropDatabase(ctx context.Context, qdbid dax.QualifiedDatabaseID) error {
return w.cli.DropDatabase(ctx, qdbid)
}
SetDatabaseOption(ctx context.Context, qdbid QualifiedDatabaseID, option string, value string) error
func (w *wrappedControllerClient) DatabaseByName(ctx context.Context, orgID dax.OrganizationID, dbname dax.DatabaseName) (*dax.QualifiedDatabase, error) {
return w.cli.DatabaseByName(ctx, orgID, dbname)
}
Databases(context.Context, OrganizationID, ...DatabaseID) ([]*QualifiedDatabase, error)
func (w *wrappedControllerClient) DatabaseByID(ctx context.Context, qdbid dax.QualifiedDatabaseID) (*dax.QualifiedDatabase, error) {
return w.cli.DatabaseByID(ctx, qdbid)
}
CreateTable(ctx context.Context, qtbl *QualifiedTable) error
DropTable(ctx context.Context, qtid QualifiedTableID) error
func (w *wrappedControllerClient) SetDatabaseOption(ctx context.Context, qdbid dax.QualifiedDatabaseID, option string, value string) error {
return w.cli.SetDatabaseOption(ctx, qdbid, option, value)
}
TableByName(ctx context.Context, qdbid QualifiedDatabaseID, tname TableName) (*QualifiedTable, error)
TableByID(ctx context.Context, qtid QualifiedTableID) (*QualifiedTable, error)
func (w *wrappedControllerClient) Databases(ctx context.Context, orgID dax.OrganizationID, dbIDs ...dax.DatabaseID) ([]*dax.QualifiedDatabase, error) {
return w.cli.Databases(ctx, orgID, dbIDs...)
}
Tables(ctx context.Context, qdbid QualifiedDatabaseID, tids ...TableID) ([]*QualifiedTable, error)
func (w *wrappedControllerClient) CreateTable(ctx context.Context, qtbl *dax.QualifiedTable) error {
return w.cli.CreateTable(ctx, qtbl)
}
CreateField(ctx context.Context, qtid QualifiedTableID, fld *Field) error
DropField(ctx context.Context, qtid QualifiedTableID, fname FieldName) error
*/
func (w *wrappedControllerClient) DropTable(ctx context.Context, qtid dax.QualifiedTableID) error {
return w.cli.DropTable(ctx, qtid)
}
func (w *wrappedControllerClient) TableByName(ctx context.Context, qdbid dax.QualifiedDatabaseID, tname dax.TableName) (*dax.QualifiedTable, error) {
return w.cli.TableByName(ctx, qdbid, tname)
}
func (w *wrappedControllerClient) TableByID(ctx context.Context, qtid dax.QualifiedTableID) (*dax.QualifiedTable, error) {
return w.cli.TableByID(ctx, qtid)
}
func (w *wrappedControllerClient) Tables(ctx context.Context, qdbid dax.QualifiedDatabaseID, tids ...dax.TableID) ([]*dax.QualifiedTable, error) {
return w.cli.Tables(ctx, qdbid, tids...)
}
func (w *wrappedControllerClient) CreateField(ctx context.Context, qtid dax.QualifiedTableID, fld *dax.Field) error {
return w.cli.CreateField(ctx, qtid, fld)
}
func (w *wrappedControllerClient) DropField(ctx context.Context, qtid dax.QualifiedTableID, fname dax.FieldName) error {
return w.cli.DropField(ctx, qtid, fname)
}

View file

@ -4,6 +4,7 @@ package errors
import (
"encoding/json"
"io"
"github.com/pkg/errors"
)
@ -126,10 +127,8 @@ func MarshalJSON(err error) string {
// UnmarshalJSON converts the byte slice into a codedError. If the bytes can't
// unmarshal to a codedError, a normal error will be returned containing the
// string value of the byte slice.
func UnmarshalJSON(b []byte) error {
if len(b) == 0 {
return nil
}
func UnmarshalJSON(r io.Reader) error {
b, _ := io.ReadAll(r)
out := &codedError{}
if err := json.Unmarshal(b, out); err != nil {