-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver_test.go
More file actions
108 lines (98 loc) · 2.81 KB
/
server_test.go
File metadata and controls
108 lines (98 loc) · 2.81 KB
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
package actionscacheservice
import (
"io/fs"
"regexp"
"strings"
"testing"
"time"
"github.com/actions-oss/cache-service/contracts"
"github.com/timshannon/bolthold"
)
type MockCacheRecord struct {
ID uint64 `boltholdKey:"ID"`
Key string
Ref string
Version string
LastUpdated time.Time
Storage string
}
type MockDataBase struct {
store *bolthold.Store
}
func (m *MockDataBase) init() {
if m.store == nil {
m.store, _ = bolthold.Open("cache.db", fs.FileMode(0o777), &bolthold.Options{})
}
}
// Add implements [CacheDatabase].
func (m *MockDataBase) Add(record CacheRecord) {
m.init()
record.Key = strings.ToLower(record.Key)
m.store.Insert(bolthold.NextSequence(), &MockCacheRecord{
ID: uint64(record.ID),
Ref: record.Ref,
Key: record.Key,
Version: record.Version,
LastUpdated: record.LastUpdated,
Storage: record.Storage,
})
}
// Find implements [CacheDatabase].
func (m *MockDataBase) Find(reference, key, version string) *CacheRecord {
m.init()
res := MockCacheRecord{}
err := m.store.FindOne(&res, bolthold.Where("Version").Eq("").Or(bolthold.Where("Version").Eq(version)).And("Ref").Eq(reference).And("Key").Eq(strings.ToLower(key)).SortBy("LastUpdated").Reverse())
if err != nil {
r := regexp.MustCompile("^" + regexp.QuoteMeta(strings.ToLower(key)) + ".+")
err = m.store.FindOne(&res, bolthold.Where("Version").Eq("").Or(bolthold.Where("Version").Eq(version)).And("Ref").Eq(reference).And("Key").RegExp(r).SortBy("LastUpdated").Reverse())
if err != nil {
return nil
}
}
return &CacheRecord{
ID: int64(res.ID),
Ref: res.Ref,
Key: res.Key,
Version: res.Version,
LastUpdated: res.LastUpdated,
Storage: res.Storage,
}
}
type MockStorage struct {
}
// CreateSignedURL implements [BlobStorage].
func (m *MockStorage) CreateSignedURL(filename string, write bool) string {
return ""
}
func TestServer(t *testing.T) {
var _ CacheDatabase = &MockDataBase{}
var _ BlobStorage = &MockStorage{}
service := &CacheService{
Ref: "refs/heads/main",
DefaultRef: "refs/heads/main",
Database: &MockDataBase{},
Storage: &MockStorage{},
}
resp := service.CreateCacheEntry(&contracts.CreateCacheEntryRequest{
Key: "cache-server",
Version: "ver1",
})
resp2 := service.FinalizeCacheEntryUpload(&contracts.FinalizeCacheEntryUploadRequest{
Key: "cache-server",
Version: "ver1",
})
_ = resp2
resp = service.CreateCacheEntry(&contracts.CreateCacheEntryRequest{
Key: "cache-server",
Version: "ver2",
})
_ = resp
resp2 = service.FinalizeCacheEntryUpload(&contracts.FinalizeCacheEntryUploadRequest{
Key: "cache-server",
Version: "ver2",
})
service.GetCacheEntryDownloadURL(&contracts.GetCacheEntryDownloadURLRequest{
Key: "cache-server",
Version: "ver2",
})
}