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
|
// Memory backend tests
//
// Licensed under CC0 1.0 Universal:
// https://creativecommons.org/publicdomain/zero/1.0/legalcode
package objectstore
import (
"errors"
"testing"
)
func TestCreateAndGet(t *testing.T) {
objects := NewMemBackend()
// Create the object
bucketId := "foo"
objectId := "bar"
objectContent := []byte("Lorem ipsum")
objects.CreateObject(bucketId, objectId, objectContent)
// Retrieve the object
object, err := objects.GetObject(bucketId, objectId)
if err != nil {
t.Fatalf("Get test object: %v", err)
}
// Check the object content
if object != string(objectContent) {
t.Errorf("Check test object. Got (%v), want (%v)", object, objectContent)
}
// Try to get a non-existent object
_, err = objects.GetObject(bucketId, "baz")
if err == nil {
t.Error("Get non-existent object. Got nil, want error")
}
}
func TestCreateAndDelete(t *testing.T) {
objects := NewMemBackend()
// Create the object
bucketId := "foo"
objectId := "bar"
objectContent := []byte("Lorem ipsum")
objects.CreateObject(bucketId, objectId, objectContent)
// Try to delete a non-existent object
if err := objects.DeleteObject(bucketId, "baz"); err == nil {
t.Error("Delete non-existent object. Got nil, want error")
}
// Check the number of buckets
if numBuckets := len(objects.buckets); numBuckets != 1 {
t.Errorf("Number of buckets. Got %v, want 1", numBuckets)
}
// Delete the object
if err := objects.DeleteObject(bucketId, objectId); err != nil {
t.Fatalf("Delete test object: %v", err)
}
// Try to re-delete the object
if err := objects.DeleteObject(bucketId, objectId); err == nil {
t.Error("Delete already deleted object. Got nil, want error")
}
// Re-check the number of buckets
if numBuckets := len(objects.buckets); numBuckets != 0 {
t.Errorf("Number of buckets. Got %v, want 0", numBuckets)
}
}
func TestDuplicatesDetection(t *testing.T) {
objects := NewMemBackend()
// Create an object
bucketId := "foo"
objectId := "bar"
objectContent := []byte("Lorem ipsum")
objects.CreateObject(bucketId, objectId, objectContent)
// Error type reference
var duplicateError *DuplicateError
// Try to add the object again (same name)
err := objects.CreateObject(bucketId, objectId, objectContent)
if err == nil {
t.Error("Add a duplicate object. Got nil, want error")
} else if errors.Is(err, duplicateError) {
t.Error("Add a duplicate object. Got unexpected error")
}
// Try to add the object again (different name)
err = objects.CreateObject(bucketId, "baz", objectContent)
if err == nil {
t.Error("Add a duplicate object. Got nil, want error")
} else if errors.Is(err, duplicateError) {
t.Error("Add a duplicate object. Got unexpected error")
}
// Add the object to a different bucket
err = objects.CreateObject("baz", objectId, objectContent)
if err != nil {
t.Errorf("Add object. Got error, want nil: %v", err)
}
// Delete the object
if err := objects.DeleteObject(bucketId, objectId); err != nil {
t.Fatalf("Delete test object: %v", err)
}
// Add the object again
err = objects.CreateObject(bucketId, objectId, objectContent)
if err != nil {
t.Errorf("Add object. Got error, want nil: %v", err)
}
}
|