github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/state/upgrades_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 "github.com/juju/mgo/v3" 8 "github.com/juju/mgo/v3/bson" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/utils/v3" 11 "github.com/kr/pretty" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/storage/provider" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type upgradesSuite struct { 19 internalStateSuite 20 } 21 22 var _ = gc.Suite(&upgradesSuite{}) 23 24 //nolint:unused 25 type expectUpgradedData struct { 26 coll *mgo.Collection 27 expected []bson.M 28 filter bson.D 29 } 30 31 //nolint:unused 32 func upgradedData(coll *mgo.Collection, expected []bson.M) expectUpgradedData { 33 return expectUpgradedData{ 34 coll: coll, 35 expected: expected, 36 } 37 } 38 39 //nolint:unused 40 func (s *upgradesSuite) assertUpgradedData(c *gc.C, upgrade func(*StatePool) error, expect ...expectUpgradedData) { 41 // Two rounds to check idempotency. 42 for i := 0; i < 2; i++ { 43 c.Logf("Run: %d", i) 44 err := upgrade(s.pool) 45 c.Assert(err, jc.ErrorIsNil) 46 47 for _, expect := range expect { 48 var docs []bson.M 49 err = expect.coll.Find(expect.filter).Sort("_id").All(&docs) 50 c.Assert(err, jc.ErrorIsNil) 51 for i, d := range docs { 52 doc := d 53 delete(doc, "txn-queue") 54 delete(doc, "txn-revno") 55 delete(doc, "version") 56 docs[i] = doc 57 } 58 c.Assert(docs, jc.DeepEquals, expect.expected, 59 gc.Commentf("differences: %s", pretty.Diff(docs, expect.expected))) 60 } 61 } 62 } 63 64 //nolint:unused 65 func (s *upgradesSuite) makeModel(c *gc.C, name string, attr coretesting.Attrs) *State { 66 uuid := utils.MustNewUUID() 67 cfg := coretesting.CustomModelConfig(c, coretesting.Attrs{ 68 "name": name, 69 "uuid": uuid.String(), 70 }.Merge(attr)) 71 m, err := s.state.Model() 72 c.Assert(err, jc.ErrorIsNil) 73 _, st, err := s.controller.NewModel(ModelArgs{ 74 Type: ModelTypeIAAS, 75 CloudName: "dummy", 76 CloudRegion: "dummy-region", 77 Config: cfg, 78 Owner: m.Owner(), 79 StorageProviderRegistry: provider.CommonStorageProviders(), 80 }) 81 c.Assert(err, jc.ErrorIsNil) 82 return st 83 }