goes/storage/dailydisk_test.go

125 lines
3.7 KiB
Go

package storage
import (
"testing"
"os"
"path"
"github.com/satori/go.uuid"
"time"
"reflect"
)
func TestAddEvent(t *testing.T) {
//Arrange
storagePath := path.Join(os.TempDir(), uuid.NewV4().String())
defer os.RemoveAll(storagePath)
storage := NewDailyDiskStorage(storagePath)
aLocation, _ := time.LoadLocation("")
aTime := time.Date(2016,2,11,9,53,32,1234567, aLocation)
aggregateId := uuid.NewV4()
aType := "myType"
data := []byte("{}")
metadata := []byte("{}")
//Act
err := storage.Write(&StoredEvent{aggregateId, aTime, aType, data, "Metadata", metadata})
//Assert
if err != nil {
t.Errorf("Write failed. Error: %v", err)
}
readableDiskStorage := storage.(*DailyDiskStorage)
globalIndexFi, _ := os.Stat(readableDiskStorage.globalIndexFilename)
if globalIndexFi == nil {
t.Error("Write failed. Expected global index file, none exists.")
}
aggregateIndexFi, _ := os.Stat(readableDiskStorage.getStreamIndexFilename(aggregateId))
if aggregateIndexFi == nil {
t.Errorf("Write failed. Expected index for aggregate %v, none exists.", aggregateId.String())
}
eventFi, _ := os.Stat(readableDiskStorage.getEventFilename(aTime, aType))
if eventFi == nil {
t.Errorf("Write failed. Expected file for event %v, none exists.", aggregateId.String())
}
//TODO: check indexes/event content
}
func TestReadStream(t *testing.T) {
//Arrange
storagePath := path.Join(os.TempDir(), uuid.NewV4().String())
defer os.RemoveAll(storagePath)
storage := NewDailyDiskStorage(storagePath)
streamId := uuid.NewV4()
ev1 := &StoredEvent{streamId, time.Now(), "1stType", []byte("1stEvent"), "Metadata", []byte("{}")}
storage.Write(ev1)
ev2 := &StoredEvent{streamId, time.Now(), "2ndType", []byte("2ndEvent"), "Metadata", []byte("{}")}
storage.Write(ev2)
//Act
storedEvents, err := storage.ReadStream(streamId)
//Assert
if err != nil {
t.Errorf("ReadStream failed. Error: %v", err)
return
}
if len(storedEvents) != 2 {
t.Errorf("ReadStream failed. Got %v stored events, expected %v", len(storedEvents), 2)
return
}
if !reflect.DeepEqual(storedEvents[0], ev1) {
t.Errorf("ReadStream failed. First event doesn't match. %+v != %+v", storedEvents[0], ev1)
return
}
if !reflect.DeepEqual(storedEvents[1], ev2) {
t.Errorf("ReadStream failed. Second event doesn't match. %+v != %+v", storedEvents[1], ev2)
return
}
}
func TestReadAll(t *testing.T) {
//Arrange
storagePath := path.Join(os.TempDir(), uuid.NewV4().String())
defer os.RemoveAll(storagePath)
storage := NewDailyDiskStorage(storagePath)
stream1Id := uuid.NewV4()
stream2Id := uuid.NewV4()
ev1 := &StoredEvent{stream1Id, time.Now(), "1stType", []byte("1stEvent"), "Metadata", []byte("{}")}
storage.Write(ev1)
ev2 := &StoredEvent{stream2Id, time.Now(), "2ndType", []byte("2ndEvent"), "Metadata", []byte("{}")}
storage.Write(ev2)
ev3 := &StoredEvent{stream1Id, time.Now(), "3rdType", []byte("3rdEvent"), "Metadata", []byte("{}")}
storage.Write(ev3)
//Act
storedEvents, err := storage.ReadAll()
//Assert
if err != nil {
t.Errorf("ReadAll failed. Error: %v", err)
return
}
if len(storedEvents) != 3 {
t.Errorf("ReadAll failed. Got %v stored events, expected %v", len(storedEvents), 3)
return
}
if !reflect.DeepEqual(storedEvents[0], ev1) {
t.Errorf("ReadAll failed. First event doesn't match. %+v != %+v", storedEvents[0], ev1)
return
}
if !reflect.DeepEqual(storedEvents[1], ev2) {
t.Errorf("ReadAll failed. Second event doesn't match. %+v != %+v", storedEvents[1], ev2)
return
}
if !reflect.DeepEqual(storedEvents[2], ev3) {
t.Errorf("ReadAll failed. Third event doesn't match. %+v != %+v", storedEvents[2], ev2)
return
}
}