Skip to content

Commit

Permalink
chore: Cosmetic fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
rhuss committed Jul 27, 2019
1 parent 1da5fc9 commit 8c6ebfc
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 77 deletions.
137 changes: 61 additions & 76 deletions pkg/serving/v1alpha1/client_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,65 +58,14 @@ func (c *MockKnClient) Recorder() *Recorder {
return &c.recorder
}

// Add a recorded api call the list of calls
func (r *Recorder) add(name string, call apiMethodCall) {
calls, ok := r.recordedCalls[name]
if !ok {
calls = make([]apiMethodCall, 0)
r.recordedCalls[name] = calls
}
r.recordedCalls[name] = append(calls, call)
}

// Get the next recorded call
func (r *Recorder) shift(name string) (*apiMethodCall, error) {
calls := r.recordedCalls[name]
if len(calls) == 0 {
return nil, fmt.Errorf("no call to '%s' recorded", name)
}
call, calls := calls[0], calls[1:]
r.recordedCalls[name] = calls
return &call, nil
}

// Get call and verify that it exist
func (c *MockKnClient) getCall(name string) *apiMethodCall {
call, err := c.recorder.shift(name)
assert.NilError(c.t, err, "invalid mock setup, missing recording step")
return call
}

// Verify given arguments agains recorded arguments
func (c *MockKnClient) verifyArgs(call *apiMethodCall, args ...interface{}) {
callArgs := call.args
for i, arg := range args {
assert.Assert(c.t, len(callArgs) > i, "Internal: Invalid recording: Expected %d args, got %d", len(callArgs), len(args))
fn := reflect.ValueOf(call.args[i])
fnType := fn.Type()
if fnType.Kind() == reflect.Func {
fn.Call([]reflect.Value{reflect.ValueOf(c.t), reflect.ValueOf(call.args[0]), reflect.ValueOf(arg)})
} else {
assert.DeepEqual(c.t, call.args[0], arg)
}
}
}

func errorOrNil(err interface{}) error {
if err == nil {
return nil
}
return err.(error)
}

// any() can be used in recording to not check for the argument
func Any() func(t *testing.T, a, b interface{}) {
return func(t *testing.T, a, b interface{}) {}
}

// Get Service
func (r *Recorder) GetService(name interface{}, service *v1alpha1.Service, err error) *Recorder {
func (r *Recorder) GetService(name interface{}, service *v1alpha1.Service, err error) {
r.add("GetService", apiMethodCall{[]interface{}{name}, []interface{}{service, err}})
return r
}

func (c *MockKnClient) GetService(name string) (*v1alpha1.Service, error) {
Expand All @@ -126,9 +75,8 @@ func (c *MockKnClient) GetService(name string) (*v1alpha1.Service, error) {
}

// List services
func (r *Recorder) ListServices(opts interface{}, serviceList *v1alpha1.ServiceList, err error) *Recorder {
func (r *Recorder) ListServices(opts interface{}, serviceList *v1alpha1.ServiceList, err error) {
r.add("ListServices", apiMethodCall{[]interface{}{opts}, []interface{}{serviceList, err}})
return r
}

func (c *MockKnClient) ListServices(opts ...ListConfig) (*v1alpha1.ServiceList, error) {
Expand All @@ -138,9 +86,8 @@ func (c *MockKnClient) ListServices(opts ...ListConfig) (*v1alpha1.ServiceList,
}

// Create a new service
func (r *Recorder) CreateService(service interface{}, err error) *Recorder {
func (r *Recorder) CreateService(service interface{}, err error) {
r.add("CreateService", apiMethodCall{[]interface{}{service}, []interface{}{err}})
return r
}

func (c *MockKnClient) CreateService(service *v1alpha1.Service) error {
Expand All @@ -150,22 +97,19 @@ func (c *MockKnClient) CreateService(service *v1alpha1.Service) error {
}

// Update the given service
func (r *Recorder) UpdateService(service interface{}, err error) *Recorder {
func (r *Recorder) UpdateService(service interface{}, err error) {
r.add("UpdateService", apiMethodCall{[]interface{}{service}, []interface{}{err}})
return r
}

func (c *MockKnClient) UpdateService(service *v1alpha1.Service) error {
call := c.getCall("UpdateService")
c.verifyArgs(call, service)
return errorOrNil(call.result[0])

}

// Delete a service by name
func (r *Recorder) DeleteService(name interface{}, err error) *Recorder {
func (r *Recorder) DeleteService(name interface{}, err error) {
r.add("DeleteService", apiMethodCall{[]interface{}{name}, []interface{}{err}})
return r
}

func (c *MockKnClient) DeleteService(name string) error {
Expand All @@ -175,48 +119,41 @@ func (c *MockKnClient) DeleteService(name string) error {
}

// Wait for a service to become ready, but not longer than provided timeout
func (r *Recorder) WaitForService(name interface{}, timeout interface{}, err error) *Recorder {
func (r *Recorder) WaitForService(name interface{}, timeout interface{}, err error) {
r.add("WaitForService", apiMethodCall{[]interface{}{name}, []interface{}{err}})
return r
}

func (c *MockKnClient) WaitForService(name string, timeout time.Duration) error {
call := c.getCall("WaitForService")
c.verifyArgs(call, name)
return errorOrNil(call.result[0])

}

// Get a revision by name
func (r *Recorder) GetRevision(name interface{}, revision *v1alpha1.Revision, err error) *Recorder {
func (r *Recorder) GetRevision(name interface{}, revision *v1alpha1.Revision, err error) {
r.add("GetRevision", apiMethodCall{[]interface{}{name}, []interface{}{revision, err}})
return r
}

func (c *MockKnClient) GetRevision(name string) (*v1alpha1.Revision, error) {
call := c.getCall("GetRevision")
c.verifyArgs(call, name)
return call.result[0].(*v1alpha1.Revision), errorOrNil(call.result[1])

}

// List revisions
func (r *Recorder) ListRevisions(opts interface{}, revisionList *v1alpha1.RevisionList, err error) *Recorder {
func (r *Recorder) ListRevisions(opts interface{}, revisionList *v1alpha1.RevisionList, err error) {
r.add("ListRevisions", apiMethodCall{[]interface{}{opts}, []interface{}{revisionList, err}})
return r
}

func (c *MockKnClient) ListRevisions(opts ...ListConfig) (*v1alpha1.RevisionList, error) {
call := c.getCall("ListRevisions")
c.verifyArgs(call, opts)
return call.result[0].(*v1alpha1.RevisionList), errorOrNil(call.result[1])

}

// Delete a revision
func (r *Recorder) DeleteRevision(name interface{}, err error) *Recorder {
func (r *Recorder) DeleteRevision(name interface{}, err error) {
r.add("DeleteRevision", apiMethodCall{[]interface{}{name}, []interface{}{err}})
return r
}

func (c *MockKnClient) DeleteRevision(name string) error {
Expand All @@ -227,9 +164,8 @@ func (c *MockKnClient) DeleteRevision(name string) error {
}

// Get a route by its unique name
func (r *Recorder) GetRoute(name interface{}, route *v1alpha1.Route, err error) *Recorder {
func (r *Recorder) GetRoute(name interface{}, route *v1alpha1.Route, err error) {
r.add("GetRoute", apiMethodCall{[]interface{}{name}, []interface{}{route, err}})
return r
}

func (c *MockKnClient) GetRoute(name string) (*v1alpha1.Route, error) {
Expand All @@ -240,9 +176,8 @@ func (c *MockKnClient) GetRoute(name string) (*v1alpha1.Route, error) {
}

// List routes
func (r *Recorder) ListRoutes(opts interface{}, routeList *v1alpha1.RouteList, err error) *Recorder {
func (r *Recorder) ListRoutes(opts interface{}, routeList *v1alpha1.RouteList, err error) {
r.add("ListRoutes", apiMethodCall{[]interface{}{opts}, []interface{}{routeList, err}})
return r
}

func (c *MockKnClient) ListRoutes(opts ...ListConfig) (*v1alpha1.RouteList, error) {
Expand All @@ -259,3 +194,53 @@ func (r *Recorder) Validate() {
}
}
}

// Add a recorded api call the list of calls
func (r *Recorder) add(name string, call apiMethodCall) {
calls, ok := r.recordedCalls[name]
if !ok {
calls = make([]apiMethodCall, 0)
r.recordedCalls[name] = calls
}
r.recordedCalls[name] = append(calls, call)
}

// Get the next recorded call
func (r *Recorder) shift(name string) (*apiMethodCall, error) {
calls := r.recordedCalls[name]
if len(calls) == 0 {
return nil, fmt.Errorf("no call to '%s' recorded", name)
}
call, calls := calls[0], calls[1:]
r.recordedCalls[name] = calls
return &call, nil
}

// Get call and verify that it exist
func (c *MockKnClient) getCall(name string) *apiMethodCall {
call, err := c.recorder.shift(name)
assert.NilError(c.t, err, "invalid mock setup, missing recording step")
return call
}

// Verify given arguments agains recorded arguments
func (c *MockKnClient) verifyArgs(call *apiMethodCall, args ...interface{}) {
callArgs := call.args
for i, arg := range args {
assert.Assert(c.t, len(callArgs) > i, "Internal: Invalid recording: Expected %d args, got %d", len(callArgs), len(args))
fn := reflect.ValueOf(call.args[i])
fnType := fn.Type()
if fnType.Kind() == reflect.Func {
fn.Call([]reflect.Value{reflect.ValueOf(c.t), reflect.ValueOf(call.args[0]), reflect.ValueOf(arg)})
} else {
assert.DeepEqual(c.t, call.args[0], arg)
}
}
}

func errorOrNil(err interface{}) error {
if err == nil {
return nil
}
return err.(error)
}
2 changes: 1 addition & 1 deletion pkg/wait/test_wait_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ type FakeWatch struct {
eventChan chan watch.Event
events []watch.Event

// Recorder how often stop was called
// Record how often stop was called
StopCalled int
}

Expand Down

0 comments on commit 8c6ebfc

Please sign in to comment.