Add test for lockingstore.MemoryLocker
This commit is contained in:
parent
49d7c2ff78
commit
45936806a9
|
@ -1,5 +1,11 @@
|
||||||
package lockingstore
|
package lockingstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/tus/tusd"
|
||||||
|
)
|
||||||
|
|
||||||
type Locker interface {
|
type Locker interface {
|
||||||
LockUpload(id string) error
|
LockUpload(id string) error
|
||||||
UnlockUpload(id string) error
|
UnlockUpload(id string) error
|
||||||
|
@ -7,16 +13,16 @@ type Locker interface {
|
||||||
|
|
||||||
type LockingStore struct {
|
type LockingStore struct {
|
||||||
tusd.DataStore
|
tusd.DataStore
|
||||||
Locker *Locker
|
Locker Locker
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store LockingStore) WriteChunk(id string, offset int64, src io.Reader) (int64, error) {
|
func (store LockingStore) WriteChunk(id string, offset int64, src io.Reader) (n int64, err error) {
|
||||||
if err := store.LockUpload(id); err != nil {
|
if err := store.Locker.LockUpload(id); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if unlockErr := store.UnlockUpload(id); unlockErr != nil {
|
if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil {
|
||||||
err = unlockErr
|
err = unlockErr
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -24,13 +30,13 @@ func (store LockingStore) WriteChunk(id string, offset int64, src io.Reader) (in
|
||||||
return store.DataStore.WriteChunk(id, offset, src)
|
return store.DataStore.WriteChunk(id, offset, src)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store LockingStore) GetInfo(id string) (FileInfo, error) {
|
func (store LockingStore) GetInfo(id string) (info tusd.FileInfo, err error) {
|
||||||
if err := store.LockUpload(id); err != nil {
|
if err := store.Locker.LockUpload(id); err != nil {
|
||||||
return nil, err
|
return info, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if unlockErr := store.UnlockUpload(id); unlockErr != nil {
|
if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil {
|
||||||
err = unlockErr
|
err = unlockErr
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -38,13 +44,13 @@ func (store LockingStore) GetInfo(id string) (FileInfo, error) {
|
||||||
return store.DataStore.GetInfo(id)
|
return store.DataStore.GetInfo(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store LockingStore) GetReader(id string) (io.Reader, error) {
|
func (store LockingStore) GetReader(id string) (src io.Reader, err error) {
|
||||||
if err := store.LockUpload(id); err != nil {
|
if err := store.Locker.LockUpload(id); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if unlockErr := store.UnlockUpload(id); unlockErr != nil {
|
if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil {
|
||||||
err = unlockErr
|
err = unlockErr
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -52,13 +58,13 @@ func (store LockingStore) GetReader(id string) (io.Reader, error) {
|
||||||
return store.DataStore.GetReader(id)
|
return store.DataStore.GetReader(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store LockingStore) Terminate(id string) error {
|
func (store LockingStore) Terminate(id string) (err error) {
|
||||||
if err := store.LockUpload(id); err != nil {
|
if err := store.Locker.LockUpload(id); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if unlockErr := store.UnlockUpload(id); unlockErr != nil {
|
if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil {
|
||||||
err = unlockErr
|
err = unlockErr
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -21,7 +21,7 @@ func (locker *MemoryLocker) LockUpload(id string) error {
|
||||||
return tusd.ErrFileLocked
|
return tusd.ErrFileLocked
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.locks[id] = true
|
locker.locks[id] = true
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package lockingstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/tus/tusd"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMemoryLocker(t *testing.T) {
|
||||||
|
locker := New()
|
||||||
|
|
||||||
|
if err := locker.LockUpload("one"); err != nil {
|
||||||
|
t.Errorf("unexpected error when locking file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := locker.LockUpload("one"); err != tusd.ErrFileLocked {
|
||||||
|
t.Errorf("expected error when locking locked file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := locker.UnlockUpload("one"); err != nil {
|
||||||
|
t.Errorf("unexpected error when unlocking file: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := locker.UnlockUpload("one"); err != nil {
|
||||||
|
t.Errorf("unexpected error when unlocking file again: %s", err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue