forked from TrueCloudLab/distribution
ba4a6bbe02
Microsoft has updated the golang Azure SDK significantly. Update the azure storage driver to use the new SDK. Add support for client secret and MSI authentication schemes in addition to shared key authentication. Implement rootDirectory support for the azure storage driver to mirror the S3 driver. Signed-off-by: Kirat Singh <kirat.singh@beacon.io> Co-authored-by: Cory Snider <corhere@gmail.com>
72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package testdriver
|
|
|
|
import (
|
|
"context"
|
|
|
|
storagedriver "github.com/distribution/distribution/v3/registry/storage/driver"
|
|
"github.com/distribution/distribution/v3/registry/storage/driver/factory"
|
|
"github.com/distribution/distribution/v3/registry/storage/driver/inmemory"
|
|
)
|
|
|
|
const driverName = "testdriver"
|
|
|
|
func init() {
|
|
factory.Register(driverName, &testDriverFactory{})
|
|
}
|
|
|
|
// testDriverFactory implements the factory.StorageDriverFactory interface.
|
|
type testDriverFactory struct{}
|
|
|
|
func (factory *testDriverFactory) Create(parameters map[string]interface{}) (storagedriver.StorageDriver, error) {
|
|
return New(), nil
|
|
}
|
|
|
|
// TestDriver is a StorageDriver for testing purposes. The Writer returned by this driver
|
|
// simulates the case where Write operations are buffered. This causes the value returned by Size to lag
|
|
// behind until Close (or Commit, or Cancel) is called.
|
|
type TestDriver struct {
|
|
storagedriver.StorageDriver
|
|
}
|
|
|
|
type testFileWriter struct {
|
|
storagedriver.FileWriter
|
|
prevchunk []byte
|
|
}
|
|
|
|
var _ storagedriver.StorageDriver = &TestDriver{}
|
|
|
|
// New constructs a new StorageDriver for testing purposes. The Writer returned by this driver
|
|
// simulates the case where Write operations are buffered. This causes the value returned by Size to lag
|
|
// behind until Close (or Commit, or Cancel) is called.
|
|
func New() *TestDriver {
|
|
return &TestDriver{StorageDriver: inmemory.New()}
|
|
}
|
|
|
|
// Writer returns a FileWriter which will store the content written to it
|
|
// at the location designated by "path" after the call to Commit.
|
|
func (td *TestDriver) Writer(ctx context.Context, path string, append bool) (storagedriver.FileWriter, error) {
|
|
fw, err := td.StorageDriver.Writer(ctx, path, append)
|
|
return &testFileWriter{FileWriter: fw}, err
|
|
}
|
|
|
|
func (tfw *testFileWriter) Write(p []byte) (int, error) {
|
|
_, err := tfw.FileWriter.Write(tfw.prevchunk)
|
|
tfw.prevchunk = make([]byte, len(p))
|
|
copy(tfw.prevchunk, p)
|
|
return len(p), err
|
|
}
|
|
|
|
func (tfw *testFileWriter) Close() error {
|
|
tfw.Write(nil)
|
|
return tfw.FileWriter.Close()
|
|
}
|
|
|
|
func (tfw *testFileWriter) Cancel(ctx context.Context) error {
|
|
tfw.Write(nil)
|
|
return tfw.FileWriter.Cancel(ctx)
|
|
}
|
|
|
|
func (tfw *testFileWriter) Commit() error {
|
|
tfw.Write(nil)
|
|
return tfw.FileWriter.Commit()
|
|
}
|