154 lines
2.8 KiB
Go
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
|
|
}
|