...
1 package testdriver
2
3 import (
4 "context"
5
6 storagedriver "github.com/docker/distribution/registry/storage/driver"
7 "github.com/docker/distribution/registry/storage/driver/factory"
8 "github.com/docker/distribution/registry/storage/driver/inmemory"
9 )
10
11 const driverName = "testdriver"
12
13 func init() {
14 factory.Register(driverName, &testDriverFactory{})
15 }
16
17
18 type testDriverFactory struct{}
19
20 func (factory *testDriverFactory) Create(parameters map[string]interface{}) (storagedriver.StorageDriver, error) {
21 return New(), nil
22 }
23
24
25
26
27 type TestDriver struct {
28 storagedriver.StorageDriver
29 }
30
31 type testFileWriter struct {
32 storagedriver.FileWriter
33 prevchunk []byte
34 }
35
36 var _ storagedriver.StorageDriver = &TestDriver{}
37
38
39
40
41 func New() *TestDriver {
42 return &TestDriver{StorageDriver: inmemory.New()}
43 }
44
45
46
47 func (td *TestDriver) Writer(ctx context.Context, path string, append bool) (storagedriver.FileWriter, error) {
48 fw, err := td.StorageDriver.Writer(ctx, path, append)
49 return &testFileWriter{FileWriter: fw}, err
50 }
51
52 func (tfw *testFileWriter) Write(p []byte) (int, error) {
53 _, err := tfw.FileWriter.Write(tfw.prevchunk)
54 tfw.prevchunk = make([]byte, len(p))
55 copy(tfw.prevchunk, p)
56 return len(p), err
57 }
58
59 func (tfw *testFileWriter) Close() error {
60 tfw.Write(nil)
61 return tfw.FileWriter.Close()
62 }
63
64 func (tfw *testFileWriter) Cancel() error {
65 tfw.Write(nil)
66 return tfw.FileWriter.Cancel()
67 }
68
69 func (tfw *testFileWriter) Commit() error {
70 tfw.Write(nil)
71 return tfw.FileWriter.Commit()
72 }
73
View as plain text