github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/cmd/jujud/agent/engine/valueworker_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package engine_test
     5  
     6  import (
     7  	"github.com/juju/testing"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/cmd/jujud/agent/engine"
    12  	"github.com/juju/juju/worker"
    13  )
    14  
    15  type ValueWorkerSuite struct {
    16  	testing.IsolationSuite
    17  }
    18  
    19  var _ = gc.Suite(&ValueWorkerSuite{})
    20  
    21  func (s *ValueWorkerSuite) TestNewValueWorker_Success(c *gc.C) {
    22  	w, err := engine.NewValueWorker("cheese")
    23  	c.Assert(err, jc.ErrorIsNil)
    24  
    25  	err = worker.Stop(w)
    26  	c.Check(err, jc.ErrorIsNil)
    27  }
    28  
    29  func (s *ValueWorkerSuite) TestNewValueWorker_NilValue(c *gc.C) {
    30  	w, err := engine.NewValueWorker(nil)
    31  	c.Check(err, gc.ErrorMatches, "NewValueWorker expects a value")
    32  	c.Check(w, gc.IsNil)
    33  }
    34  
    35  func (s *ValueWorkerSuite) TestValueWorkerOutput_Success(c *gc.C) {
    36  	value := &testType{}
    37  	w, err := engine.NewValueWorker(value)
    38  	c.Assert(err, jc.ErrorIsNil)
    39  
    40  	var outVal testInterface
    41  	err = engine.ValueWorkerOutput(w, &outVal)
    42  	c.Check(err, jc.ErrorIsNil)
    43  	c.Check(outVal, gc.DeepEquals, value)
    44  }
    45  
    46  func (s *ValueWorkerSuite) TestValueWorkerOutput_BadInput(c *gc.C) {
    47  	var outVal testInterface
    48  	err := engine.ValueWorkerOutput(&testType{}, &outVal)
    49  	c.Check(err, gc.ErrorMatches, "in should be a \\*valueWorker; is .*")
    50  	c.Check(outVal, gc.IsNil)
    51  }
    52  
    53  func (s *ValueWorkerSuite) TestValueWorkerOutput_BadOutputIndirection(c *gc.C) {
    54  	value := &testType{}
    55  	w, err := engine.NewValueWorker(value)
    56  	c.Assert(err, jc.ErrorIsNil)
    57  
    58  	var outVal string
    59  	err = engine.ValueWorkerOutput(w, outVal)
    60  	c.Check(err, gc.ErrorMatches, "out should be a pointer; is .*")
    61  	c.Check(outVal, gc.Equals, "")
    62  }
    63  
    64  func (s *ValueWorkerSuite) TestValueWorkerOutput_BadOutputType(c *gc.C) {
    65  	value := &testType{}
    66  	w, err := engine.NewValueWorker(value)
    67  	c.Assert(err, jc.ErrorIsNil)
    68  
    69  	var outVal string
    70  	err = engine.ValueWorkerOutput(w, &outVal)
    71  	c.Check(err, gc.ErrorMatches, "cannot output into \\*string")
    72  	c.Check(outVal, gc.Equals, "")
    73  }
    74  
    75  type testInterface interface {
    76  	worker.Worker
    77  	Foobar()
    78  }
    79  
    80  type testType struct {
    81  	testInterface
    82  }