Skip to content

Commit

Permalink
Test method validation and api setup function
Browse files Browse the repository at this point in the history
  • Loading branch information
LLKennedy committed Nov 16, 2019
1 parent 917c3ae commit a19d875
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 2 deletions.
2 changes: 1 addition & 1 deletion proxy/methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func validateMethod(apiMethod reflect.Method, serverType reflect.Type) error {
foundType := serverMethod.Type
err := validateArgs(expectedType, foundType)
if err != nil {
return fmt.Errorf("api/server arguments do not match for method (%s/%s): %v", name, trueName, err)
return fmt.Errorf("validation of %s to %s mapping: %v", name, trueName, err)
}
return nil
}
2 changes: 1 addition & 1 deletion proxy/methods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func Test_validateMethod(t *testing.T) {
name: "invalid matching server method",
apiMethod: reflect.TypeOf(&exposedThingA{}).Method(0),
serverType: reflect.TypeOf(&thingB{}),
expectedErr: "api/server arguments do not match for method (PostDoThing/DoThing): api and server arguments mismatch: int vs string",
expectedErr: "validation of PostDoThing to DoThing mapping: api and server arguments mismatch: int vs string",
},
}
for _, tt := range tests {
Expand Down
1 change: 1 addition & 0 deletions proxy/server_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package proxy
76 changes: 76 additions & 0 deletions proxy/setup_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package proxy

import (
"reflect"
"testing"

"github.com/stretchr/testify/assert"
)

type emptyThing struct{}

func TestServer_setAPIConfig(t *testing.T) {
specificExposedThing := &exposedThingA{}
tests := []struct {
name string
s *Server
api interface{}
server interface{}
result *Server
expectedErr string
}{
{
name: "no functions",
s: &Server{},
api: &emptyThing{},
server: &emptyThing{},
result: &Server{
api: []reflect.Method{},
innerServer: &emptyThing{},
},
expectedErr: "",
},
{
name: "matching",
s: &Server{},
api: specificExposedThing,
server: &thingA{},
result: &Server{
api: []reflect.Method{
reflect.TypeOf(specificExposedThing).Method(0),
},
innerServer: &thingA{},
},
expectedErr: "",
},
{
name: "mismatch",
s: &Server{},
api: specificExposedThing,
server: &thingB{},
result: &Server{},
expectedErr: "httpgrpc: validation of PostDoThing to DoThing mapping: api and server arguments mismatch: int vs string",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.s.setAPIConfig(tt.api, tt.server)
if tt.expectedErr == "" {
assert.NoError(t, err)
assert.Equal(t, tt.result.grpcServer, tt.s.grpcServer)
assert.Equal(t, tt.result.innerServer, tt.s.innerServer)
if assert.Len(t, tt.s.api, len(tt.result.api)) {
for i, method := range tt.s.api {
expectedMethod := tt.result.api[i]
assert.Equal(t, method.Name, expectedMethod.Name)
assert.Equal(t, method.PkgPath, expectedMethod.PkgPath)
assert.Equal(t, method.Type, expectedMethod.Type)
assert.Equal(t, method.Index, expectedMethod.Index)
}
}
} else {
assert.EqualError(t, err, tt.expectedErr)
}
})
}
}

0 comments on commit a19d875

Please sign in to comment.