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  }