github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/image/v2/imagedata/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "fmt" 6 "io" 7 "testing" 8 9 "github.com/vnpaycloud-console/gophercloud/v2/openstack/image/v2/imagedata" 10 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 11 fakeclient "github.com/vnpaycloud-console/gophercloud/v2/testhelper/client" 12 ) 13 14 func TestUpload(t *testing.T) { 15 th.SetupHTTP() 16 defer th.TeardownHTTP() 17 18 HandlePutImageDataSuccessfully(t) 19 20 err := imagedata.Upload( 21 context.TODO(), 22 fakeclient.ServiceClient(), 23 "da3b75d9-3f4a-40e7-8a2c-bfab23927dea", 24 readSeekerOfBytes([]byte{5, 3, 7, 24})).ExtractErr() 25 26 th.AssertNoErr(t, err) 27 } 28 29 func TestStage(t *testing.T) { 30 th.SetupHTTP() 31 defer th.TeardownHTTP() 32 33 HandleStageImageDataSuccessfully(t) 34 35 err := imagedata.Stage( 36 context.TODO(), 37 fakeclient.ServiceClient(), 38 "da3b75d9-3f4a-40e7-8a2c-bfab23927dea", 39 readSeekerOfBytes([]byte{5, 3, 7, 24})).ExtractErr() 40 41 th.AssertNoErr(t, err) 42 } 43 44 func readSeekerOfBytes(bs []byte) io.ReadSeeker { 45 return &RS{bs: bs} 46 } 47 48 // implements io.ReadSeeker 49 type RS struct { 50 bs []byte 51 offset int 52 } 53 54 func (rs *RS) Read(p []byte) (int, error) { 55 leftToRead := len(rs.bs) - rs.offset 56 57 if 0 < leftToRead { 58 bytesToWrite := min(leftToRead, len(p)) 59 for i := 0; i < bytesToWrite; i++ { 60 p[i] = rs.bs[rs.offset] 61 rs.offset++ 62 } 63 return bytesToWrite, nil 64 } 65 return 0, io.EOF 66 } 67 68 func min(a int, b int) int { 69 if a < b { 70 return a 71 } 72 return b 73 } 74 75 func (rs *RS) Seek(offset int64, whence int) (int64, error) { 76 var offsetInt = int(offset) 77 if whence == 0 { 78 rs.offset = offsetInt 79 } else if whence == 1 { 80 rs.offset = rs.offset + offsetInt 81 } else if whence == 2 { 82 rs.offset = len(rs.bs) - offsetInt 83 } else { 84 return 0, fmt.Errorf("For parameter `whence`, expected value in {0,1,2} but got: %#v", whence) 85 } 86 87 return int64(rs.offset), nil 88 } 89 90 func TestDownload(t *testing.T) { 91 th.SetupHTTP() 92 defer th.TeardownHTTP() 93 94 HandleGetImageDataSuccessfully(t) 95 96 rdr, err := imagedata.Download(context.TODO(), fakeclient.ServiceClient(), "da3b75d9-3f4a-40e7-8a2c-bfab23927dea").Extract() 97 th.AssertNoErr(t, err) 98 99 defer rdr.Close() 100 101 bs, err := io.ReadAll(rdr) 102 th.AssertNoErr(t, err) 103 104 th.AssertByteArrayEquals(t, []byte{34, 87, 0, 23, 23, 23, 56, 255, 254, 0}, bs) 105 }