summaryrefslogtreecommitdiff
path: root/objectstore/memory_backend_test.go
blob: c50d97fd5e2872ea8bd93c2974b5be356b916dc2 (plain)
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)
	}
}