github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/worker/uniter/runlistener_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 "net/rpc" 8 "path/filepath" 9 10 "github.com/juju/utils/exec" 11 gc "launchpad.net/gocheck" 12 13 "github.com/juju/juju/testing" 14 "github.com/juju/juju/worker/uniter" 15 ) 16 17 type ListenerSuite struct { 18 testing.BaseSuite 19 socketPath string 20 } 21 22 var _ = gc.Suite(&ListenerSuite{}) 23 24 // Mirror the params to uniter.NewRunListener, but add cleanup to close it. 25 func (s *ListenerSuite) NewRunListener(c *gc.C) *uniter.RunListener { 26 s.socketPath = filepath.Join(c.MkDir(), "test.listener") 27 listener, err := uniter.NewRunListener(&mockRunner{c}, s.socketPath) 28 c.Assert(err, gc.IsNil) 29 c.Assert(listener, gc.NotNil) 30 s.AddCleanup(func(*gc.C) { 31 listener.Close() 32 }) 33 return listener 34 } 35 36 func (s *ListenerSuite) TestNewRunListenerOnExistingSocketRemovesItAndSucceeds(c *gc.C) { 37 s.NewRunListener(c) 38 39 listener, err := uniter.NewRunListener(&mockRunner{}, s.socketPath) 40 c.Assert(err, gc.IsNil) 41 c.Assert(listener, gc.NotNil) 42 listener.Close() 43 } 44 45 func (s *ListenerSuite) TestClientCall(c *gc.C) { 46 s.NewRunListener(c) 47 48 client, err := rpc.Dial("unix", s.socketPath) 49 c.Assert(err, gc.IsNil) 50 defer client.Close() 51 52 var result exec.ExecResponse 53 err = client.Call(uniter.JujuRunEndpoint, "some-command", &result) 54 c.Assert(err, gc.IsNil) 55 56 c.Assert(string(result.Stdout), gc.Equals, "some-command stdout") 57 c.Assert(string(result.Stderr), gc.Equals, "some-command stderr") 58 c.Assert(result.Code, gc.Equals, 42) 59 } 60 61 type mockRunner struct { 62 c *gc.C 63 } 64 65 var _ uniter.CommandRunner = (*mockRunner)(nil) 66 67 func (r *mockRunner) RunCommands(commands string) (results *exec.ExecResponse, err error) { 68 r.c.Log("mock runner: " + commands) 69 return &exec.ExecResponse{ 70 Code: 42, 71 Stdout: []byte(commands + " stdout"), 72 Stderr: []byte(commands + " stderr"), 73 }, nil 74 }