github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/testing/factory/factory_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package factory_test 5 6 import ( 7 "fmt" 8 "regexp" 9 "time" 10 11 "github.com/juju/errors" 12 jc "github.com/juju/testing/checkers" 13 "github.com/juju/utils" 14 gc "gopkg.in/check.v1" 15 "gopkg.in/juju/charm.v6-unstable" 16 "gopkg.in/juju/names.v2" 17 18 "github.com/juju/juju/instance" 19 "github.com/juju/juju/permission" 20 "github.com/juju/juju/state" 21 statetesting "github.com/juju/juju/state/testing" 22 "github.com/juju/juju/storage" 23 "github.com/juju/juju/storage/provider" 24 "github.com/juju/juju/testing" 25 "github.com/juju/juju/testing/factory" 26 ) 27 28 type factorySuite struct { 29 statetesting.StateSuite 30 Factory *factory.Factory 31 } 32 33 var _ = gc.Suite(&factorySuite{}) 34 35 func (s *factorySuite) SetUpTest(c *gc.C) { 36 s.NewPolicy = func(*state.State) state.Policy { 37 return &statetesting.MockPolicy{ 38 GetStorageProviderRegistry: func() (storage.ProviderRegistry, error) { 39 return provider.CommonStorageProviders(), nil 40 }, 41 } 42 } 43 s.StateSuite.SetUpTest(c) 44 s.Factory = factory.NewFactory(s.State) 45 } 46 47 func (s *factorySuite) TestMakeUserNil(c *gc.C) { 48 user := s.Factory.MakeUser(c, nil) 49 c.Assert(user.IsDisabled(), jc.IsFalse) 50 51 saved, err := s.State.User(user.UserTag()) 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(saved.Tag(), gc.Equals, user.Tag()) 54 c.Assert(saved.Name(), gc.Equals, user.Name()) 55 c.Assert(saved.DisplayName(), gc.Equals, user.DisplayName()) 56 c.Assert(saved.CreatedBy(), gc.Equals, user.CreatedBy()) 57 c.Assert(saved.DateCreated(), gc.Equals, user.DateCreated()) 58 c.Assert(saved.IsDisabled(), gc.Equals, user.IsDisabled()) 59 60 savedLastLogin, err := saved.LastLogin() 61 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 62 lastLogin, err := user.LastLogin() 63 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 64 c.Assert(savedLastLogin, gc.Equals, lastLogin) 65 } 66 67 func (s *factorySuite) TestMakeUserParams(c *gc.C) { 68 username := "bob" 69 displayName := "Bob the Builder" 70 creator := s.Factory.MakeUser(c, nil) 71 password := "sekrit" 72 user := s.Factory.MakeUser(c, &factory.UserParams{ 73 Name: username, 74 DisplayName: displayName, 75 Creator: creator.Tag(), 76 Password: password, 77 }) 78 c.Assert(user.IsDisabled(), jc.IsFalse) 79 c.Assert(user.Name(), gc.Equals, username) 80 c.Assert(user.DisplayName(), gc.Equals, displayName) 81 c.Assert(user.CreatedBy(), gc.Equals, creator.UserTag().Name()) 82 c.Assert(user.PasswordValid(password), jc.IsTrue) 83 84 saved, err := s.State.User(user.UserTag()) 85 c.Assert(err, jc.ErrorIsNil) 86 c.Assert(saved.Tag(), gc.Equals, user.Tag()) 87 c.Assert(saved.Name(), gc.Equals, user.Name()) 88 c.Assert(saved.DisplayName(), gc.Equals, user.DisplayName()) 89 c.Assert(saved.CreatedBy(), gc.Equals, user.CreatedBy()) 90 c.Assert(saved.DateCreated(), gc.Equals, user.DateCreated()) 91 c.Assert(saved.IsDisabled(), gc.Equals, user.IsDisabled()) 92 93 savedLastLogin, err := saved.LastLogin() 94 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 95 lastLogin, err := user.LastLogin() 96 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 97 c.Assert(savedLastLogin, gc.Equals, lastLogin) 98 99 _, err = s.State.UserAccess(user.UserTag(), s.State.ModelTag()) 100 c.Assert(err, jc.ErrorIsNil) 101 } 102 103 func (s *factorySuite) TestMakeUserInvalidCreator(c *gc.C) { 104 invalidFunc := func() { 105 s.Factory.MakeUser(c, &factory.UserParams{ 106 Name: "bob", 107 DisplayName: "Bob", 108 Creator: names.NewMachineTag("0"), 109 Password: "bob", 110 }) 111 } 112 113 c.Assert(invalidFunc, gc.PanicMatches, `interface conversion: .*`) 114 saved, err := s.State.User(names.NewUserTag("bob")) 115 c.Assert(err, jc.Satisfies, errors.IsNotFound) 116 c.Assert(saved, gc.IsNil) 117 } 118 119 func (s *factorySuite) TestMakeUserNoModelUser(c *gc.C) { 120 username := "bob" 121 displayName := "Bob the Builder" 122 creator := names.NewLocalUserTag("eric") 123 password := "sekrit" 124 user := s.Factory.MakeUser(c, &factory.UserParams{ 125 Name: username, 126 DisplayName: displayName, 127 Creator: creator, 128 Password: password, 129 NoModelUser: true, 130 }) 131 132 _, err := s.State.User(user.UserTag()) 133 c.Assert(err, jc.ErrorIsNil) 134 _, err = s.State.UserAccess(user.UserTag(), s.State.ModelTag()) 135 c.Assert(err, jc.Satisfies, errors.IsNotFound) 136 } 137 138 func (s *factorySuite) TestMakeModelUserNil(c *gc.C) { 139 modelUser := s.Factory.MakeModelUser(c, nil) 140 saved, err := s.State.UserAccess(modelUser.UserTag, modelUser.Object) 141 c.Assert(err, jc.ErrorIsNil) 142 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 143 c.Assert(saved.UserName, gc.Equals, modelUser.UserName) 144 c.Assert(saved.DisplayName, gc.Equals, modelUser.DisplayName) 145 c.Assert(saved.CreatedBy, gc.Equals, modelUser.CreatedBy) 146 } 147 148 func (s *factorySuite) TestMakeModelUserPartialParams(c *gc.C) { 149 s.Factory.MakeUser(c, &factory.UserParams{Name: "foobar123", NoModelUser: true}) 150 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 151 User: "foobar123"}) 152 153 saved, err := s.State.UserAccess(modelUser.UserTag, modelUser.Object) 154 c.Assert(err, jc.ErrorIsNil) 155 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 156 c.Assert(saved.UserName, gc.Equals, "foobar123") 157 c.Assert(saved.DisplayName, gc.Equals, modelUser.DisplayName) 158 c.Assert(saved.CreatedBy, gc.Equals, modelUser.CreatedBy) 159 } 160 161 func (s *factorySuite) TestMakeModelUserParams(c *gc.C) { 162 s.Factory.MakeUser(c, &factory.UserParams{Name: "createdby"}) 163 s.Factory.MakeUser(c, &factory.UserParams{ 164 Name: "foobar", 165 Creator: names.NewUserTag("createdby"), 166 NoModelUser: true, 167 }) 168 169 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 170 User: "foobar", 171 CreatedBy: names.NewUserTag("createdby"), 172 DisplayName: "Foo Bar", 173 }) 174 175 saved, err := s.State.UserAccess(modelUser.UserTag, s.State.ModelTag()) 176 c.Assert(err, jc.ErrorIsNil) 177 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 178 c.Assert(saved.UserName, gc.Equals, "foobar") 179 c.Assert(saved.CreatedBy.Id(), gc.Equals, "createdby") 180 c.Assert(saved.DisplayName, gc.Equals, "Foo Bar") 181 } 182 183 func (s *factorySuite) TestMakeModelUserInvalidCreatedBy(c *gc.C) { 184 invalidFunc := func() { 185 s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 186 User: "bob", 187 CreatedBy: names.NewMachineTag("0"), 188 }) 189 } 190 191 c.Assert(invalidFunc, gc.PanicMatches, `interface conversion: .*`) 192 saved, err := s.State.UserAccess(names.NewLocalUserTag("bob"), s.State.ModelTag()) 193 c.Assert(err, jc.Satisfies, errors.IsNotFound) 194 c.Assert(saved, gc.DeepEquals, permission.UserAccess{}) 195 } 196 197 func (s *factorySuite) TestMakeModelUserNonLocalUser(c *gc.C) { 198 creator := s.Factory.MakeUser(c, &factory.UserParams{Name: "created-by"}) 199 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 200 User: "foobar@ubuntuone", 201 DisplayName: "Foo Bar", 202 CreatedBy: creator.UserTag(), 203 }) 204 205 saved, err := s.State.UserAccess(modelUser.UserTag, s.State.ModelTag()) 206 c.Assert(err, jc.ErrorIsNil) 207 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 208 c.Assert(saved.UserName, gc.Equals, "foobar@ubuntuone") 209 c.Assert(saved.DisplayName, gc.Equals, "Foo Bar") 210 c.Assert(saved.CreatedBy.Id(), gc.Equals, creator.UserTag().Id()) 211 } 212 213 func (s *factorySuite) TestMakeMachineNil(c *gc.C) { 214 machine, password := s.Factory.MakeMachineReturningPassword(c, nil) 215 c.Assert(machine, gc.NotNil) 216 217 saved, err := s.State.Machine(machine.Id()) 218 c.Assert(err, jc.ErrorIsNil) 219 220 c.Assert(saved.Series(), gc.Equals, machine.Series()) 221 c.Assert(saved.Id(), gc.Equals, machine.Id()) 222 c.Assert(saved.Series(), gc.Equals, machine.Series()) 223 c.Assert(saved.Tag(), gc.Equals, machine.Tag()) 224 c.Assert(saved.Life(), gc.Equals, machine.Life()) 225 c.Assert(saved.Jobs(), gc.DeepEquals, machine.Jobs()) 226 c.Assert(saved.PasswordValid(password), jc.IsTrue) 227 savedInstanceId, err := saved.InstanceId() 228 c.Assert(err, jc.ErrorIsNil) 229 machineInstanceId, err := machine.InstanceId() 230 c.Assert(err, jc.ErrorIsNil) 231 c.Assert(savedInstanceId, gc.Equals, machineInstanceId) 232 c.Assert(saved.Clean(), gc.Equals, machine.Clean()) 233 } 234 235 func (s *factorySuite) TestMakeMachine(c *gc.C) { 236 series := "quantal" 237 jobs := []state.MachineJob{state.JobManageModel} 238 password, err := utils.RandomPassword() 239 c.Assert(err, jc.ErrorIsNil) 240 nonce := "some-nonce" 241 id := instance.Id("some-id") 242 volumes := []state.MachineVolumeParams{{Volume: state.VolumeParams{Size: 1024}}} 243 filesystems := []state.MachineFilesystemParams{{ 244 Filesystem: state.FilesystemParams{Pool: "loop", Size: 2048}, 245 }} 246 247 machine, pwd := s.Factory.MakeMachineReturningPassword(c, &factory.MachineParams{ 248 Series: series, 249 Jobs: jobs, 250 Password: password, 251 Nonce: nonce, 252 InstanceId: id, 253 Volumes: volumes, 254 Filesystems: filesystems, 255 }) 256 c.Assert(machine, gc.NotNil) 257 c.Assert(pwd, gc.Equals, password) 258 259 c.Assert(machine.Series(), gc.Equals, series) 260 c.Assert(machine.Jobs(), gc.DeepEquals, jobs) 261 machineInstanceId, err := machine.InstanceId() 262 c.Assert(err, jc.ErrorIsNil) 263 c.Assert(machineInstanceId, gc.Equals, id) 264 c.Assert(machine.CheckProvisioned(nonce), jc.IsTrue) 265 c.Assert(machine.PasswordValid(password), jc.IsTrue) 266 267 assertVolume := func(name string, size uint64) { 268 volume, err := s.State.Volume(names.NewVolumeTag(name)) 269 c.Assert(err, jc.ErrorIsNil) 270 volParams, ok := volume.Params() 271 c.Assert(ok, jc.IsTrue) 272 c.Assert(volParams, jc.DeepEquals, state.VolumeParams{Pool: "loop", Size: size}) 273 volAttachments, err := s.State.VolumeAttachments(volume.VolumeTag()) 274 c.Assert(err, jc.ErrorIsNil) 275 c.Assert(volAttachments, gc.HasLen, 1) 276 c.Assert(volAttachments[0].Machine(), gc.Equals, machine.Tag()) 277 } 278 assertVolume(machine.Id()+"/0", 2048) // backing the filesystem 279 assertVolume(machine.Id()+"/1", 1024) 280 281 filesystem, err := s.State.Filesystem(names.NewFilesystemTag(machine.Id() + "/0")) 282 c.Assert(err, jc.ErrorIsNil) 283 fsParams, ok := filesystem.Params() 284 c.Assert(ok, jc.IsTrue) 285 c.Assert(fsParams, jc.DeepEquals, state.FilesystemParams{Pool: "loop", Size: 2048}) 286 fsAttachments, err := s.State.MachineFilesystemAttachments(machine.Tag().(names.MachineTag)) 287 c.Assert(err, jc.ErrorIsNil) 288 c.Assert(fsAttachments, gc.HasLen, 1) 289 c.Assert(fsAttachments[0].Machine(), gc.Equals, machine.Tag()) 290 291 saved, err := s.State.Machine(machine.Id()) 292 c.Assert(err, jc.ErrorIsNil) 293 294 c.Assert(saved.Id(), gc.Equals, machine.Id()) 295 c.Assert(saved.Series(), gc.Equals, machine.Series()) 296 c.Assert(saved.Tag(), gc.Equals, machine.Tag()) 297 c.Assert(saved.Life(), gc.Equals, machine.Life()) 298 c.Assert(saved.Jobs(), gc.DeepEquals, machine.Jobs()) 299 savedInstanceId, err := saved.InstanceId() 300 c.Assert(err, jc.ErrorIsNil) 301 c.Assert(savedInstanceId, gc.Equals, machineInstanceId) 302 c.Assert(saved.Clean(), gc.Equals, machine.Clean()) 303 } 304 305 func (s *factorySuite) TestMakeCharmNil(c *gc.C) { 306 charm := s.Factory.MakeCharm(c, nil) 307 c.Assert(charm, gc.NotNil) 308 309 saved, err := s.State.Charm(charm.URL()) 310 c.Assert(err, jc.ErrorIsNil) 311 312 c.Assert(saved.URL(), gc.DeepEquals, charm.URL()) 313 c.Assert(saved.Meta(), gc.DeepEquals, charm.Meta()) 314 c.Assert(saved.StoragePath(), gc.Equals, charm.StoragePath()) 315 c.Assert(saved.BundleSha256(), gc.Equals, charm.BundleSha256()) 316 } 317 318 func (s *factorySuite) TestMakeCharm(c *gc.C) { 319 series := "quantal" 320 name := "wordpress" 321 revision := 13 322 url := fmt.Sprintf("cs:%s/%s-%d", series, name, revision) 323 ch := s.Factory.MakeCharm(c, &factory.CharmParams{ 324 Name: name, 325 URL: url, 326 }) 327 c.Assert(ch, gc.NotNil) 328 329 c.Assert(ch.URL(), gc.DeepEquals, charm.MustParseURL(url)) 330 331 saved, err := s.State.Charm(ch.URL()) 332 c.Assert(err, jc.ErrorIsNil) 333 334 c.Assert(saved.URL(), gc.DeepEquals, ch.URL()) 335 c.Assert(saved.Meta(), gc.DeepEquals, ch.Meta()) 336 c.Assert(saved.Meta().Name, gc.Equals, name) 337 c.Assert(saved.StoragePath(), gc.Equals, ch.StoragePath()) 338 c.Assert(saved.BundleSha256(), gc.Equals, ch.BundleSha256()) 339 } 340 341 func (s *factorySuite) TestMakeApplicationNil(c *gc.C) { 342 application := s.Factory.MakeApplication(c, nil) 343 c.Assert(application, gc.NotNil) 344 345 saved, err := s.State.Application(application.Name()) 346 c.Assert(err, jc.ErrorIsNil) 347 348 c.Assert(saved.Name(), gc.Equals, application.Name()) 349 c.Assert(saved.Tag(), gc.Equals, application.Tag()) 350 c.Assert(saved.Life(), gc.Equals, application.Life()) 351 } 352 353 func (s *factorySuite) TestMakeApplication(c *gc.C) { 354 charm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "wordpress"}) 355 application := s.Factory.MakeApplication(c, &factory.ApplicationParams{ 356 Charm: charm, 357 }) 358 c.Assert(application, gc.NotNil) 359 360 c.Assert(application.Name(), gc.Equals, "wordpress") 361 curl, _ := application.CharmURL() 362 c.Assert(curl, gc.DeepEquals, charm.URL()) 363 364 saved, err := s.State.Application(application.Name()) 365 c.Assert(err, jc.ErrorIsNil) 366 367 c.Assert(saved.Name(), gc.Equals, application.Name()) 368 c.Assert(saved.Tag(), gc.Equals, application.Tag()) 369 c.Assert(saved.Life(), gc.Equals, application.Life()) 370 } 371 372 func (s *factorySuite) TestMakeUnitNil(c *gc.C) { 373 unit := s.Factory.MakeUnit(c, nil) 374 c.Assert(unit, gc.NotNil) 375 376 saved, err := s.State.Unit(unit.Name()) 377 c.Assert(err, jc.ErrorIsNil) 378 379 c.Assert(saved.Name(), gc.Equals, unit.Name()) 380 c.Assert(saved.ApplicationName(), gc.Equals, unit.ApplicationName()) 381 c.Assert(saved.Series(), gc.Equals, unit.Series()) 382 c.Assert(saved.Life(), gc.Equals, unit.Life()) 383 } 384 385 func (s *factorySuite) TestMakeUnit(c *gc.C) { 386 application := s.Factory.MakeApplication(c, nil) 387 unit := s.Factory.MakeUnit(c, &factory.UnitParams{ 388 Application: application, 389 SetCharmURL: true, 390 }) 391 c.Assert(unit, gc.NotNil) 392 393 c.Assert(unit.ApplicationName(), gc.Equals, application.Name()) 394 395 saved, err := s.State.Unit(unit.Name()) 396 c.Assert(err, jc.ErrorIsNil) 397 398 c.Assert(saved.Name(), gc.Equals, unit.Name()) 399 c.Assert(saved.ApplicationName(), gc.Equals, unit.ApplicationName()) 400 c.Assert(saved.Series(), gc.Equals, unit.Series()) 401 c.Assert(saved.Life(), gc.Equals, unit.Life()) 402 403 applicationCharmURL, _ := application.CharmURL() 404 unitCharmURL, _ := saved.CharmURL() 405 c.Assert(unitCharmURL, gc.DeepEquals, applicationCharmURL) 406 } 407 408 func (s *factorySuite) TestMakeRelationNil(c *gc.C) { 409 relation := s.Factory.MakeRelation(c, nil) 410 c.Assert(relation, gc.NotNil) 411 412 saved, err := s.State.Relation(relation.Id()) 413 c.Assert(err, jc.ErrorIsNil) 414 415 c.Assert(saved.Id(), gc.Equals, relation.Id()) 416 c.Assert(saved.Tag(), gc.Equals, relation.Tag()) 417 c.Assert(saved.Life(), gc.Equals, relation.Life()) 418 c.Assert(saved.Endpoints(), gc.DeepEquals, relation.Endpoints()) 419 } 420 421 func (s *factorySuite) TestMakeRelation(c *gc.C) { 422 s1 := s.Factory.MakeApplication(c, &factory.ApplicationParams{ 423 Name: "application1", 424 Charm: s.Factory.MakeCharm(c, &factory.CharmParams{ 425 Name: "wordpress", 426 }), 427 }) 428 e1, err := s1.Endpoint("db") 429 c.Assert(err, jc.ErrorIsNil) 430 431 s2 := s.Factory.MakeApplication(c, &factory.ApplicationParams{ 432 Name: "application2", 433 Charm: s.Factory.MakeCharm(c, &factory.CharmParams{ 434 Name: "mysql", 435 }), 436 }) 437 e2, err := s2.Endpoint("server") 438 c.Assert(err, jc.ErrorIsNil) 439 440 relation := s.Factory.MakeRelation(c, &factory.RelationParams{ 441 Endpoints: []state.Endpoint{e1, e2}, 442 }) 443 c.Assert(relation, gc.NotNil) 444 445 saved, err := s.State.Relation(relation.Id()) 446 c.Assert(err, jc.ErrorIsNil) 447 448 c.Assert(saved.Id(), gc.Equals, relation.Id()) 449 c.Assert(saved.Tag(), gc.Equals, relation.Tag()) 450 c.Assert(saved.Life(), gc.Equals, relation.Life()) 451 c.Assert(saved.Endpoints(), gc.DeepEquals, relation.Endpoints()) 452 } 453 454 func (s *factorySuite) TestMakeMetricNil(c *gc.C) { 455 metric := s.Factory.MakeMetric(c, nil) 456 c.Assert(metric, gc.NotNil) 457 458 saved, err := s.State.MetricBatch(metric.UUID()) 459 c.Assert(err, jc.ErrorIsNil) 460 461 c.Assert(saved.UUID(), gc.Equals, metric.UUID()) 462 c.Assert(saved.Unit(), gc.Equals, metric.Unit()) 463 c.Assert(saved.Sent(), gc.Equals, metric.Sent()) 464 c.Assert(saved.CharmURL(), gc.Equals, metric.CharmURL()) 465 c.Assert(saved.Sent(), gc.Equals, metric.Sent()) 466 c.Assert(saved.Metrics(), gc.HasLen, 1) 467 c.Assert(saved.Metrics()[0].Key, gc.Equals, metric.Metrics()[0].Key) 468 c.Assert(saved.Metrics()[0].Value, gc.Equals, metric.Metrics()[0].Value) 469 c.Assert(saved.Metrics()[0].Time.Equal(metric.Metrics()[0].Time), jc.IsTrue) 470 } 471 472 func (s *factorySuite) TestMakeMetric(c *gc.C) { 473 now := time.Now().Round(time.Second).UTC() 474 meteredCharm := s.Factory.MakeCharm(c, &factory.CharmParams{Name: "metered", URL: "cs:quantal/metered"}) 475 meteredApplication := s.Factory.MakeApplication(c, &factory.ApplicationParams{Charm: meteredCharm}) 476 unit := s.Factory.MakeUnit(c, &factory.UnitParams{Application: meteredApplication, SetCharmURL: true}) 477 metric := s.Factory.MakeMetric(c, &factory.MetricParams{ 478 Unit: unit, 479 Time: &now, 480 Sent: true, 481 Metrics: []state.Metric{{"pings", "1", now}}, 482 }) 483 c.Assert(metric, gc.NotNil) 484 485 saved, err := s.State.MetricBatch(metric.UUID()) 486 c.Assert(err, jc.ErrorIsNil) 487 488 c.Assert(saved.UUID(), gc.Equals, metric.UUID()) 489 c.Assert(saved.Unit(), gc.Equals, metric.Unit()) 490 c.Assert(saved.CharmURL(), gc.Equals, metric.CharmURL()) 491 c.Assert(metric.Sent(), jc.IsTrue) 492 c.Assert(saved.Sent(), jc.IsTrue) 493 c.Assert(saved.Metrics(), gc.HasLen, 1) 494 c.Assert(saved.Metrics()[0].Key, gc.Equals, "pings") 495 c.Assert(saved.Metrics()[0].Value, gc.Equals, "1") 496 c.Assert(saved.Metrics()[0].Time.Equal(now), jc.IsTrue) 497 } 498 499 func (s *factorySuite) TestMakeModelNil(c *gc.C) { 500 st := s.Factory.MakeModel(c, nil) 501 defer st.Close() 502 503 env, err := st.Model() 504 c.Assert(err, jc.ErrorIsNil) 505 re := regexp.MustCompile(`^testenv-\d+$`) 506 c.Assert(re.MatchString(env.Name()), jc.IsTrue) 507 c.Assert(env.UUID() == s.State.ModelUUID(), jc.IsFalse) 508 origEnv, err := s.State.Model() 509 c.Assert(err, jc.ErrorIsNil) 510 c.Assert(env.Owner(), gc.Equals, origEnv.Owner()) 511 512 cfg, err := st.ModelConfig() 513 c.Assert(err, jc.ErrorIsNil) 514 c.Assert(cfg.AllAttrs()["default-series"], gc.Equals, "xenial") 515 } 516 517 func (s *factorySuite) TestMakeModel(c *gc.C) { 518 owner := s.Factory.MakeUser(c, &factory.UserParams{ 519 Name: "owner", 520 }) 521 params := &factory.ModelParams{ 522 Name: "foo", 523 Owner: owner.UserTag(), 524 ConfigAttrs: testing.Attrs{"default-series": "precise"}, 525 } 526 527 st := s.Factory.MakeModel(c, params) 528 defer st.Close() 529 530 env, err := st.Model() 531 c.Assert(err, jc.ErrorIsNil) 532 c.Assert(env.Name(), gc.Equals, "foo") 533 c.Assert(env.UUID() == s.State.ModelUUID(), jc.IsFalse) 534 c.Assert(env.Owner(), gc.Equals, owner.UserTag()) 535 536 cfg, err := st.ModelConfig() 537 c.Assert(err, jc.ErrorIsNil) 538 c.Assert(cfg.AllAttrs()["default-series"], gc.Equals, "precise") 539 }