github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/uniter/operation/storage_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package operation_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names"
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/worker/uniter/operation"
    14  )
    15  
    16  type UpdateStorageSuite struct {
    17  	testing.IsolationSuite
    18  }
    19  
    20  var _ = gc.Suite(&UpdateStorageSuite{})
    21  
    22  func (s *UpdateStorageSuite) TestPrepare(c *gc.C) {
    23  	factory := operation.NewFactory(operation.FactoryParams{})
    24  	op, err := factory.NewUpdateStorage(nil)
    25  	c.Assert(err, jc.ErrorIsNil)
    26  	state, err := op.Prepare(operation.State{})
    27  	c.Check(err, jc.ErrorIsNil)
    28  	c.Check(state, gc.IsNil)
    29  }
    30  
    31  func (s *UpdateStorageSuite) TestExecuteError(c *gc.C) {
    32  	updater := &mockStorageUpdater{err: errors.New("meep")}
    33  	factory := operation.NewFactory(operation.FactoryParams{StorageUpdater: updater})
    34  
    35  	tag0 := names.NewStorageTag("data/0")
    36  	tag1 := names.NewStorageTag("data/1")
    37  	tags := []names.StorageTag{tag0, tag1}
    38  	op, err := factory.NewUpdateStorage(tags)
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	state, err := op.Prepare(operation.State{})
    41  	c.Check(err, jc.ErrorIsNil)
    42  	c.Check(state, gc.IsNil)
    43  
    44  	state, err = op.Execute(operation.State{})
    45  	c.Check(err, gc.ErrorMatches, "meep")
    46  	c.Check(state, gc.IsNil)
    47  	c.Check(updater.tags, jc.DeepEquals, [][]names.StorageTag{tags})
    48  }
    49  
    50  func (s *UpdateStorageSuite) TestExecuteSuccess(c *gc.C) {
    51  	updater := &mockStorageUpdater{}
    52  	factory := operation.NewFactory(operation.FactoryParams{StorageUpdater: updater})
    53  
    54  	tag0 := names.NewStorageTag("data/0")
    55  	tag1 := names.NewStorageTag("data/1")
    56  	tags := []names.StorageTag{tag0, tag1}
    57  	op, err := factory.NewUpdateStorage(tags)
    58  	c.Assert(err, jc.ErrorIsNil)
    59  	state, err := op.Prepare(operation.State{})
    60  	c.Check(err, jc.ErrorIsNil)
    61  	c.Check(state, gc.IsNil)
    62  
    63  	state, err = op.Execute(operation.State{})
    64  	c.Check(err, jc.ErrorIsNil)
    65  	c.Check(state, gc.IsNil)
    66  	c.Check(updater.tags, jc.DeepEquals, [][]names.StorageTag{tags})
    67  }
    68  
    69  func (s *UpdateStorageSuite) TestCommit(c *gc.C) {
    70  	factory := operation.NewFactory(operation.FactoryParams{})
    71  	op, err := factory.NewUpdateStorage(nil)
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	state, err := op.Commit(operation.State{})
    74  	c.Check(err, jc.ErrorIsNil)
    75  	c.Check(state, gc.IsNil)
    76  }
    77  
    78  func (s *UpdateStorageSuite) TestDoesNotNeedGlobalMachineLock(c *gc.C) {
    79  	factory := operation.NewFactory(operation.FactoryParams{})
    80  	op, err := factory.NewUpdateStorage(nil)
    81  	c.Assert(err, jc.ErrorIsNil)
    82  	c.Assert(op.NeedsGlobalMachineLock(), jc.IsFalse)
    83  }
    84  
    85  type mockStorageUpdater struct {
    86  	tags [][]names.StorageTag
    87  	err  error
    88  }
    89  
    90  func (u *mockStorageUpdater) UpdateStorage(tags []names.StorageTag) error {
    91  	u.tags = append(u.tags, tags)
    92  	return u.err
    93  }