11 hclog "github.com/hashicorp/go-hclog"
14 func TestClient_App(t *testing.T) {
15 pluginLogger := hclog.New(&hclog.LoggerOptions{
21 testPlugin := &testInterfaceImpl{
25 client, _ := TestPluginRPCConn(t, map[string]Plugin{
26 "test": &testInterfacePlugin{Impl: testPlugin},
30 raw, err := client.Dispense("test")
32 t.Fatalf("err: %s", err)
35 impl, ok := raw.(testInterface)
37 t.Fatalf("bad: %#v", raw)
40 result := impl.Double(21)
42 t.Fatalf("bad: %#v", result)
46 func TestClient_syncStreams(t *testing.T) {
47 // Create streams for the server that we can talk to
48 stdout_r, stdout_w := io.Pipe()
49 stderr_r, stderr_w := io.Pipe()
51 client, _ := TestPluginRPCConn(t, map[string]Plugin{}, &TestOptions{
52 ServerStdout: stdout_r,
53 ServerStderr: stderr_r,
56 // Start the data copying
57 var stdout_out, stderr_out safeBuffer
58 stdout := &safeBuffer{
59 b: bytes.NewBufferString("stdouttest"),
61 stderr := &safeBuffer{
62 b: bytes.NewBufferString("stderrtest"),
64 go client.SyncStreams(&stdout_out, &stderr_out)
65 go io.Copy(stdout_w, stdout)
66 go io.Copy(stderr_w, stderr)
68 // Unfortunately I can't think of a better way to make sure all the
69 // copies above go through so let's just exit.
70 time.Sleep(100 * time.Millisecond)
72 // Close everything, and lets test the result
77 if v := stdout_out.String(); v != "stdouttest" {
78 t.Fatalf("bad: %q", v)
80 if v := stderr_out.String(); v != "stderrtest" {
81 t.Fatalf("bad: %q", v)
85 type safeBuffer struct {
90 func (s *safeBuffer) Write(p []byte) (n int, err error) {
94 s.b = new(bytes.Buffer)
99 func (s *safeBuffer) Read(p []byte) (n int, err error) {
103 s.b = new(bytes.Buffer)
108 func (s *safeBuffer) String() string {
112 s.b = new(bytes.Buffer)