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 }