mirror of
https://github.com/jhillyerd/inbucket.git
synced 2026-01-06 03:17:05 +00:00
test: Finish initial storage test suite, closes #82
This commit is contained in:
@@ -22,15 +22,13 @@ import (
|
||||
|
||||
// TestSuite runs storage package test suite on file store.
|
||||
func TestSuite(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
test.StoreSuite(t, ds)
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging.
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure.
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
test.StoreSuite(t, func() (storage.Store, func(), error) {
|
||||
ds, _ := setupDataStore(config.DataStoreConfig{})
|
||||
destroy := func() {
|
||||
teardownDataStore(ds)
|
||||
}
|
||||
return ds, destroy, nil
|
||||
})
|
||||
}
|
||||
|
||||
// Test directory structure created by filestore
|
||||
@@ -111,225 +109,6 @@ func TestFSDirStructure(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestFSVisitMailboxes tests VisitMailboxes
|
||||
func TestFSVisitMailboxes(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
boxes := []string{"abby", "bill", "christa", "donald", "evelyn"}
|
||||
for _, name := range boxes {
|
||||
// Create day old message
|
||||
date := time.Now().Add(-24 * time.Hour)
|
||||
deliverMessage(ds, name, "Old Message", date)
|
||||
|
||||
// Create current message
|
||||
date = time.Now()
|
||||
deliverMessage(ds, name, "New Message", date)
|
||||
}
|
||||
|
||||
seen := 0
|
||||
err := ds.VisitMailboxes(func(messages []storage.StoreMessage) bool {
|
||||
seen++
|
||||
count := len(messages)
|
||||
if count != 2 {
|
||||
t.Errorf("got: %v messages, want: 2", count)
|
||||
}
|
||||
return true
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, 5, seen)
|
||||
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
}
|
||||
|
||||
// Test delivering several messages to the same mailbox, meanwhile querying its
|
||||
// contents with a new mailbox object each time
|
||||
func TestFSDeliverMany(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
|
||||
mbName := "fred"
|
||||
subjects := []string{"alpha", "bravo", "charlie", "delta", "echo"}
|
||||
|
||||
for i, subj := range subjects {
|
||||
// Check number of messages
|
||||
msgs, err := ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
assert.Equal(t, i, len(msgs), "Expected %v message(s), but got %v", i, len(msgs))
|
||||
|
||||
// Add a message
|
||||
deliverMessage(ds, mbName, subj, time.Now())
|
||||
}
|
||||
|
||||
msgs, err := ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
assert.Equal(t, len(subjects), len(msgs), "Expected %v message(s), but got %v",
|
||||
len(subjects), len(msgs))
|
||||
|
||||
// Confirm delivery order
|
||||
for i, expect := range subjects {
|
||||
subj := msgs[i].Subject()
|
||||
assert.Equal(t, expect, subj, "Expected subject %q, got %q", expect, subj)
|
||||
}
|
||||
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
}
|
||||
|
||||
// Test deleting messages
|
||||
func TestFSDelete(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
|
||||
mbName := "fred"
|
||||
subjects := []string{"alpha", "bravo", "charlie", "delta", "echo"}
|
||||
|
||||
for _, subj := range subjects {
|
||||
// Add a message
|
||||
deliverMessage(ds, mbName, subj, time.Now())
|
||||
}
|
||||
|
||||
msgs, err := ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
assert.Equal(t, len(subjects), len(msgs), "Expected %v message(s), but got %v",
|
||||
len(subjects), len(msgs))
|
||||
|
||||
// Delete a couple messages
|
||||
err = ds.RemoveMessage(mbName, msgs[1].ID())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = ds.RemoveMessage(mbName, msgs[3].ID())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Confirm deletion
|
||||
msgs, err = ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
|
||||
subjects = []string{"alpha", "charlie", "echo"}
|
||||
assert.Equal(t, len(subjects), len(msgs), "Expected %v message(s), but got %v",
|
||||
len(subjects), len(msgs))
|
||||
for i, expect := range subjects {
|
||||
subj := msgs[i].Subject()
|
||||
assert.Equal(t, expect, subj, "Expected subject %q, got %q", expect, subj)
|
||||
}
|
||||
|
||||
// Try appending one more
|
||||
deliverMessage(ds, mbName, "foxtrot", time.Now())
|
||||
|
||||
msgs, err = ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
|
||||
subjects = []string{"alpha", "charlie", "echo", "foxtrot"}
|
||||
assert.Equal(t, len(subjects), len(msgs), "Expected %v message(s), but got %v",
|
||||
len(subjects), len(msgs))
|
||||
for i, expect := range subjects {
|
||||
subj := msgs[i].Subject()
|
||||
assert.Equal(t, expect, subj, "Expected subject %q, got %q", expect, subj)
|
||||
}
|
||||
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
}
|
||||
|
||||
// Test purging a mailbox
|
||||
func TestFSPurge(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
|
||||
mbName := "fred"
|
||||
subjects := []string{"alpha", "bravo", "charlie", "delta", "echo"}
|
||||
|
||||
for _, subj := range subjects {
|
||||
// Add a message
|
||||
deliverMessage(ds, mbName, subj, time.Now())
|
||||
}
|
||||
|
||||
msgs, err := ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
assert.Equal(t, len(subjects), len(msgs), "Expected %v message(s), but got %v",
|
||||
len(subjects), len(msgs))
|
||||
|
||||
// Purge mailbox
|
||||
err = ds.PurgeMessages(mbName)
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Confirm deletion
|
||||
msgs, err = ds.GetMessages(mbName)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to GetMessages for %q: %v", mbName, err)
|
||||
}
|
||||
|
||||
assert.Equal(t, len(msgs), 0, "Expected mailbox to have zero messages, got %v", len(msgs))
|
||||
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
}
|
||||
|
||||
// Test message size calculation
|
||||
func TestFSSize(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
defer teardownDataStore(ds)
|
||||
|
||||
mbName := "fred"
|
||||
subjects := []string{"a", "br", "much longer than the others"}
|
||||
sentIds := make([]string, len(subjects))
|
||||
sentSizes := make([]int64, len(subjects))
|
||||
|
||||
for i, subj := range subjects {
|
||||
// Add a message
|
||||
id, size := deliverMessage(ds, mbName, subj, time.Now())
|
||||
sentIds[i] = id
|
||||
sentSizes[i] = size
|
||||
}
|
||||
|
||||
for i, id := range sentIds {
|
||||
msg, err := ds.GetMessage(mbName, id)
|
||||
assert.Nil(t, err)
|
||||
|
||||
expect := sentSizes[i]
|
||||
size := msg.Size()
|
||||
assert.Equal(t, expect, size, "Expected size of %v, got %v", expect, size)
|
||||
}
|
||||
|
||||
if t.Failed() {
|
||||
// Wait for handler to finish logging
|
||||
time.Sleep(2 * time.Second)
|
||||
// Dump buffered log data if there was a failure
|
||||
_, _ = io.Copy(os.Stderr, logbuf)
|
||||
}
|
||||
}
|
||||
|
||||
// Test missing files
|
||||
func TestFSMissing(t *testing.T) {
|
||||
ds, logbuf := setupDataStore(config.DataStoreConfig{})
|
||||
|
||||
Reference in New Issue
Block a user