|
|
|
package swampfile
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/matryer/is"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func RepositoryContract(fac func() Repository, t *testing.T) {
|
|
|
|
basicFileOperationContract(fac, t)
|
|
|
|
}
|
|
|
|
|
|
|
|
func basicFileOperationContract(fac func() Repository, t *testing.T) {
|
|
|
|
is := is.New(t)
|
|
|
|
repo := fac()
|
|
|
|
|
|
|
|
not_file, err := repo.Open("doesnot", "exist")
|
|
|
|
|
|
|
|
is.Equal(err, ErrNotExists)
|
|
|
|
is.Equal(not_file, nil)
|
|
|
|
|
|
|
|
new_file, err := repo.Create("newfile.new", "ua1")
|
|
|
|
|
|
|
|
is.NoErr(err)
|
|
|
|
is.True(new_file != nil)
|
|
|
|
|
|
|
|
var testdata = "testingdata"
|
|
|
|
|
|
|
|
new_file.Write([]byte(testdata))
|
|
|
|
new_file.Close()
|
|
|
|
|
|
|
|
reopened_file, err := repo.Open("newfile.new", "ua1")
|
|
|
|
|
|
|
|
is.NoErr(err)
|
|
|
|
is.True(reopened_file != nil)
|
|
|
|
|
|
|
|
readback := make([]byte, 128)
|
|
|
|
|
|
|
|
size, err := reopened_file.Read(readback)
|
|
|
|
|
|
|
|
is.Equal(string(readback[0:size]), testdata)
|
|
|
|
|
|
|
|
reopened_file.Close()
|
|
|
|
|
|
|
|
repo.Delete("newfile.new", "ua1")
|
|
|
|
|
|
|
|
deleted_file, err := repo.Open("newfile.new", "ua1")
|
|
|
|
|
|
|
|
is.Equal(err, ErrNotExists)
|
|
|
|
is.True(deleted_file == nil)
|
|
|
|
|
|
|
|
// DeleteOlderThan
|
|
|
|
|
|
|
|
expiring_file, err := repo.Create("deep/dir/expiring.new", "ua1")
|
|
|
|
is.NoErr(err)
|
|
|
|
|
|
|
|
expiring_file.Write([]byte(testdata))
|
|
|
|
expiring_file.Close()
|
|
|
|
|
|
|
|
err = repo.DeleteOlderThan("ua1", time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC))
|
|
|
|
is.NoErr(err)
|
|
|
|
|
|
|
|
expired_file, err := repo.Open("deep/dir/expiring.new", "ua1")
|
|
|
|
is.Equal(err, ErrNotExists)
|
|
|
|
is.True(expired_file == nil)
|
|
|
|
}
|