github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/state/compat_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 "gopkg.in/mgo.v2/bson" 10 "gopkg.in/mgo.v2/txn" 11 12 "github.com/juju/juju/testcharms" 13 ) 14 15 // compatSuite contains backwards compatibility tests, 16 // for ensuring state operations behave correctly across 17 // schema changes. 18 type compatSuite struct { 19 internalStateSuite 20 env *Environment 21 } 22 23 var _ = gc.Suite(&compatSuite{}) 24 25 func (s *compatSuite) SetUpTest(c *gc.C) { 26 s.internalStateSuite.SetUpTest(c) 27 28 env, err := s.state.Environment() 29 c.Assert(err, jc.ErrorIsNil) 30 s.env = env 31 } 32 33 func (s *compatSuite) TestEnvironAssertAlive(c *gc.C) { 34 // 1.17+ has a "Life" field in environment documents. 35 // We remove it here, to test 1.16 compatibility. 36 ops := []txn.Op{{ 37 C: environmentsC, 38 Id: s.env.doc.UUID, 39 Update: bson.D{{"$unset", bson.D{{"life", nil}}}}, 40 }} 41 err := s.state.runTransaction(ops) 42 c.Assert(err, jc.ErrorIsNil) 43 44 // Now check the assertAliveOp and Destroy work as if 45 // the environment is Alive. 46 err = s.state.runTransaction([]txn.Op{s.env.assertAliveOp()}) 47 c.Assert(err, jc.ErrorIsNil) 48 err = s.env.Destroy() 49 c.Assert(err, jc.ErrorIsNil) 50 } 51 52 func (s *compatSuite) TestGetServiceWithoutNetworksIsOK(c *gc.C) { 53 charm := addCharm(c, s.state, "quantal", testcharms.Repo.CharmDir("mysql")) 54 owner := s.env.Owner() 55 service, err := s.state.AddService("mysql", owner.String(), charm, nil, nil) 56 c.Assert(err, jc.ErrorIsNil) 57 // In 1.17.7+ all services have associated document in the 58 // requested networks collection. We remove it here to test 59 // backwards compatibility. 60 ops := []txn.Op{removeRequestedNetworksOp(s.state, service.globalKey())} 61 err = s.state.runTransaction(ops) 62 c.Assert(err, jc.ErrorIsNil) 63 64 // Now check the trying to fetch service's networks is OK. 65 networks, err := service.Networks() 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(networks, gc.HasLen, 0) 68 } 69 70 func (s *compatSuite) TestGetMachineWithoutRequestedNetworksIsOK(c *gc.C) { 71 machine, err := s.state.AddMachine("quantal", JobHostUnits) 72 c.Assert(err, jc.ErrorIsNil) 73 // In 1.17.7+ all machines have associated document in the 74 // requested networks collection. We remove it here to test 75 // backwards compatibility. 76 ops := []txn.Op{removeRequestedNetworksOp(s.state, machine.globalKey())} 77 err = s.state.runTransaction(ops) 78 c.Assert(err, jc.ErrorIsNil) 79 80 // Now check the trying to fetch machine's networks is OK. 81 networks, err := machine.RequestedNetworks() 82 c.Assert(err, jc.ErrorIsNil) 83 c.Assert(networks, gc.HasLen, 0) 84 }