github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/upgrades/block_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package upgrades_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/api"
    11  	"github.com/juju/juju/api/block"
    12  	"github.com/juju/juju/juju"
    13  	jujutesting "github.com/juju/juju/juju/testing"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/upgrades"
    16  )
    17  
    18  type blockSuite struct {
    19  	jujutesting.JujuConnSuite
    20  	ctx         upgrades.Context
    21  	blockClient *block.Client
    22  }
    23  
    24  var _ = gc.Suite(&blockSuite{})
    25  
    26  func (s *blockSuite) SetUpTest(c *gc.C) {
    27  	s.JujuConnSuite.SetUpTest(c)
    28  
    29  	conn, err := juju.NewAPIState(s.AdminUserTag(c), s.Environ, api.DialOpts{})
    30  	c.Assert(err, jc.ErrorIsNil)
    31  	s.AddCleanup(func(*gc.C) { conn.Close() })
    32  
    33  	s.ctx = &mockContext{
    34  		agentConfig: &mockAgentConfig{dataDir: s.DataDir()},
    35  		apiState:    conn,
    36  		state:       s.State,
    37  	}
    38  	s.blockClient = block.NewClient(conn)
    39  }
    40  
    41  func (s *blockSuite) TestUpdateBlocksNone(c *gc.C) {
    42  	err := upgrades.MoveBlocksFromEnvironToState(s.ctx)
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	s.ensureBlocksUpdated(c, nil)
    45  	s.ensureBlocksRemovedFromEnvConfig(c)
    46  }
    47  
    48  func (s *blockSuite) ensureBlocksRemovedFromEnvConfig(c *gc.C) {
    49  	cfg, err := s.State.EnvironConfig()
    50  	c.Assert(err, jc.ErrorIsNil)
    51  	attrs := cfg.AllAttrs()
    52  	_, exists := attrs["block-destroy-environment"]
    53  	c.Assert(exists, jc.IsFalse)
    54  	_, exists = attrs["block-remove-object"]
    55  	c.Assert(exists, jc.IsFalse)
    56  	_, exists = attrs["block-all-changes"]
    57  	c.Assert(exists, jc.IsFalse)
    58  }
    59  
    60  func (s *blockSuite) ensureBlocksUpdated(c *gc.C, expected []string) {
    61  	blocks, err := s.blockClient.List()
    62  	c.Assert(err, jc.ErrorIsNil)
    63  
    64  	var types []string
    65  	for _, ablock := range blocks {
    66  		types = append(types, ablock.Type)
    67  	}
    68  	c.Assert(types, jc.SameContents, expected)
    69  }
    70  
    71  func (s *blockSuite) TestUpgradeBlocks(c *gc.C) {
    72  	err := s.State.UpdateEnvironConfig(map[string]interface{}{
    73  		"block-destroy-environment": true,
    74  		"block-remove-object":       true,
    75  		"block-all-changes":         true,
    76  	}, nil, nil)
    77  	c.Assert(err, jc.ErrorIsNil)
    78  
    79  	err = upgrades.MoveBlocksFromEnvironToState(s.ctx)
    80  
    81  	c.Assert(err, jc.ErrorIsNil)
    82  	s.ensureBlocksUpdated(c, []string{
    83  		state.ChangeBlock.String(),
    84  		state.DestroyBlock.String(),
    85  		state.RemoveBlock.String(),
    86  	})
    87  	s.ensureBlocksRemovedFromEnvConfig(c)
    88  }