diff options
author | Chris <ccbrown112@gmail.com> | 2017-08-21 11:48:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-21 11:48:07 -0500 |
commit | 65ccd4afb20b6bec40b8561e0eb0865372371b17 (patch) | |
tree | faa509ae5e7615a10f19cad0798aee2be99f5218 /plugin/rpcplugin/hooks_test.go | |
parent | 5872a294aa662fcf1e2f49eb1976397e221b15c7 (diff) | |
download | chat-65ccd4afb20b6bec40b8561e0eb0865372371b17.tar.gz chat-65ccd4afb20b6bec40b8561e0eb0865372371b17.tar.bz2 chat-65ccd4afb20b6bec40b8561e0eb0865372371b17.zip |
make hooks optional, short circuit if unimplemented (#7263)
Diffstat (limited to 'plugin/rpcplugin/hooks_test.go')
-rw-r--r-- | plugin/rpcplugin/hooks_test.go | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/plugin/rpcplugin/hooks_test.go b/plugin/rpcplugin/hooks_test.go index fbbbbedeb..6cd7ff547 100644 --- a/plugin/rpcplugin/hooks_test.go +++ b/plugin/rpcplugin/hooks_test.go @@ -11,7 +11,7 @@ import ( "github.com/mattermost/platform/plugin/plugintest" ) -func testHooksRPC(hooks plugin.Hooks, f func(plugin.Hooks)) { +func testHooksRPC(hooks interface{}, f func(*RemoteHooks)) error { r1, w1 := io.Pipe() r2, w2 := io.Pipe() @@ -24,10 +24,14 @@ func testHooksRPC(hooks plugin.Hooks, f func(plugin.Hooks)) { id, server := c1.Serve() go ServeHooks(hooks, server, c1) - remote := ConnectHooks(c2.Connect(id), c2) + remote, err := ConnectHooks(c2.Connect(id), c2) + if err != nil { + return err + } defer remote.Close() f(remote) + return nil } func TestHooks(t *testing.T) { @@ -35,24 +39,65 @@ func TestHooks(t *testing.T) { var hooks plugintest.Hooks defer hooks.AssertExpectations(t) - testHooksRPC(&hooks, func(remote plugin.Hooks) { + assert.NoError(t, testHooksRPC(&hooks, func(remote *RemoteHooks) { hooks.On("OnActivate", mock.AnythingOfType("*rpcplugin.RemoteAPI")).Return(nil) assert.NoError(t, remote.OnActivate(&api)) hooks.On("OnDeactivate").Return(nil) assert.NoError(t, remote.OnDeactivate()) - }) + })) +} + +type testHooks struct { + mock.Mock +} + +func (h *testHooks) OnActivate(api plugin.API) error { + return h.Called(api).Error(0) +} + +func TestHooks_PartiallyImplemented(t *testing.T) { + var api plugintest.API + var hooks testHooks + defer hooks.AssertExpectations(t) + + assert.NoError(t, testHooksRPC(&hooks, func(remote *RemoteHooks) { + implemented, err := remote.Implemented() + assert.NoError(t, err) + assert.Equal(t, []string{"OnActivate"}, implemented) + + hooks.On("OnActivate", mock.AnythingOfType("*rpcplugin.RemoteAPI")).Return(nil) + assert.NoError(t, remote.OnActivate(&api)) + + assert.NoError(t, remote.OnDeactivate()) + })) } func BenchmarkOnDeactivate(b *testing.B) { var hooks plugintest.Hooks hooks.On("OnDeactivate").Return(nil) - testHooksRPC(&hooks, func(remote plugin.Hooks) { + if err := testHooksRPC(&hooks, func(remote *RemoteHooks) { + b.ResetTimer() + for n := 0; n < b.N; n++ { + remote.OnDeactivate() + } + b.StopTimer() + }); err != nil { + b.Fatal(err.Error()) + } +} + +func BenchmarkOnDeactivate_Unimplemented(b *testing.B) { + var hooks testHooks + + if err := testHooksRPC(&hooks, func(remote *RemoteHooks) { b.ResetTimer() for n := 0; n < b.N; n++ { remote.OnDeactivate() } b.StopTimer() - }) + }); err != nil { + b.Fatal(err.Error()) + } } |