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