github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/container/lxd/lxd_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build go1.3
     5  
     6  package lxd_test
     7  
     8  import (
     9  	"runtime"
    10  	stdtesting "testing"
    11  
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/container"
    16  	"github.com/juju/juju/container/lxd"
    17  	containertesting "github.com/juju/juju/container/testing"
    18  	"github.com/juju/juju/environs/config"
    19  	"github.com/juju/juju/provider/dummy"
    20  	"github.com/juju/juju/status"
    21  	"github.com/juju/juju/tools/lxdclient"
    22  )
    23  
    24  func Test(t *stdtesting.T) {
    25  	if runtime.GOOS == "windows" {
    26  		t.Skip("LXC is not supported on windows")
    27  	}
    28  
    29  	/* if there's not a lxd available, don't run the tests */
    30  	/*
    31  		_, err := lxd.ConnectLocal("")
    32  		if err != nil {
    33  			t.Skip("LXD is not avalilable %s", err)
    34  		}
    35  	*/
    36  	gc.TestingT(t)
    37  }
    38  
    39  type LxdSuite struct{}
    40  
    41  var _ = gc.Suite(&LxdSuite{})
    42  
    43  func (t *LxdSuite) makeManager(c *gc.C, name string) container.Manager {
    44  	config := container.ManagerConfig{
    45  		container.ConfigName: name,
    46  	}
    47  
    48  	manager, err := lxd.NewContainerManager(config)
    49  	c.Assert(err, jc.ErrorIsNil)
    50  
    51  	return manager
    52  }
    53  
    54  func (t *LxdSuite) TestNotAllContainersAreDeleted(c *gc.C) {
    55  	c.Skip("Test skipped because it talks directly to LXD agent.")
    56  	lxdClient, err := lxd.ConnectLocal("")
    57  	c.Assert(err, jc.ErrorIsNil)
    58  
    59  	/* create a container to make sure isn't deleted */
    60  	instanceSpec := lxdclient.InstanceSpec{
    61  		Name:  "juju-lxd-tests",
    62  		Image: "ubuntu-xenial",
    63  	}
    64  
    65  	_, err = lxdClient.AddInstance(instanceSpec)
    66  	c.Assert(err, jc.ErrorIsNil)
    67  	defer lxdClient.RemoveInstances("", "juju-lxd-tests")
    68  
    69  	instanceConfig, err := containertesting.MockMachineConfig("1/lxd/0")
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	envConfig, err := config.New(config.NoDefaults, dummy.SampleConfig())
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	instanceConfig.Config = envConfig
    74  	storageConfig := &container.StorageConfig{}
    75  	networkConfig := container.BridgeNetworkConfig("nic42", 4321, nil)
    76  
    77  	manager := t.makeManager(c, "manager")
    78  	callback := func(settableStatus status.Status, info string, data map[string]interface{}) error { return nil }
    79  	_, _, err = manager.CreateContainer(
    80  		instanceConfig,
    81  		"xenial",
    82  		networkConfig,
    83  		storageConfig,
    84  		callback,
    85  	)
    86  	c.Assert(err, jc.ErrorIsNil)
    87  
    88  	instances, err := manager.ListContainers()
    89  	c.Assert(err, jc.ErrorIsNil)
    90  
    91  	for _, inst := range instances {
    92  		err = manager.DestroyContainer(inst.Id())
    93  		c.Assert(err, jc.ErrorIsNil)
    94  	}
    95  }
    96  
    97  func (t *LxdSuite) TestNICPropertiesWithInvalidParentDevice(c *gc.C) {
    98  	props, err := lxd.NICProperties("", "eth1", "", 0)
    99  	c.Assert(props, gc.IsNil)
   100  	c.Assert(err.Error(), gc.Equals, "invalid parent device")
   101  }
   102  
   103  func (t *LxdSuite) TestNICPropertiesWithInvalidDeviceName(c *gc.C) {
   104  	props, err := lxd.NICProperties("testbr1", "", "", 0)
   105  	c.Assert(props, gc.IsNil)
   106  	c.Assert(err.Error(), gc.Equals, "invalid device name")
   107  }
   108  
   109  func (t *LxdSuite) TestNICPropertiesWithoutMACAddressOrMTUGreaterThanZero(c *gc.C) {
   110  	props, err := lxd.NICProperties("testbr1", "eth1", "", 0)
   111  	c.Assert(err, gc.IsNil)
   112  	c.Assert(props, gc.HasLen, 3)
   113  	c.Assert(props[0], gc.Equals, "nictype=bridged")
   114  	c.Assert(props[1], gc.Equals, "parent=testbr1")
   115  	c.Assert(props[2], gc.Equals, "name=eth1")
   116  }
   117  
   118  func (t *LxdSuite) TestNICPropertiesWithMACAddressButNoMTU(c *gc.C) {
   119  	props, err := lxd.NICProperties("testbr1", "eth1", "aa:bb:cc:dd:ee:f0", 0)
   120  	c.Assert(err, gc.IsNil)
   121  	c.Assert(props, gc.HasLen, 4)
   122  	c.Assert(props[0], gc.Equals, "nictype=bridged")
   123  	c.Assert(props[1], gc.Equals, "parent=testbr1")
   124  	c.Assert(props[2], gc.Equals, "name=eth1")
   125  	c.Assert(props[3], gc.Equals, "hwaddr=aa:bb:cc:dd:ee:f0")
   126  }
   127  
   128  func (t *LxdSuite) TestNICPropertiesWithoutMACAddressButMTUGreaterThanZero(c *gc.C) {
   129  	props, err := lxd.NICProperties("testbr1", "eth1", "", 1492)
   130  	c.Assert(err, gc.IsNil)
   131  	c.Assert(props, gc.HasLen, 4)
   132  	c.Assert(props[0], gc.Equals, "nictype=bridged")
   133  	c.Assert(props[1], gc.Equals, "parent=testbr1")
   134  	c.Assert(props[2], gc.Equals, "name=eth1")
   135  	c.Assert(props[3], gc.Equals, "mtu=1492")
   136  }
   137  
   138  func (t *LxdSuite) TestNICPropertiesWithMACAddressAndMTUGreaterThanZero(c *gc.C) {
   139  	props, err := lxd.NICProperties("testbr1", "eth1", "aa:bb:cc:dd:ee:f0", 1066)
   140  	c.Assert(err, gc.IsNil)
   141  	c.Assert(props, gc.HasLen, 5)
   142  	c.Assert(props[0], gc.Equals, "nictype=bridged")
   143  	c.Assert(props[1], gc.Equals, "parent=testbr1")
   144  	c.Assert(props[2], gc.Equals, "name=eth1")
   145  	c.Assert(props[3], gc.Equals, "hwaddr=aa:bb:cc:dd:ee:f0")
   146  	c.Assert(props[4], gc.Equals, "mtu=1066")
   147  }