github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/caasmodelupgrader/manifold_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package caasmodelupgrader_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/juju/worker.v1"
    12  	"gopkg.in/juju/worker.v1/dependency"
    13  	dt "gopkg.in/juju/worker.v1/dependency/testing"
    14  
    15  	"github.com/juju/juju/api/base"
    16  	"github.com/juju/juju/worker/caasmodelupgrader"
    17  	"github.com/juju/juju/worker/gate"
    18  )
    19  
    20  type ManifoldSuite struct {
    21  	testing.IsolationSuite
    22  }
    23  
    24  var _ = gc.Suite(&ManifoldSuite{})
    25  
    26  func (*ManifoldSuite) TestInputs(c *gc.C) {
    27  	manifold := caasmodelupgrader.Manifold(caasmodelupgrader.ManifoldConfig{
    28  		APICallerName: "api-caller",
    29  		GateName:      "gate",
    30  	})
    31  	c.Check(manifold.Inputs, jc.DeepEquals, []string{"api-caller", "gate"})
    32  }
    33  
    34  func (*ManifoldSuite) TestMissingAPICaller(c *gc.C) {
    35  	context := dt.StubContext(nil, map[string]interface{}{
    36  		"api-caller": dependency.ErrMissing,
    37  		"gate":       struct{ gate.Unlocker }{},
    38  	})
    39  	manifold := caasmodelupgrader.Manifold(caasmodelupgrader.ManifoldConfig{
    40  		APICallerName: "api-caller",
    41  		GateName:      "gate",
    42  	})
    43  
    44  	worker, err := manifold.Start(context)
    45  	c.Check(worker, gc.IsNil)
    46  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    47  }
    48  
    49  func (*ManifoldSuite) TestMissingGateName(c *gc.C) {
    50  	context := dt.StubContext(nil, map[string]interface{}{
    51  		"api-caller": struct{ base.APICaller }{},
    52  		"gate":       dependency.ErrMissing,
    53  	})
    54  	manifold := caasmodelupgrader.Manifold(caasmodelupgrader.ManifoldConfig{
    55  		APICallerName: "api-caller",
    56  		GateName:      "gate",
    57  	})
    58  
    59  	worker, err := manifold.Start(context)
    60  	c.Check(worker, gc.IsNil)
    61  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    62  }
    63  
    64  func (*ManifoldSuite) TestNewFacadeError(c *gc.C) {
    65  	expectAPICaller := struct{ base.APICaller }{}
    66  	expectGate := struct{ gate.Unlocker }{}
    67  	context := dt.StubContext(nil, map[string]interface{}{
    68  		"api-caller": expectAPICaller,
    69  		"gate":       expectGate,
    70  	})
    71  	manifold := caasmodelupgrader.Manifold(caasmodelupgrader.ManifoldConfig{
    72  		APICallerName: "api-caller",
    73  		GateName:      "gate",
    74  		NewFacade: func(actual base.APICaller) (caasmodelupgrader.Facade, error) {
    75  			c.Check(actual, gc.Equals, expectAPICaller)
    76  			return nil, errors.New("error")
    77  		},
    78  	})
    79  
    80  	worker, err := manifold.Start(context)
    81  	c.Check(worker, gc.IsNil)
    82  	c.Check(err, gc.ErrorMatches, "error")
    83  }
    84  
    85  func (*ManifoldSuite) TestNewWorkerError(c *gc.C) {
    86  	expectFacade := struct{ caasmodelupgrader.Facade }{}
    87  	context := dt.StubContext(nil, map[string]interface{}{
    88  		"api-caller": struct{ base.APICaller }{},
    89  		"gate":       struct{ gate.Unlocker }{},
    90  	})
    91  	manifold := caasmodelupgrader.Manifold(caasmodelupgrader.ManifoldConfig{
    92  		APICallerName: "api-caller",
    93  		GateName:      "gate",
    94  		NewFacade: func(_ base.APICaller) (caasmodelupgrader.Facade, error) {
    95  			return expectFacade, nil
    96  		},
    97  		NewWorker: func(config caasmodelupgrader.Config) (worker.Worker, error) {
    98  			c.Check(config.Facade, gc.Equals, expectFacade)
    99  			return nil, errors.New("error")
   100  		},
   101  	})
   102  
   103  	worker, err := manifold.Start(context)
   104  	c.Check(worker, gc.IsNil)
   105  	c.Check(err, gc.ErrorMatches, "error")
   106  }