github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/provider/dummy/environs_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package dummy_test 5 6 import ( 7 stdtesting "testing" 8 "time" 9 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/environs" 13 "github.com/juju/juju/environs/bootstrap" 14 "github.com/juju/juju/environs/config" 15 "github.com/juju/juju/environs/jujutest" 16 "github.com/juju/juju/environs/network" 17 envtesting "github.com/juju/juju/environs/testing" 18 "github.com/juju/juju/instance" 19 jujutesting "github.com/juju/juju/juju/testing" 20 "github.com/juju/juju/provider/dummy" 21 "github.com/juju/juju/testing" 22 ) 23 24 func TestPackage(t *stdtesting.T) { 25 testing.MgoTestPackage(t) 26 } 27 28 func init() { 29 gc.Suite(&liveSuite{ 30 LiveTests: jujutest.LiveTests{ 31 TestConfig: dummy.SampleConfig(), 32 CanOpenState: true, 33 HasProvisioner: false, 34 }, 35 }) 36 gc.Suite(&suite{ 37 Tests: jujutest.Tests{ 38 TestConfig: dummy.SampleConfig(), 39 }, 40 }) 41 } 42 43 type liveSuite struct { 44 testing.BaseSuite 45 jujutest.LiveTests 46 } 47 48 func (s *liveSuite) SetUpSuite(c *gc.C) { 49 s.BaseSuite.SetUpSuite(c) 50 s.LiveTests.SetUpSuite(c) 51 } 52 53 func (s *liveSuite) TearDownSuite(c *gc.C) { 54 s.LiveTests.TearDownSuite(c) 55 s.BaseSuite.TearDownSuite(c) 56 } 57 58 func (s *liveSuite) SetUpTest(c *gc.C) { 59 s.BaseSuite.SetUpTest(c) 60 s.LiveTests.SetUpTest(c) 61 } 62 63 func (s *liveSuite) TearDownTest(c *gc.C) { 64 s.LiveTests.TearDownTest(c) 65 s.BaseSuite.TearDownTest(c) 66 } 67 68 type suite struct { 69 testing.BaseSuite 70 jujutest.Tests 71 } 72 73 func (s *suite) SetUpTest(c *gc.C) { 74 s.BaseSuite.SetUpTest(c) 75 s.Tests.SetUpTest(c) 76 } 77 78 func (s *suite) TearDownTest(c *gc.C) { 79 s.Tests.TearDownTest(c) 80 dummy.Reset() 81 s.BaseSuite.TearDownTest(c) 82 } 83 84 func (s *suite) TestAllocateAddress(c *gc.C) { 85 cfg, err := config.New(config.NoDefaults, s.TestConfig) 86 c.Assert(err, gc.IsNil) 87 e, err := environs.Prepare(cfg, testing.Context(c), s.ConfigStore) 88 c.Assert(err, gc.IsNil, gc.Commentf("preparing environ %#v", s.TestConfig)) 89 c.Assert(e, gc.NotNil) 90 91 envtesting.UploadFakeTools(c, e.Storage()) 92 err = bootstrap.EnsureNotBootstrapped(e) 93 c.Assert(err, gc.IsNil) 94 err = bootstrap.Bootstrap(testing.Context(c), e, environs.BootstrapParams{}) 95 c.Assert(err, gc.IsNil) 96 97 inst, _ := jujutesting.AssertStartInstance(c, e, "0") 98 c.Assert(inst, gc.NotNil) 99 netId := network.Id("net1") 100 101 opc := make(chan dummy.Operation, 200) 102 dummy.Listen(opc) 103 104 expectAddress := instance.NewAddress("0.1.2.1", instance.NetworkCloudLocal) 105 address, err := e.AllocateAddress(inst.Id(), netId) 106 c.Assert(err, gc.IsNil) 107 c.Assert(address, gc.DeepEquals, expectAddress) 108 109 assertAllocateAddress(c, e, opc, inst.Id(), netId, expectAddress) 110 111 expectAddress = instance.NewAddress("0.1.2.2", instance.NetworkCloudLocal) 112 address, err = e.AllocateAddress(inst.Id(), netId) 113 c.Assert(err, gc.IsNil) 114 c.Assert(address, gc.DeepEquals, expectAddress) 115 assertAllocateAddress(c, e, opc, inst.Id(), netId, expectAddress) 116 } 117 118 func assertAllocateAddress(c *gc.C, e environs.Environ, opc chan dummy.Operation, expectInstId instance.Id, expectNetId network.Id, expectAddress instance.Address) { 119 select { 120 case op := <-opc: 121 addrOp, ok := op.(dummy.OpAllocateAddress) 122 if !ok { 123 c.Fatalf("unexpected op: %#v", op) 124 } 125 c.Check(addrOp.NetworkId, gc.Equals, expectNetId) 126 c.Check(addrOp.InstanceId, gc.Equals, expectInstId) 127 c.Check(addrOp.Address, gc.Equals, expectAddress) 128 return 129 case <-time.After(testing.ShortWait): 130 c.Fatalf("time out wating for operation") 131 } 132 }