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