summaryrefslogtreecommitdiffstats
path: root/plugin/rpcplugin/hooks_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/rpcplugin/hooks_test.go')
-rw-r--r--plugin/rpcplugin/hooks_test.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/plugin/rpcplugin/hooks_test.go b/plugin/rpcplugin/hooks_test.go
new file mode 100644
index 000000000..fbbbbedeb
--- /dev/null
+++ b/plugin/rpcplugin/hooks_test.go
@@ -0,0 +1,58 @@
+package rpcplugin
+
+import (
+ "io"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/mock"
+
+ "github.com/mattermost/platform/plugin"
+ "github.com/mattermost/platform/plugin/plugintest"
+)
+
+func testHooksRPC(hooks plugin.Hooks, f func(plugin.Hooks)) {
+ r1, w1 := io.Pipe()
+ r2, w2 := io.Pipe()
+
+ c1 := NewMuxer(NewReadWriteCloser(r1, w2), false)
+ defer c1.Close()
+
+ c2 := NewMuxer(NewReadWriteCloser(r2, w1), true)
+ defer c2.Close()
+
+ id, server := c1.Serve()
+ go ServeHooks(hooks, server, c1)
+
+ remote := ConnectHooks(c2.Connect(id), c2)
+ defer remote.Close()
+
+ f(remote)
+}
+
+func TestHooks(t *testing.T) {
+ var api plugintest.API
+ var hooks plugintest.Hooks
+ defer hooks.AssertExpectations(t)
+
+ testHooksRPC(&hooks, func(remote plugin.Hooks) {
+ 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())
+ })
+}
+
+func BenchmarkOnDeactivate(b *testing.B) {
+ var hooks plugintest.Hooks
+ hooks.On("OnDeactivate").Return(nil)
+
+ testHooksRPC(&hooks, func(remote plugin.Hooks) {
+ b.ResetTimer()
+ for n := 0; n < b.N; n++ {
+ remote.OnDeactivate()
+ }
+ b.StopTimer()
+ })
+}