summaryrefslogtreecommitdiffstats
path: root/plugin/rpcplugin/process_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/rpcplugin/process_test.go')
-rw-r--r--plugin/rpcplugin/process_test.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/plugin/rpcplugin/process_test.go b/plugin/rpcplugin/process_test.go
new file mode 100644
index 000000000..b7984ad0a
--- /dev/null
+++ b/plugin/rpcplugin/process_test.go
@@ -0,0 +1,64 @@
+package rpcplugin
+
+import (
+ "context"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func compileGo(t *testing.T, sourceCode, outputPath string) {
+ dir, err := ioutil.TempDir(".", "")
+ require.NoError(t, err)
+ defer os.RemoveAll(dir)
+ require.NoError(t, ioutil.WriteFile(filepath.Join(dir, "main.go"), []byte(sourceCode), 0600))
+ cmd := exec.Command("go", "build", "-o", outputPath, "main.go")
+ cmd.Dir = dir
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ require.NoError(t, cmd.Run())
+}
+
+func TestProcess(t *testing.T) {
+ dir, err := ioutil.TempDir("", "")
+ require.NoError(t, err)
+ defer os.RemoveAll(dir)
+
+ ping := filepath.Join(dir, "ping")
+ compileGo(t, `
+ package main
+
+ import (
+ "log"
+
+ "github.com/mattermost/platform/plugin/rpcplugin"
+ )
+
+ func main() {
+ ipc, err := rpcplugin.InheritedProcessIPC()
+ if err != nil {
+ log.Fatal("unable to get inherited ipc")
+ }
+ defer ipc.Close()
+ _, err = ipc.Write([]byte("ping"))
+ if err != nil {
+ log.Fatal("unable to write to ipc")
+ }
+ }
+ `, ping)
+
+ p, ipc, err := NewProcess(context.Background(), ping)
+ require.NoError(t, err)
+ defer ipc.Close()
+ b := make([]byte, 10)
+ n, err := ipc.Read(b)
+ require.NoError(t, err)
+ assert.Equal(t, 4, n)
+ assert.Equal(t, "ping", string(b[:4]))
+ require.NoError(t, p.Wait())
+}