/
s3_test.go
93 lines (78 loc) · 1.79 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
package s3meta
import (
"github.com/hoisie/web"
"io/ioutil"
"testing"
"time"
)
var S3Server *web.Server
var FakeS3 map[string]string
var TestBucket *Bucket
func S3GetHandler(ctx *web.Context, key string) (ret string) {
val := FakeS3[key]
if val == "" {
ctx.Abort(404, "Not Found")
return
} else if val == "FAIL" {
ctx.Redirect(301, "htttttttp://idon'twork")
return
} else {
return val
}
}
func S3SetHandler(ctx *web.Context, key string) (ret string) {
body, _ := ioutil.ReadAll(ctx.Request.Body)
FakeS3[key] = string(body)
return
}
func init() {
FakeS3 = make(map[string]string)
TestBucket = &Bucket{
"localhost:7777",
"/",
"WhatEvenISComputerz",
"ADogWalkedInToABarAndOrderADrinkJKHePoopedHesADog",
}
S3Server = web.NewServer()
S3Server.Get("/(.*)", S3GetHandler)
S3Server.Put("/(.*)", S3SetHandler)
go S3Server.Run("0.0.0.0:7777")
}
func TestHeadS3Object(t *testing.T) {
FakeS3["taco"] = "waffle"
bl, err := TestBucket.HeadS3Object("taco")
if !bl {
t.Errorf("Got false from HeadRequest")
}
if err != nil {
t.Errorf("Got an error '%s'", err)
}
}
func TestGetS3Object(t *testing.T) {
FakeS3["chris"] = "schepman"
str, err := TestBucket.GetS3Object("chris")
if str != "schepman" {
t.Errorf("Got %s from GetS3Object not %s", str, "schepman")
}
if err != nil {
t.Errorf("Got an error '%s'", err)
}
}
func TestRetrys(t *testing.T) {
// Make FakeS3 give a failure
FakeS3["matt"] = "FAIL"
// key matt will 404 on the first attempt
// 400ms after the key will be set
// 3 rety should get a 200
go func() {
time.Sleep(time.Millisecond * 200)
FakeS3["matt"] = "sacks"
}()
str, err := TestBucket.GetS3Object("matt")
if str != "sacks" {
t.Errorf("Got %s from GetS3Object not %s", str, "sacks")
}
if err != nil {
t.Errorf("Got an error '%s'", err)
}
}