1
|
|
|
package dynamodb |
2
|
|
|
|
3
|
|
|
import ( |
4
|
|
|
"context" |
5
|
|
|
"testing" |
6
|
|
|
|
7
|
|
|
SDK "github.com/aws/aws-sdk-go-v2/service/dynamodb" |
8
|
|
|
"github.com/matryer/is" |
9
|
|
|
|
10
|
|
|
"github.com/evalphobia/aws-sdk-go-v2-wrapper/config" |
11
|
|
|
"github.com/evalphobia/aws-sdk-go-v2-wrapper/log" |
12
|
|
|
) |
13
|
|
|
|
14
|
|
|
const ( |
15
|
|
|
defaultEndpoint = "http://localhost:8000" |
16
|
|
|
|
17
|
|
|
testTableName = "test-table" |
18
|
|
|
) |
19
|
|
|
|
20
|
|
|
func TestNew(t *testing.T) { |
21
|
|
|
is := is.NewRelaxed(t) |
22
|
|
|
|
23
|
|
|
// custom endpoint |
24
|
|
|
svc, err := New(getTestConfig()) |
25
|
|
|
is.NoErr(err) |
26
|
|
|
is.True(svc.client != nil) |
27
|
|
|
is.Equal(SDK.ServiceName, svc.client.Metadata.ServiceName) |
28
|
|
|
is.Equal(SDK.ServiceID, svc.client.Metadata.ServiceID) |
29
|
|
|
is.Equal(SDK.EndpointsID, svc.client.Metadata.EndpointsID) |
30
|
|
|
|
31
|
|
|
ep, err := svc.client.EndpointResolver.ResolveEndpoint("", "") |
32
|
|
|
is.NoErr(err) |
33
|
|
|
is.Equal(defaultEndpoint, ep.URL) |
34
|
|
|
|
35
|
|
|
// plain region |
36
|
|
|
svc, err = New(config.Config{}) |
37
|
|
|
is.NoErr(err) |
38
|
|
|
is.True(svc.client != nil) |
39
|
|
|
|
40
|
|
|
region := "us-west-1" |
41
|
|
|
expectedEndpoint := "https://dynamodb." + region + ".amazonaws.com" |
42
|
|
|
ep, err = svc.client.EndpointResolver.ResolveEndpoint(SDK.EndpointsID, region) |
43
|
|
|
is.NoErr(err) |
44
|
|
|
is.Equal(expectedEndpoint, ep.URL) |
45
|
|
|
|
46
|
|
|
_, err = svc.client.EndpointResolver.ResolveEndpoint("", "") |
47
|
|
|
is.True(err != nil) |
48
|
|
|
} |
49
|
|
|
|
50
|
|
|
func TestSetLogger(t *testing.T) { |
51
|
|
|
is := is.NewRelaxed(t) |
52
|
|
|
svc := getTestClient(t) |
53
|
|
|
is.Equal(log.DefaultLogger, svc.logger) |
54
|
|
|
|
55
|
|
|
stdLogger := &log.StdLogger{} |
56
|
|
|
svc.SetLogger(stdLogger) |
57
|
|
|
is.Equal(stdLogger, svc.logger) |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
func getTestConfig() config.Config { |
61
|
|
|
return config.Config{ |
62
|
|
|
AccessKey: "access", |
63
|
|
|
SecretKey: "secret", |
64
|
|
|
CommonEndpoint: defaultEndpoint, |
65
|
|
|
} |
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
func getTestClient(t *testing.T) *DynamoDB { |
69
|
|
|
svc, err := New(getTestConfig()) |
70
|
|
|
if err != nil { |
71
|
|
|
t.Errorf("error on create client; error=%s;", err.Error()) |
72
|
|
|
t.FailNow() |
73
|
|
|
} |
74
|
|
|
return svc |
75
|
|
|
} |
76
|
|
|
|
77
|
|
|
func createTestTable(name string) error { |
78
|
|
|
svc, err := New(getTestConfig()) |
79
|
|
|
if err != nil { |
80
|
|
|
return err |
81
|
|
|
} |
82
|
|
|
|
83
|
|
|
ctx := context.Background() |
84
|
|
|
ok, err := svc.ExistTable(ctx, name) |
85
|
|
|
switch { |
86
|
|
|
case err != nil: |
87
|
|
|
return err |
88
|
|
|
case ok: |
89
|
|
|
return nil |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
_, err = svc.CreateTable(ctx, CreateTableRequest{ |
93
|
|
|
TableName: name, |
94
|
|
|
AttributeDefinitions: []AttributeDefinition{ |
95
|
|
|
{AttributeName: "hashkey", |
96
|
|
|
AttributeType: ScalarAttributeTypeS}, |
97
|
|
|
}, |
98
|
|
|
KeySchema: []KeySchemaElement{ |
99
|
|
|
{AttributeName: "hashkey", |
100
|
|
|
KeyType: KeyTypeHash}, |
101
|
|
|
}, |
102
|
|
|
ProvisionedThroughput: ProvisionedThroughput{ |
103
|
|
|
ReadCapacityUnits: 5, |
104
|
|
|
WriteCapacityUnits: 5, |
105
|
|
|
}, |
106
|
|
|
}) |
107
|
|
|
return err |
108
|
|
|
} |
109
|
|
|
|