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  }