Skip to content

Commit

Permalink
Add code and info to mongoerror (#70)
Browse files Browse the repository at this point in the history
  • Loading branch information
harish-chandramowli authored Mar 2, 2021
1 parent 153f8bf commit 4ae0eee
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 26 deletions.
19 changes: 19 additions & 0 deletions bsonutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,25 @@ func GetAsBSON(elem bson.E) (bson.D, string, error) {
}
}

func GetAsStringArray(elem bson.E) ([]string, string, error) {
tipe := fmt.Sprintf("%T", elem.Value)
switch val := elem.Value.(type) {
case primitive.A:
res := make([]string, len(val))
for num, raw := range []interface{}(val) {
switch fixed := raw.(type) {
case string:
res[num] = fixed
default:
return nil, tipe, NewStackErrorf("not string %T %s", raw, raw)
}
}
return res, tipe, nil
default:
return nil, tipe, NewStackErrorf("not an array %T", elem.Value)
}
}

func getAsBsonDocsArray(val []interface{}, tipe string) ([]bson.D, string, error) {
a := make([]bson.D, len(val))
for num, raw := range val {
Expand Down
15 changes: 15 additions & 0 deletions bsonutil_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,21 @@ func TestBSONIndexOf(test *testing.T) {
}
}

func TestGetAsStringArray(test *testing.T) {
val := bson.A{"test1", "test2"}
doc := bson.E{"a", val}
res, _, _ := GetAsStringArray(doc)
if len(res) != 2 {
test.Errorf("result should of length 2, but got %v", len(res))
}
if res[0] != "test1" {
test.Errorf("expected test1, but got %v", res[0])
}
if res[1] != "test2" {
test.Errorf("expected test2, but got %v", res[0])
}
}

type testWalker struct {
seen []bson.E
}
Expand Down
8 changes: 0 additions & 8 deletions cmd/sni_tester/sni_tester.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ type MyInterceptor struct {
ps *mongonet.ProxySession
}

func (myi *MyInterceptor) GetClientMessage() mongonet.Message {
return nil
}

func (myi *MyInterceptor) sniResponse() mongonet.SimpleBSON {
doc := bson.D{{"sniName", myi.ps.SSLServerName}, {"ok", 1}}
raw, err := mongonet.SimpleBSONConvert(doc)
Expand All @@ -41,10 +37,6 @@ func (myi *MyInterceptor) sniResponse() mongonet.SimpleBSON {
return raw
}

func (myi *MyInterceptor) SetClientMessage(message mongonet.Message) {
return
}

func (myi *MyInterceptor) InterceptClientToMongo(m mongonet.Message) (
mongonet.Message,
mongonet.ResponseInterceptor,
Expand Down
8 changes: 0 additions & 8 deletions inttests/int_test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,21 +216,13 @@ type MyInterceptor struct {
cursorManager *LightCursorManager
}

func (myi *MyInterceptor) GetClientMessage() Message {
return nil
}

func (myi *MyInterceptor) Close() {
}
func (myi *MyInterceptor) TrackRequest(MessageHeader) {
}
func (myi *MyInterceptor) TrackResponse(MessageHeader) {
}

func (myi *MyInterceptor) SetClientMessage(message Message) {
return
}

func (myi *MyInterceptor) CheckConnection() error {
return nil
}
Expand Down
45 changes: 37 additions & 8 deletions mongo_error.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,31 @@ package mongonet

import (
"fmt"

"go.mongodb.org/mongo-driver/bson"
)

type MongoError struct {
err error
code int
codeName string
labels []string
}

func NewMongoError(err error, code int, codeName string) MongoError {
return MongoError{err, code, codeName}
return MongoError{err, code, codeName, nil}
}

func NewMongoErrorWithLabels(err error, code int, codeName string, labels []string) MongoError {
return MongoError{err, code, codeName, labels}
}

func (me MongoError) HasLabel(label string) bool {
for _, val := range me.labels {
if val == label {
return true
}
}
return false
}

func (me MongoError) ToBSON() bson.D {
Expand All @@ -30,11 +43,27 @@ func (me MongoError) ToBSON() bson.D {
return doc
}

func (me MongoError) GetCode() int {
return me.code
}

func (me MongoError) GetCodeName() string {
return me.codeName
}

func (me MongoError) Error() string {
return fmt.Sprintf(
"code=%v codeName=%v errmsg = %v",
me.code,
me.codeName,
me.err.Error(),
)
if me.err != nil {
return fmt.Sprintf(
"code=%v codeName=%v errmsg = %v",
me.code,
me.codeName,
me.err.Error(),
)
} else {
return fmt.Sprintf(
"code=%v codeName=%v",
me.code,
me.codeName,
)
}
}
2 changes: 0 additions & 2 deletions proxy_session.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ type ProxyInterceptor interface {
TrackResponse(MessageHeader)
CheckConnection() error
CheckConnectionInterval() time.Duration
SetClientMessage(message Message)
GetClientMessage() Message
}

type ProxyInterceptorFactory interface {
Expand Down

0 comments on commit 4ae0eee

Please sign in to comment.