From 45936806a968b30b6de37e5e86fb8770cf170f25 Mon Sep 17 00:00:00 2001 From: Marius Date: Wed, 9 Dec 2015 20:48:41 +0100 Subject: [PATCH] Add test for lockingstore.MemoryLocker --- lockingstore/lockingstore.go | 34 ++++++++++++++++++------------- lockingstore/memorylocker.go | 2 +- lockingstore/memorylocker_test.go | 27 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 lockingstore/memorylocker_test.go diff --git a/lockingstore/lockingstore.go b/lockingstore/lockingstore.go index 6e5b1fa..ca59c89 100644 --- a/lockingstore/lockingstore.go +++ b/lockingstore/lockingstore.go @@ -1,5 +1,11 @@ package lockingstore +import ( + "io" + + "github.com/tus/tusd" +) + type Locker interface { LockUpload(id string) error UnlockUpload(id string) error @@ -7,16 +13,16 @@ type Locker interface { type LockingStore struct { tusd.DataStore - Locker *Locker + Locker Locker } -func (store LockingStore) WriteChunk(id string, offset int64, src io.Reader) (int64, error) { - if err := store.LockUpload(id); err != nil { +func (store LockingStore) WriteChunk(id string, offset int64, src io.Reader) (n int64, err error) { + if err := store.Locker.LockUpload(id); err != nil { return 0, err } defer func() { - if unlockErr := store.UnlockUpload(id); unlockErr != nil { + if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil { 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) } -func (store LockingStore) GetInfo(id string) (FileInfo, error) { - if err := store.LockUpload(id); err != nil { - return nil, err +func (store LockingStore) GetInfo(id string) (info tusd.FileInfo, err error) { + if err := store.Locker.LockUpload(id); err != nil { + return info, err } defer func() { - if unlockErr := store.UnlockUpload(id); unlockErr != nil { + if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil { err = unlockErr } }() @@ -38,13 +44,13 @@ func (store LockingStore) GetInfo(id string) (FileInfo, error) { return store.DataStore.GetInfo(id) } -func (store LockingStore) GetReader(id string) (io.Reader, error) { - if err := store.LockUpload(id); err != nil { +func (store LockingStore) GetReader(id string) (src io.Reader, err error) { + if err := store.Locker.LockUpload(id); err != nil { return nil, err } defer func() { - if unlockErr := store.UnlockUpload(id); unlockErr != nil { + if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil { err = unlockErr } }() @@ -52,13 +58,13 @@ func (store LockingStore) GetReader(id string) (io.Reader, error) { return store.DataStore.GetReader(id) } -func (store LockingStore) Terminate(id string) error { - if err := store.LockUpload(id); err != nil { +func (store LockingStore) Terminate(id string) (err error) { + if err := store.Locker.LockUpload(id); err != nil { return err } defer func() { - if unlockErr := store.UnlockUpload(id); unlockErr != nil { + if unlockErr := store.Locker.UnlockUpload(id); unlockErr != nil { err = unlockErr } }() diff --git a/lockingstore/memorylocker.go b/lockingstore/memorylocker.go index 1dd6d22..b8722ec 100644 --- a/lockingstore/memorylocker.go +++ b/lockingstore/memorylocker.go @@ -21,7 +21,7 @@ func (locker *MemoryLocker) LockUpload(id string) error { return tusd.ErrFileLocked } - handler.locks[id] = true + locker.locks[id] = true return nil } diff --git a/lockingstore/memorylocker_test.go b/lockingstore/memorylocker_test.go new file mode 100644 index 0000000..01ca2c6 --- /dev/null +++ b/lockingstore/memorylocker_test.go @@ -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) + } +}