git-lfs/queuedir/queuedir_test.go
2014-06-02 09:33:52 -06:00

154 lines
2.8 KiB
Go

package queuedir
import (
"github.com/bmizerany/assert"
"io/ioutil"
"os"
"path/filepath"
"testing"
)
func TestAdd(t *testing.T) {
q := Setup(t)
defer q.Teardown()
id, err := q.Queue.AddString("BOOM")
if err != nil {
t.Fatalf("Cannot add to queue: %s", err)
}
assertExist(t, q.Queue, id)
file, err := os.Open(filepath.Join(q.Queue.Path, id))
if err != nil {
t.Fatalf("Cannot open file: %s", err)
}
by, err := ioutil.ReadAll(file)
if err != nil {
t.Fatalf("Cannot read file: %s", err)
}
assert.Equal(t, "BOOM", string(by))
}
func TestWalk(t *testing.T) {
q := Setup(t)
defer q.Teardown()
id1, err := q.Queue.AddString("BOOM0")
if err != nil {
t.Fatalf("Cannot add to queue: %s", err)
}
id2, err := q.Queue.AddString("BOOM1")
if err != nil {
t.Fatalf("Cannot add to queue: %s", err)
}
seen := make(map[string]bool)
q.Queue.Walk(func(id string, body []byte) error {
if err != nil {
t.Errorf("Error reading queue data for %s: %s", id, err)
}
seen[id] = true
if id == id1 {
assert.Equal(t, id1, id)
} else if id == id2 {
assert.Equal(t, id2, id)
} else {
t.Errorf("Weird ID: %s", id)
}
return nil
})
assert.Equal(t, 2, len(seen))
}
func TestMove(t *testing.T) {
q := Setup(t)
defer q.Teardown()
id, err := q.Queue.AddString("BOOM")
if err != nil {
t.Fatalf("Cannot add to queue: %s", err)
}
assertExist(t, q.Queue, id)
queue2, err := q.Dir.Queue("test2")
if err != nil {
t.Fatalf("Cannot create %s queue: %s", queue2.Name, err)
}
err = q.Queue.Move(queue2, id)
if err != nil {
t.Fatalf("Cannot move from queue %s to %s: %s", q.Queue.Name, queue2.Name, err)
}
assertNotExist(t, q.Queue, id)
assertExist(t, queue2, id)
}
func TestDel(t *testing.T) {
q := Setup(t)
defer q.Teardown()
id, err := q.Queue.AddString("BOOM")
if err != nil {
t.Fatalf("Cannot add to queue: %s", err)
}
assertExist(t, q.Queue, id)
err = q.Queue.Del(id)
if err != nil {
t.Fatalf("Error deleting from queue: %s", err)
}
assertNotExist(t, q.Queue, id)
}
type QueueTest struct {
Dir *QueueDir
Queue *Queue
}
func Setup(t *testing.T) *QueueTest {
wd, err := os.Getwd()
if err != nil {
t.Fatalf("Cannot get current working dir: %s", err)
}
qdir := New(filepath.Join(wd, "test_queuedir"))
q, err := qdir.Queue("test")
if err != nil {
t.Fatalf("Cannot create test queue: %s", err)
}
return &QueueTest{qdir, q}
}
func (t *QueueTest) Teardown() {
os.RemoveAll(t.Dir.Path)
}
func assertExist(t *testing.T, q *Queue, id string) {
if !fileExists(q, id) {
t.Fatalf("%s does not exist in queue %s", id, q.Name)
}
}
func assertNotExist(t *testing.T, q *Queue, id string) {
if fileExists(q, id) {
t.Fatalf("%s exists in queue %s", id, q.Name)
}
}
func fileExists(q *Queue, id string) bool {
_, err := os.Stat(q.FullPath(id))
return err == nil
}