github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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" 16 "gopkg.in/juju/names.v2" 17 18 "github.com/juju/juju/core/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 } 31 32 var _ = gc.Suite(&factorySuite{}) 33 34 func (s *factorySuite) SetUpTest(c *gc.C) { 35 s.NewPolicy = func(*state.State) state.Policy { 36 return &statetesting.MockPolicy{ 37 GetStorageProviderRegistry: func() (storage.ProviderRegistry, error) { 38 return provider.CommonStorageProviders(), nil 39 }, 40 } 41 } 42 s.StateSuite.SetUpTest(c) 43 } 44 45 func (s *factorySuite) TestMakeUserNil(c *gc.C) { 46 user := s.Factory.MakeUser(c, nil) 47 c.Assert(user.IsDisabled(), jc.IsFalse) 48 49 saved, err := s.State.User(user.UserTag()) 50 c.Assert(err, jc.ErrorIsNil) 51 c.Assert(saved.Tag(), gc.Equals, user.Tag()) 52 c.Assert(saved.Name(), gc.Equals, user.Name()) 53 c.Assert(saved.DisplayName(), gc.Equals, user.DisplayName()) 54 c.Assert(saved.CreatedBy(), gc.Equals, user.CreatedBy()) 55 c.Assert(saved.DateCreated(), gc.Equals, user.DateCreated()) 56 c.Assert(saved.IsDisabled(), gc.Equals, user.IsDisabled()) 57 58 savedLastLogin, err := saved.LastLogin() 59 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 60 lastLogin, err := user.LastLogin() 61 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 62 c.Assert(savedLastLogin, gc.Equals, lastLogin) 63 } 64 65 func (s *factorySuite) TestMakeUserParams(c *gc.C) { 66 username := "bob" 67 displayName := "Bob the Builder" 68 creator := s.Factory.MakeUser(c, nil) 69 password := "sekrit" 70 user := s.Factory.MakeUser(c, &factory.UserParams{ 71 Name: username, 72 DisplayName: displayName, 73 Creator: creator.Tag(), 74 Password: password, 75 }) 76 c.Assert(user.IsDisabled(), jc.IsFalse) 77 c.Assert(user.Name(), gc.Equals, username) 78 c.Assert(user.DisplayName(), gc.Equals, displayName) 79 c.Assert(user.CreatedBy(), gc.Equals, creator.UserTag().Name()) 80 c.Assert(user.PasswordValid(password), jc.IsTrue) 81 82 saved, err := s.State.User(user.UserTag()) 83 c.Assert(err, jc.ErrorIsNil) 84 c.Assert(saved.Tag(), gc.Equals, user.Tag()) 85 c.Assert(saved.Name(), gc.Equals, user.Name()) 86 c.Assert(saved.DisplayName(), gc.Equals, user.DisplayName()) 87 c.Assert(saved.CreatedBy(), gc.Equals, user.CreatedBy()) 88 c.Assert(saved.DateCreated(), gc.Equals, user.DateCreated()) 89 c.Assert(saved.IsDisabled(), gc.Equals, user.IsDisabled()) 90 91 savedLastLogin, err := saved.LastLogin() 92 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 93 lastLogin, err := user.LastLogin() 94 c.Assert(err, jc.Satisfies, state.IsNeverLoggedInError) 95 c.Assert(savedLastLogin, gc.Equals, lastLogin) 96 97 _, err = s.State.UserAccess(user.UserTag(), s.Model.ModelTag()) 98 c.Assert(err, jc.ErrorIsNil) 99 } 100 101 func (s *factorySuite) TestMakeUserInvalidCreator(c *gc.C) { 102 invalidFunc := func() { 103 s.Factory.MakeUser(c, &factory.UserParams{ 104 Name: "bob", 105 DisplayName: "Bob", 106 Creator: names.NewMachineTag("0"), 107 Password: "bob", 108 }) 109 } 110 111 c.Assert(invalidFunc, gc.PanicMatches, `interface conversion: .*`) 112 saved, err := s.State.User(names.NewUserTag("bob")) 113 c.Assert(err, jc.Satisfies, errors.IsNotFound) 114 c.Assert(saved, gc.IsNil) 115 } 116 117 func (s *factorySuite) TestMakeUserNoModelUser(c *gc.C) { 118 username := "bob" 119 displayName := "Bob the Builder" 120 creator := names.NewLocalUserTag("eric") 121 password := "sekrit" 122 user := s.Factory.MakeUser(c, &factory.UserParams{ 123 Name: username, 124 DisplayName: displayName, 125 Creator: creator, 126 Password: password, 127 NoModelUser: true, 128 }) 129 130 _, err := s.State.User(user.UserTag()) 131 c.Assert(err, jc.ErrorIsNil) 132 _, err = s.State.UserAccess(user.UserTag(), s.Model.ModelTag()) 133 c.Assert(err, jc.Satisfies, errors.IsNotFound) 134 } 135 136 func (s *factorySuite) TestMakeModelUserNil(c *gc.C) { 137 modelUser := s.Factory.MakeModelUser(c, nil) 138 saved, err := s.State.UserAccess(modelUser.UserTag, modelUser.Object) 139 c.Assert(err, jc.ErrorIsNil) 140 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 141 c.Assert(saved.UserName, gc.Equals, modelUser.UserName) 142 c.Assert(saved.DisplayName, gc.Equals, modelUser.DisplayName) 143 c.Assert(saved.CreatedBy, gc.Equals, modelUser.CreatedBy) 144 } 145 146 func (s *factorySuite) TestMakeModelUserPartialParams(c *gc.C) { 147 s.Factory.MakeUser(c, &factory.UserParams{Name: "foobar123", NoModelUser: true}) 148 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 149 User: "foobar123"}) 150 151 saved, err := s.State.UserAccess(modelUser.UserTag, modelUser.Object) 152 c.Assert(err, jc.ErrorIsNil) 153 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 154 c.Assert(saved.UserName, gc.Equals, "foobar123") 155 c.Assert(saved.DisplayName, gc.Equals, modelUser.DisplayName) 156 c.Assert(saved.CreatedBy, gc.Equals, modelUser.CreatedBy) 157 } 158 159 func (s *factorySuite) TestMakeModelUserParams(c *gc.C) { 160 s.Factory.MakeUser(c, &factory.UserParams{Name: "createdby"}) 161 s.Factory.MakeUser(c, &factory.UserParams{ 162 Name: "foobar", 163 Creator: names.NewUserTag("createdby"), 164 NoModelUser: true, 165 }) 166 167 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 168 User: "foobar", 169 CreatedBy: names.NewUserTag("createdby"), 170 DisplayName: "Foo Bar", 171 }) 172 173 saved, err := s.State.UserAccess(modelUser.UserTag, s.Model.ModelTag()) 174 c.Assert(err, jc.ErrorIsNil) 175 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 176 c.Assert(saved.UserName, gc.Equals, "foobar") 177 c.Assert(saved.CreatedBy.Id(), gc.Equals, "createdby") 178 c.Assert(saved.DisplayName, gc.Equals, "Foo Bar") 179 } 180 181 func (s *factorySuite) TestMakeModelUserInvalidCreatedBy(c *gc.C) { 182 invalidFunc := func() { 183 s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 184 User: "bob", 185 CreatedBy: names.NewMachineTag("0"), 186 }) 187 } 188 189 c.Assert(invalidFunc, gc.PanicMatches, `interface conversion: .*`) 190 saved, err := s.State.UserAccess(names.NewLocalUserTag("bob"), s.Model.ModelTag()) 191 c.Assert(err, jc.Satisfies, errors.IsNotFound) 192 c.Assert(saved, gc.DeepEquals, permission.UserAccess{}) 193 } 194 195 func (s *factorySuite) TestMakeModelUserNonLocalUser(c *gc.C) { 196 creator := s.Factory.MakeUser(c, &factory.UserParams{Name: "created-by"}) 197 modelUser := s.Factory.MakeModelUser(c, &factory.ModelUserParams{ 198 User: "foobar@ubuntuone", 199 DisplayName: "Foo Bar", 200 CreatedBy: creator.UserTag(), 201 }) 202 203 saved, err := s.State.UserAccess(modelUser.UserTag, s.Model.ModelTag()) 204 c.Assert(err, jc.ErrorIsNil) 205 c.Assert(saved.Object.Id(), gc.Equals, modelUser.Object.Id()) 206 c.Assert(saved.UserName, gc.Equals, "foobar@ubuntuone") 207 c.Assert(saved.DisplayName, gc.Equals, "Foo Bar") 208 c.Assert(saved.CreatedBy.Id(), gc.Equals, creator.UserTag().Id()) 209 } 210 211 func (s *factorySuite) TestMakeMachineNil(c *gc.C) { 212 machine, password := s.Factory.MakeMachineReturningPassword(c, nil) 213 c.Assert(machine, gc.NotNil) 214 215 saved, err := s.State.Machine(machine.Id()) 216 c.Assert(err, jc.ErrorIsNil) 217 218 c.Assert(saved.Series(), gc.Equals, machine.Series()) 219 c.Assert(saved.Id(), gc.Equals, machine.Id()) 220 c.Assert(saved.Series(), gc.Equals, machine.Series()) 221 c.Assert(saved.Tag(), gc.Equals, machine.Tag()) 222 c.Assert(saved.Life(), gc.Equals, machine.Life()) 223 c.Assert(saved.Jobs(), gc.DeepEquals, machine.Jobs()) 224 c.Assert(saved.PasswordValid(password), jc.IsTrue) 225 savedInstanceId, err := saved.InstanceId() 226 c.Assert(err, jc.ErrorIsNil) 227 machineInstanceId, err := machine.InstanceId() 228 c.Assert(err, jc.ErrorIsNil) 229 c.Assert(savedInstanceId, gc.Equals, machineInstanceId) 230 c.Assert(saved.Clean(), gc.Equals, machine.Clean()) 231 } 232 233 func (s *factorySuite) TestMakeMachine(c *gc.C) { 234 series := "quantal" 235 jobs := []state.MachineJob{state.JobManageModel} 236 password, err := utils.RandomPassword() 237 c.Assert(err, jc.ErrorIsNil) 238 nonce := "some-nonce" 239 id := instance.Id("some-id") 240 volumes := []state.HostVolumeParams{{Volume: state.VolumeParams{Size: 1024}}} 241 filesystems := []state.HostFilesystemParams{{ 242 Filesystem: state.FilesystemParams{Pool: "loop", Size: 2048}, 243 }} 244 245 machine, pwd := s.Factory.MakeMachineReturningPassword(c, &factory.MachineParams{ 246 Series: series, 247 Jobs: jobs, 248 Password: password, 249 Nonce: nonce, 250 InstanceId: id, 251 Volumes: volumes, 252 Filesystems: filesystems, 253 }) 254 c.Assert(machine, gc.NotNil) 255 c.Assert(pwd, gc.Equals, password) 256 257 c.Assert(machine.Series(), gc.Equals, series) 258 c.Assert(machine.Jobs(), gc.DeepEquals, jobs) 259 machineInstanceId, err := machine.InstanceId() 260 c.Assert(err, jc.ErrorIsNil) 261 c.Assert(machineInstanceId, gc.Equals, id) 262 c.Assert(machine.CheckProvisioned(nonce), jc.IsTrue) 263 c.Assert(machine.PasswordValid(password), jc.IsTrue) 264 265 sb, err := state.NewStorageBackend(s.State) 266 c.Assert(err, jc.ErrorIsNil) 267 assertVolume := func(name string, size uint64) { 268 volume, err := sb.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 := sb.VolumeAttachments(volume.VolumeTag()) 274 c.Assert(err, jc.ErrorIsNil) 275 c.Assert(volAttachments, gc.HasLen, 1) 276 c.Assert(volAttachments[0].Host(), gc.Equals, machine.Tag()) 277 } 278 assertVolume(machine.Id()+"/0", 2048) // backing the filesystem 279 assertVolume(machine.Id()+"/1", 1024) 280 281 filesystem, err := sb.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 := sb.MachineFilesystemAttachments(machine.Tag().(names.MachineTag)) 287 c.Assert(err, jc.ErrorIsNil) 288 c.Assert(fsAttachments, gc.HasLen, 1) 289 c.Assert(fsAttachments[0].Host(), 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{{Key: "pings", Value: "1", Time: 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(`^testmodel-\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 m, err := st.Model() 513 c.Assert(err, jc.ErrorIsNil) 514 515 cfg, err := m.ModelConfig() 516 c.Assert(err, jc.ErrorIsNil) 517 c.Assert(cfg.AllAttrs()["default-series"], gc.Equals, "bionic") 518 } 519 520 func (s *factorySuite) TestMakeModel(c *gc.C) { 521 owner := s.Factory.MakeUser(c, &factory.UserParams{ 522 Name: "owner", 523 }) 524 params := &factory.ModelParams{ 525 Name: "foo", 526 Owner: owner.UserTag(), 527 ConfigAttrs: testing.Attrs{"default-series": "precise"}, 528 } 529 530 st := s.Factory.MakeModel(c, params) 531 defer st.Close() 532 533 env, err := st.Model() 534 c.Assert(err, jc.ErrorIsNil) 535 c.Assert(env.Name(), gc.Equals, "foo") 536 c.Assert(env.UUID() == s.State.ModelUUID(), jc.IsFalse) 537 c.Assert(env.Owner(), gc.Equals, owner.UserTag()) 538 539 m, err := st.Model() 540 c.Assert(err, jc.ErrorIsNil) 541 cfg, err := m.ModelConfig() 542 c.Assert(err, jc.ErrorIsNil) 543 c.Assert(cfg.AllAttrs()["default-series"], gc.Equals, "precise") 544 }