github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/gce/google/conn_disks_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package google_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	"google.golang.org/api/compute/v1"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/provider/gce/google"
    12  )
    13  
    14  const fakeVolName = "home-zone--c930380d-8337-4bf5-b07a-9dbb5ae771e4"
    15  
    16  func fakeDiskAndSpec() (google.DiskSpec, *compute.Disk, error) {
    17  	spec := google.DiskSpec{
    18  		Series:             "trusty",
    19  		SizeHintGB:         1,
    20  		Name:               fakeVolName,
    21  		PersistentDiskType: google.DiskPersistentSSD,
    22  	}
    23  	fakeDisk, err := google.NewDetached(spec)
    24  	return spec, fakeDisk, err
    25  }
    26  
    27  func (s *connSuite) TestConnectionCreateDisks(c *gc.C) {
    28  	spec, _, err := fakeDiskAndSpec()
    29  	c.Check(err, jc.ErrorIsNil)
    30  
    31  	disks, err := s.Conn.CreateDisks("home-zone", []google.DiskSpec{spec})
    32  	c.Check(err, jc.ErrorIsNil)
    33  	c.Assert(disks, gc.HasLen, 1)
    34  	c.Assert(disks[0].Name, gc.Equals, fakeVolName)
    35  
    36  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
    37  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "CreateDisk")
    38  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
    39  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
    40  	c.Check(s.FakeConn.Calls[0].ComputeDisk.Name, gc.Equals, fakeVolName)
    41  }
    42  
    43  func (s *connSuite) TestConnectionDisks(c *gc.C) {
    44  	_, fakeDisk, err := fakeDiskAndSpec()
    45  	c.Check(err, jc.ErrorIsNil)
    46  	s.FakeConn.Disks = []*compute.Disk{fakeDisk}
    47  
    48  	disks, err := s.Conn.Disks()
    49  	c.Check(err, jc.ErrorIsNil)
    50  	c.Assert(disks, gc.HasLen, 1)
    51  	fakeGoogleDisk := google.NewDisk(fakeDisk)
    52  	c.Assert(disks[0], gc.DeepEquals, fakeGoogleDisk)
    53  
    54  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
    55  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "ListDisks")
    56  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
    57  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "")
    58  }
    59  
    60  func (s *connSuite) TestConnectionDisk(c *gc.C) {
    61  	_, fakeDisk, err := fakeDiskAndSpec()
    62  	c.Check(err, jc.ErrorIsNil)
    63  	s.FakeConn.Disk = fakeDisk
    64  	s.FakeConn.Disk.Zone = "https://www.googleapis.com/compute/v1/projects/my-project/zones/home-zone"
    65  
    66  	disk, err := s.Conn.Disk("home-zone", fakeVolName)
    67  	c.Check(err, jc.ErrorIsNil)
    68  	fakeGoogleDisk := google.NewDisk(fakeDisk)
    69  	c.Assert(disk, gc.DeepEquals, fakeGoogleDisk)
    70  	c.Assert(disk.Zone, gc.Equals, "home-zone")
    71  
    72  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
    73  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetDisk")
    74  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
    75  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
    76  }
    77  
    78  func (s *connSuite) TestConnectionSetDiskLabels(c *gc.C) {
    79  	_, fakeDisk, err := fakeDiskAndSpec()
    80  	c.Check(err, jc.ErrorIsNil)
    81  	s.FakeConn.Disk = fakeDisk
    82  	labels := map[string]string{
    83  		"a": "b",
    84  		"c": "d",
    85  	}
    86  	err = s.Conn.SetDiskLabels("home-zone", fakeVolName, "fingerprint", labels)
    87  	c.Check(err, jc.ErrorIsNil)
    88  
    89  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
    90  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "SetDiskLabels")
    91  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
    92  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
    93  	c.Check(s.FakeConn.Calls[0].LabelFingerprint, gc.Equals, "fingerprint")
    94  	c.Check(s.FakeConn.Calls[0].Labels, jc.DeepEquals, labels)
    95  }
    96  
    97  func (s *connSuite) TestConnectionAttachDisk(c *gc.C) {
    98  	_, fakeDisk, err := fakeDiskAndSpec()
    99  	c.Check(err, jc.ErrorIsNil)
   100  	s.FakeConn.Disk = fakeDisk
   101  	att, err := s.Conn.AttachDisk("home-zone", fakeVolName, "a-fake-instance", google.ModeRW)
   102  	c.Check(err, jc.ErrorIsNil)
   103  
   104  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
   105  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetDisk")
   106  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
   107  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
   108  
   109  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "AttachDisk")
   110  	c.Check(s.FakeConn.Calls[1].ProjectID, gc.Equals, "spam")
   111  	c.Check(s.FakeConn.Calls[1].ZoneName, gc.Equals, "home-zone")
   112  	c.Check(s.FakeConn.Calls[1].InstanceId, gc.Equals, "a-fake-instance")
   113  	c.Check(s.FakeConn.Calls[1].AttachedDisk.DeviceName, gc.Equals, att.DeviceName)
   114  	c.Check(s.FakeConn.Calls[1].AttachedDisk.Mode, gc.Equals, string(att.Mode))
   115  
   116  }
   117  
   118  func (s *connSuite) TestConnectionDetachDisk(c *gc.C) {
   119  	_, fakeDisk, err := fakeDiskAndSpec()
   120  	c.Check(err, jc.ErrorIsNil)
   121  	s.FakeConn.Disk = fakeDisk
   122  	err = s.Conn.DetachDisk("home-zone", "a-fake-instance", fakeVolName)
   123  	c.Check(err, jc.ErrorIsNil)
   124  
   125  	c.Check(s.FakeConn.Calls, gc.HasLen, 2)
   126  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "GetDisk")
   127  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
   128  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
   129  
   130  	c.Check(s.FakeConn.Calls[1].FuncName, gc.Equals, "DetachDisk")
   131  	c.Check(s.FakeConn.Calls[1].ProjectID, gc.Equals, "spam")
   132  	c.Check(s.FakeConn.Calls[1].ZoneName, gc.Equals, "home-zone")
   133  	c.Check(s.FakeConn.Calls[1].InstanceId, gc.Equals, "a-fake-instance")
   134  	c.Check(s.FakeConn.Calls[1].DeviceName, gc.Equals, "home-zone-0")
   135  }
   136  
   137  func (s *connSuite) TestConnectionRemoveDisks(c *gc.C) {
   138  	err := s.Conn.RemoveDisk("home-zone", fakeVolName)
   139  	c.Check(err, jc.ErrorIsNil)
   140  
   141  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
   142  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "RemoveDisk")
   143  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
   144  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
   145  	c.Check(s.FakeConn.Calls[0].ID, gc.Equals, fakeVolName)
   146  }
   147  
   148  func (s *connSuite) TestConnectionInstanceDisks(c *gc.C) {
   149  	s.FakeConn.AttachedDisks = []*compute.AttachedDisk{{
   150  		Source:     "https://bogus/url/project/aproject/zone/azone/disk/" + fakeVolName,
   151  		DeviceName: "home-zone-0",
   152  		Mode:       string(google.ModeRW),
   153  	}}
   154  	disks, err := s.Conn.InstanceDisks("home-zone", "a-fake-instance")
   155  	c.Check(err, jc.ErrorIsNil)
   156  	c.Assert(disks, gc.HasLen, 1)
   157  	c.Assert(disks[0].VolumeName, gc.Equals, fakeVolName)
   158  	c.Assert(disks[0].DeviceName, gc.Equals, "home-zone-0")
   159  	c.Assert(disks[0].Mode, gc.Equals, google.ModeRW)
   160  
   161  	c.Check(s.FakeConn.Calls, gc.HasLen, 1)
   162  	c.Check(s.FakeConn.Calls[0].FuncName, gc.Equals, "InstanceDisks")
   163  	c.Check(s.FakeConn.Calls[0].ProjectID, gc.Equals, "spam")
   164  	c.Check(s.FakeConn.Calls[0].ZoneName, gc.Equals, "home-zone")
   165  	c.Check(s.FakeConn.Calls[0].InstanceId, gc.Equals, "a-fake-instance")
   166  }