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  }