github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/state/testing/conn.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 import ( 7 "github.com/juju/clock" 8 jujutesting "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/names.v2" 12 13 "github.com/juju/juju/cloud" 14 "github.com/juju/juju/environs/config" 15 "github.com/juju/juju/mongo" 16 "github.com/juju/juju/state" 17 "github.com/juju/juju/storage" 18 "github.com/juju/juju/storage/provider" 19 dummystorage "github.com/juju/juju/storage/provider/dummy" 20 "github.com/juju/juju/testing" 21 ) 22 23 type InitializeArgs struct { 24 Owner names.UserTag 25 InitialConfig *config.Config 26 ControllerConfig map[string]interface{} 27 ControllerInheritedConfig map[string]interface{} 28 RegionConfig cloud.RegionConfig 29 NewPolicy state.NewPolicyFunc 30 Clock clock.Clock 31 } 32 33 // Initialize initializes the state and returns it. If state was not 34 // already initialized, and cfg is nil, the minimal default model 35 // configuration will be used. 36 // This provides for tests still using a real clock from utils as tests are 37 // migrated to use the testing clock 38 func Initialize(c *gc.C, owner names.UserTag, cfg *config.Config, controllerInheritedConfig map[string]interface{}, regionConfig cloud.RegionConfig, newPolicy state.NewPolicyFunc) *state.Controller { 39 return InitializeWithArgs(c, InitializeArgs{ 40 Owner: owner, 41 InitialConfig: cfg, 42 ControllerInheritedConfig: controllerInheritedConfig, 43 RegionConfig: regionConfig, 44 NewPolicy: newPolicy, 45 Clock: &clock.WallClock, 46 }) 47 } 48 49 // InitializeWithArgs initializes the state and returns it. If state was not 50 // already initialized, and args.Config is nil, the minimal default model 51 // configuration will be used. 52 func InitializeWithArgs(c *gc.C, args InitializeArgs) *state.Controller { 53 if args.InitialConfig == nil { 54 args.InitialConfig = testing.ModelConfig(c) 55 } 56 57 session, err := jujutesting.MgoServer.Dial() 58 c.Assert(err, jc.ErrorIsNil) 59 defer session.Close() 60 61 controllerCfg := testing.FakeControllerConfig() 62 for k, v := range args.ControllerConfig { 63 controllerCfg[k] = v 64 } 65 ctlr, err := state.Initialize(state.InitializeParams{ 66 Clock: args.Clock, 67 ControllerConfig: controllerCfg, 68 ControllerModelArgs: state.ModelArgs{ 69 Type: state.ModelTypeIAAS, 70 CloudName: "dummy", 71 CloudRegion: "dummy-region", 72 Config: args.InitialConfig, 73 Owner: args.Owner, 74 StorageProviderRegistry: storage.ChainedProviderRegistry{ 75 dummystorage.StorageProviders(), 76 provider.CommonStorageProviders(), 77 }, 78 }, 79 ControllerInheritedConfig: args.ControllerInheritedConfig, 80 Cloud: cloud.Cloud{ 81 Name: "dummy", 82 Type: "dummy", 83 AuthTypes: []cloud.AuthType{cloud.EmptyAuthType}, 84 Regions: []cloud.Region{ 85 { 86 Name: "dummy-region", 87 Endpoint: "dummy-endpoint", 88 IdentityEndpoint: "dummy-identity-endpoint", 89 StorageEndpoint: "dummy-storage-endpoint", 90 }, 91 { 92 Name: "nether-region", 93 Endpoint: "nether-endpoint", 94 IdentityEndpoint: "nether-identity-endpoint", 95 StorageEndpoint: "nether-storage-endpoint", 96 }, 97 { 98 Name: "unused-region", 99 Endpoint: "unused-endpoint", 100 IdentityEndpoint: "unused-identity-endpoint", 101 StorageEndpoint: "unused-storage-endpoint", 102 }, 103 { 104 Name: "dotty.region", 105 Endpoint: "dotty.endpoint", 106 IdentityEndpoint: "dotty.identity-endpoint", 107 StorageEndpoint: "dotty.storage-endpoint", 108 }, 109 }, 110 RegionConfig: args.RegionConfig, 111 }, 112 MongoSession: session, 113 NewPolicy: args.NewPolicy, 114 AdminPassword: "admin-secret", 115 }) 116 c.Assert(err, jc.ErrorIsNil) 117 return ctlr 118 } 119 120 // NewMongoInfo returns information suitable for 121 // connecting to the testing controller's mongo database. 122 func NewMongoInfo() *mongo.MongoInfo { 123 return &mongo.MongoInfo{ 124 Info: mongo.Info{ 125 Addrs: []string{jujutesting.MgoServer.Addr()}, 126 CACert: testing.CACert, 127 DisableTLS: !jujutesting.MgoServer.SSLEnabled(), 128 }, 129 } 130 }