Skip to content

Commit

Permalink
test case
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchellh committed Feb 7, 2016
1 parent 2ad7b2b commit a42063a
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 108 deletions.
104 changes: 104 additions & 0 deletions client_posix_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// +build !windows

package plugin

import (
"os"
"reflect"
"syscall"
"testing"
"time"
)

func TestClient_testInterfaceReattach(t *testing.T) {
// Setup the process for daemonization
process := helperProcess("test-interface-daemon")
if process.SysProcAttr == nil {
process.SysProcAttr = &syscall.SysProcAttr{}
}
process.SysProcAttr.Setsid = true
syscall.Umask(0)

c := NewClient(&ClientConfig{
Cmd: process,
HandshakeConfig: testHandshake,
Plugins: testPluginMap,
})

// Start it so we can get the reattach info
if _, err := c.Start(); err != nil {
t.Fatalf("err should be nil, got %s", err)
}

// New client with reattach info
reattach := c.ReattachConfig()
if reattach == nil {
c.Kill()
t.Fatal("reattach config should be non-nil")
}

// Find the process and defer a kill so we know it is gone
p, err := os.FindProcess(reattach.Pid)
if err != nil {
c.Kill()
t.Fatalf("couldn't find process: %s", err)
}
defer p.Kill()

// Reattach
c = NewClient(&ClientConfig{
Reattach: reattach,
HandshakeConfig: testHandshake,
Plugins: testPluginMap,
})

// Start shouldn't error
if _, err := c.Start(); err != nil {
t.Fatalf("err: %s", err)
}

// It should still be alive
time.Sleep(1 * time.Second)
if c.Exited() {
t.Fatal("should not be exited")
}

// Grab the RPC client
client, err := c.Client()
if err != nil {
t.Fatalf("err should be nil, got %s", err)
}

// Grab the impl
raw, err := client.Dispense("test")
if err != nil {
t.Fatalf("err should be nil, got %s", err)
}

impl, ok := raw.(testInterface)
if !ok {
t.Fatalf("bad: %#v", raw)
}

result := impl.Double(21)
if result != 42 {
t.Fatalf("bad: %#v", result)
}

// Test the resulting reattach config
reattach2 := c.ReattachConfig()
if reattach2 == nil {
t.Fatal("reattach from reattached should not be nil")
}
if !reflect.DeepEqual(reattach, reattach2) {
t.Fatalf("bad: %#v", reattach)
}

// Kill it
c.Kill()

// Test that it knows it is exited
if !c.Exited() {
t.Fatal("should say client has exited")
}
}
87 changes: 0 additions & 87 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import (
"io/ioutil"
"net"
"os"
"reflect"
"runtime"
"strings"
"testing"
"time"
Expand Down Expand Up @@ -84,91 +82,6 @@ func TestClient_testInterface(t *testing.T) {
}
}

func TestClient_testInterfaceReattach(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("no daemonization on Windows")
return
}

process := helperProcess("test-interface-daemon")
c := NewClient(&ClientConfig{
Cmd: process,
HandshakeConfig: testHandshake,
Plugins: testPluginMap,
})

// Start it so we can get the reattach info
if _, err := c.Start(); err != nil {
t.Fatalf("err should be nil, got %s", err)
}

// New client with reattach info
reattach := c.ReattachConfig()
if reattach == nil {
c.Kill()
t.Fatal("reattach config should be non-nil")
}

// Find the process and defer a kill so we know it is gone
p, err := os.FindProcess(reattach.Pid)
if err != nil {
c.Kill()
t.Fatalf("couldn't find process: %s", err)
}
defer p.Kill()

// Reattach
c = NewClient(&ClientConfig{
Reattach: reattach,
HandshakeConfig: testHandshake,
Plugins: testPluginMap,
})

// Start shouldn't error
if _, err := c.Start(); err != nil {
t.Fatalf("err: %s", err)
}

// Grab the RPC client
client, err := c.Client()
if err != nil {
t.Fatalf("err should be nil, got %s", err)
}

// Grab the impl
raw, err := client.Dispense("test")
if err != nil {
t.Fatalf("err should be nil, got %s", err)
}

impl, ok := raw.(testInterface)
if !ok {
t.Fatalf("bad: %#v", raw)
}

result := impl.Double(21)
if result != 42 {
t.Fatalf("bad: %#v", result)
}

// Test the resulting reattach config
reattach2 := c.ReattachConfig()
if reattach2 == nil {
t.Fatal("reattach from reattached should not be nil")
}
if !reflect.DeepEqual(reattach, reattach2) {
t.Fatalf("bad: %#v", reattach)
}

// Kill it
c.Kill()

// Test that it knows it is exited
if !c.Exited() {
t.Fatal("should say client has exited")
}
}

func TestClient_cmdAndReattach(t *testing.T) {
config := &ClientConfig{
Cmd: helperProcess("start-timeout"),
Expand Down
11 changes: 0 additions & 11 deletions plugin_daemonize_unix_test.go

This file was deleted.

7 changes: 0 additions & 7 deletions plugin_daemonize_windows_test.go

This file was deleted.

3 changes: 0 additions & 3 deletions plugin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,6 @@ func TestHelperProcess(*testing.T) {
// Shouldn't reach here but make sure we exit anyways
os.Exit(0)
case "test-interface-daemon":
// Daemonize
daemonize()

// Serve!
Serve(&ServeConfig{
HandshakeConfig: testHandshake,
Expand Down

0 comments on commit a42063a

Please sign in to comment.