github.com/leowmjw/otto@v0.2.1-0.20160126165905-6400716cf085/rpc/client_test.go (about) 1 package rpc 2 3 import ( 4 "bytes" 5 "io" 6 "testing" 7 "time" 8 9 "github.com/hashicorp/otto/app" 10 ) 11 12 func TestClient_App(t *testing.T) { 13 clientConn, serverConn := testConn(t) 14 15 c := new(app.Mock) 16 server := &Server{AppFunc: testAppFixed(c)} 17 streams := testNewStreams(t, server) 18 defer streams.Close() 19 20 go server.ServeConn(serverConn) 21 22 client, err := NewClient(clientConn) 23 if err != nil { 24 t.Fatalf("err: %s", err) 25 } 26 defer client.Close() 27 28 appReal, err := client.App() 29 if err != nil { 30 t.Fatalf("err: %s", err) 31 } 32 33 // Compile! 34 _, err = appReal.Compile(new(app.Context)) 35 if !c.CompileCalled { 36 t.Fatal("compile should be called") 37 } 38 if err != nil { 39 t.Fatalf("bad: %#v", err) 40 } 41 } 42 43 func TestClient_syncStreams(t *testing.T) { 44 client, _, streams := testNewClientServer(t) 45 46 // Start the data copying 47 var stdout_out, stderr_out bytes.Buffer 48 stdout := bytes.NewBufferString("stdouttest") 49 stderr := bytes.NewBufferString("stderrtest") 50 go client.SyncStreams(&stdout_out, &stderr_out) 51 go io.Copy(streams.Stdout, stdout) 52 go io.Copy(streams.Stderr, stderr) 53 54 // Unfortunately I can't think of a better way to make sure all the 55 // copies above go through so let's just exit. 56 time.Sleep(100 * time.Millisecond) 57 58 // Close everything, and lets test the result 59 client.Close() 60 streams.Close() 61 62 if v := stdout_out.String(); v != "stdouttest" { 63 t.Fatalf("bad: %s", v) 64 } 65 if v := stderr_out.String(); v != "stderrtest" { 66 t.Fatalf("bad: %s", v) 67 } 68 }