github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/container/lxd/storage_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lxd_test 5 6 import ( 7 "github.com/golang/mock/gomock" 8 jc "github.com/juju/testing/checkers" 9 lxdapi "github.com/lxc/lxd/shared/api" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/container/lxd" 13 lxdtesting "github.com/juju/juju/container/lxd/testing" 14 ) 15 16 type storageSuite struct { 17 lxdtesting.BaseSuite 18 } 19 20 var _ = gc.Suite(&storageSuite{}) 21 22 func defaultProfileWithDisk() *lxdapi.Profile { 23 return &lxdapi.Profile{ 24 Name: "default", 25 ProfilePut: lxdapi.ProfilePut{ 26 Devices: map[string]map[string]string{ 27 "root": { 28 "type": "disk", 29 "path": "/", 30 "pool": "default", 31 }, 32 }, 33 }, 34 } 35 } 36 37 func (s *storageSuite) TestStorageIsSupported(c *gc.C) { 38 ctrl := gomock.NewController(c) 39 defer ctrl.Finish() 40 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 41 42 jujuSvr, err := lxd.NewServer(cSvr) 43 c.Assert(err, jc.ErrorIsNil) 44 45 c.Check(jujuSvr.StorageSupported(), jc.IsTrue) 46 } 47 48 func (s *storageSuite) TestStorageNotSupported(c *gc.C) { 49 ctrl := gomock.NewController(c) 50 defer ctrl.Finish() 51 cSvr := s.NewMockServerWithExtensions(ctrl, "network") 52 53 jujuSvr, err := lxd.NewServer(cSvr) 54 c.Assert(err, jc.ErrorIsNil) 55 56 c.Check(jujuSvr.StorageSupported(), jc.IsFalse) 57 } 58 59 func (s *storageSuite) TestCreatePool(c *gc.C) { 60 ctrl := gomock.NewController(c) 61 defer ctrl.Finish() 62 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 63 64 cfg := map[string]string{"size": "1024MB"} 65 66 req := lxdapi.StoragePoolsPost{ 67 Name: "new-pool", 68 Driver: "dir", 69 StoragePoolPut: lxdapi.StoragePoolPut{ 70 Config: cfg, 71 }, 72 } 73 cSvr.EXPECT().CreateStoragePool(req).Return(nil) 74 75 jujuSvr, err := lxd.NewServer(cSvr) 76 c.Assert(err, jc.ErrorIsNil) 77 78 err = jujuSvr.CreatePool("new-pool", "dir", cfg) 79 c.Assert(err, jc.ErrorIsNil) 80 } 81 82 func (s *storageSuite) TestCreateVolume(c *gc.C) { 83 ctrl := gomock.NewController(c) 84 defer ctrl.Finish() 85 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 86 87 cfg := map[string]string{"size": "1024MB"} 88 89 req := lxdapi.StorageVolumesPost{ 90 Name: "volume", 91 Type: "custom", 92 StorageVolumePut: lxdapi.StorageVolumePut{ 93 Config: cfg, 94 }, 95 } 96 cSvr.EXPECT().CreateStoragePoolVolume("default-pool", req).Return(nil) 97 98 jujuSvr, err := lxd.NewServer(cSvr) 99 c.Assert(err, jc.ErrorIsNil) 100 101 err = jujuSvr.CreateVolume("default-pool", "volume", cfg) 102 c.Assert(err, jc.ErrorIsNil) 103 } 104 105 func (s *storageSuite) TestEnsureDefaultStorageDevicePresent(c *gc.C) { 106 ctrl := gomock.NewController(c) 107 defer ctrl.Finish() 108 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 109 110 jujuSvr, err := lxd.NewServer(cSvr) 111 c.Assert(err, jc.ErrorIsNil) 112 113 c.Assert(jujuSvr.EnsureDefaultStorage(defaultProfileWithDisk(), ""), jc.ErrorIsNil) 114 } 115 116 func (s *storageSuite) TestEnsureDefaultStoragePoolExistsDeviceCreated(c *gc.C) { 117 ctrl := gomock.NewController(c) 118 defer ctrl.Finish() 119 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 120 121 profile := defaultProfileWithDisk() 122 gomock.InOrder( 123 cSvr.EXPECT().GetStoragePoolNames().Return([]string{"default"}, nil), 124 cSvr.EXPECT().UpdateProfile("default", profile.Writable(), lxdtesting.ETag).Return(nil), 125 ) 126 127 jujuSvr, err := lxd.NewServer(cSvr) 128 c.Assert(err, jc.ErrorIsNil) 129 130 profile.Devices = nil 131 c.Assert(jujuSvr.EnsureDefaultStorage(profile, lxdtesting.ETag), jc.ErrorIsNil) 132 } 133 134 func (s *storageSuite) TestEnsureDefaultStorageNonDefaultPoolExistsDeviceCreated(c *gc.C) { 135 ctrl := gomock.NewController(c) 136 defer ctrl.Finish() 137 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 138 139 profile := defaultProfileWithDisk() 140 profile.Devices["root"]["pool"] = "custom" 141 gomock.InOrder( 142 cSvr.EXPECT().GetStoragePoolNames().Return([]string{"custom"}, nil), 143 cSvr.EXPECT().UpdateProfile("default", profile.Writable(), lxdtesting.ETag).Return(nil), 144 ) 145 146 jujuSvr, err := lxd.NewServer(cSvr) 147 c.Assert(err, jc.ErrorIsNil) 148 149 profile.Devices = nil 150 c.Assert(jujuSvr.EnsureDefaultStorage(profile, lxdtesting.ETag), jc.ErrorIsNil) 151 } 152 153 func (s *storageSuite) TestEnsureDefaultStoragePoolAndDeviceCreated(c *gc.C) { 154 ctrl := gomock.NewController(c) 155 defer ctrl.Finish() 156 cSvr := s.NewMockServerWithExtensions(ctrl, "storage") 157 158 profile := defaultProfileWithDisk() 159 req := lxdapi.StoragePoolsPost{ 160 Name: "default", 161 Driver: "dir", 162 } 163 gomock.InOrder( 164 cSvr.EXPECT().GetStoragePoolNames().Return(nil, nil), 165 cSvr.EXPECT().CreateStoragePool(req).Return(nil), 166 cSvr.EXPECT().UpdateProfile("default", profile.Writable(), lxdtesting.ETag).Return(nil), 167 ) 168 169 jujuSvr, err := lxd.NewServer(cSvr) 170 c.Assert(err, jc.ErrorIsNil) 171 172 profile.Devices = nil 173 c.Assert(jujuSvr.EnsureDefaultStorage(profile, lxdtesting.ETag), jc.ErrorIsNil) 174 }