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 }