diff --git a/aob.go b/aob.go new file mode 100644 index 0000000..58b82c4 --- /dev/null +++ b/aob.go @@ -0,0 +1,57 @@ +package main + +import ( + "encoding/json" + "log" + "os" + "time" +) + +var bus BackUpService + +type BackUpService struct { + entries chan *aobEntry +} + +func (bus *BackUpService) Run() { + bus.entries = make(chan *aobEntry, 50) + go func() { + for { + entry := <-bus.entries + data, err := entry.MarshalBinary() + if err != nil { + log.Printf("Unable to marshal aob entry: %s", err.Error()) + continue + } + err = appendToBackUp(data) + if err != nil { + log.Printf("Unable to append aob entry to file: %s", err.Error()) + continue + } + } + }() +} + +type aobEntry struct { + Key string `json:"key"` + Token *Token `json:"token"` + Duration time.Duration `json:"duration"` +} + +func (entry *aobEntry) MarshalBinary() (data []byte, err error) { + return json.Marshal(entry) +} + +func ItemInserted(key string, token *Token, duration time.Duration) error { + entry := &aobEntry{Key: key, Token: token, Duration: duration} + bus.entries <- entry + return nil +} + +func appendToBackUp(data []byte) error { + f, err := os.OpenFile("test.aob", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) + defer f.Close() + f.Write(data) + f.WriteString("\n") + return err +} diff --git a/aob_test.go b/aob_test.go new file mode 100644 index 0000000..db13972 --- /dev/null +++ b/aob_test.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "testing" + "time" +) + +func TestItemInserted(t *testing.T) { + bus = BackUpService{} + bus.Run() + token := &Token{1, "test", "Token"} + + err := ItemInserted("a_new_key", token, time.Minute) + if err != nil { + t.Errorf(err.Error()) + t.FailNow() + } +} + +func TestEntryEncodesIntoJson(t *testing.T) { + token := &Token{1, "test", "Token"} + json, err := token.MarshalBinary() + if err != nil { + t.Errorf(err.Error()) + t.FailNow() + } + if fmt.Sprintf("%s", json) != "{\"user_id\":\"1\",\"scenario\":\"test\",\"Token\":\"Token\"}" { + t.Errorf("Entry did not encode: %s", json) + t.FailNow() + } +}