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  }