-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy paths3_test.go
145 lines (120 loc) · 2.71 KB
/
s3_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
package s3
import (
"context"
"io"
"os"
"strings"
"testing"
)
var (
testKey = os.Getenv("S3_KEY")
testSecret = os.Getenv("S3_SECRET")
s *S3
)
func TestNew(t *testing.T) {
var (
err error
)
if s, err = testInit(); err != nil {
t.Fatal(err)
}
defer testClose(t, s)
}
func TestS3_Export(t *testing.T) {
var (
err error
)
defer testClose(t, s)
s.createBucket()
var gotKey string
if gotKey, err = s.Export(
context.Background(),
"testing",
"ay_0.txt",
strings.NewReader("ayyyy 0!"),
); err != nil {
t.Fatal(err)
}
if gotKey != "ay_0.txt" {
t.Fatalf("invalid newFilename, expected = <%v> and received = <%v>", "ay_0.txt", gotKey)
}
}
func TestExportImport(t *testing.T) {
var (
err error
)
defer testClose(t, s)
s.createBucket()
type testcase struct {
prefix string
key string
value string
}
tcs := []testcase{
{
prefix: "testingExportImport",
key: "helloWorld_0",
value: "0_value",
},
{
prefix: "testingExportImport",
key: "helloWorld_1",
value: "1_value",
},
{
prefix: "testingExportImport",
key: "helloWorld_2",
value: "2_value",
},
}
if err = os.MkdirAll("./test_data/import", 0744); err != nil {
t.Fatal(err)
}
defer os.RemoveAll("./test_data")
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Populate
for _, tc := range tcs {
var gotKey string
if gotKey, err = s.Export(context.Background(), tc.prefix, tc.key, strings.NewReader(tc.value)); err != nil {
t.Fatal(err)
}
if gotKey != tc.key {
t.Fatalf("invalid newFilename, expected = <%v> and received = <%v>", tc.key, gotKey)
}
}
var nextKey string
for i, tc := range tcs {
if nextKey, err = s.GetNext(ctx, tc.prefix, nextKey); err != nil {
t.Fatalf("error during GetNext #%d: %v", i, err)
}
if nextKey != tc.key {
t.Fatalf("invalid filename, expected <%s> and received <%s>", tc.key, nextKey)
}
}
if _, err = s.GetNext(ctx, "", nextKey); err != io.EOF {
t.Fatalf("invalid error, expected <%v> and received <%v>", io.EOF, err)
}
var nextList []string
if nextList, err = s.GetNextList(ctx, tcs[0].prefix, tcs[0].key, int64(len(tcs))); err != nil {
t.Fatalf("error during GetNextList #%v: %v", tcs[0].key, err)
}
if len(nextList) != len(tcs)-1 {
t.Fatalf("error during GetNextList: got wrong size")
}
}
func testInit() (s *S3, err error) {
var o Options
o.Bucket = "mojura-sync-s3dev"
o.Key = testKey
o.Secret = testSecret
o.Region = "us-east-1"
//o.AvoidBucketCreation = true
o.Endpoint = "https://nyc3.digitaloceanspaces.com"
return New(o)
}
func testClose(t *testing.T, s *S3) {
if err := s.deleteBucket(); err != nil {
t.Fatalf("Error encountered while deleting: %v\n", err)
}
}