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  }