From 807ff0119ca6c97174799806a8f3fd7cc92b2c55 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Fri, 12 Feb 2016 21:07:43 -0800 Subject: [PATCH] Add flag to fill test server with generated messages. --- cmd/ximap/ximap.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/cmd/ximap/ximap.go b/cmd/ximap/ximap.go index d703c64..19214cf 100644 --- a/cmd/ximap/ximap.go +++ b/cmd/ximap/ximap.go @@ -4,9 +4,12 @@ import ( "flag" "fmt" "net/http" + "net/textproto" "os" + "time" xprometheus "xinu.tv/imapstore/prometheus" + "xinu.tv/lorem" "github.com/golang/glog" "github.com/jordwest/imap-server" @@ -17,8 +20,37 @@ import ( var ( imapAddr = flag.String("imap", ":10143", "listen address for IMAP") httpAddr = flag.String("http", ":10080", "listen address for HTTP") + msgCount = flag.Int("msg", 0, "number of messages to generate and insert in to mailstore") ) +func fill(ms mailstore.Mailstore, numMessages int) error { + glog.Infof("Generation of %d messages started...", numMessages) + defer glog.Infof("Done creating fake messages") + genEmail := func() string { + return lorem.Words(1, false) + "@" + lorem.Words(1, false) + ".com" + } + u, err := ms.Authenticate("username", "password") + if err != nil { + return err + } + mBoxes := u.Mailboxes() + for i := 0; i < numMessages; i++ { + mBox := mBoxes[i%len(mBoxes)] + msg := mBox.NewMessage() + date := time.Unix(int64(i)*17*24*60*60, 0).Format(time.RFC822Z) + msg.SetHeaders(textproto.MIMEHeader{ + "Subject": []string{lorem.Sentence()}, + "From": []string{genEmail()}, + "To": []string{genEmail()}, + "Date": []string{date}, + }).SetBody(lorem.Paragraph()) + if _, err := msg.Save(); err != nil { + return fmt.Errorf("creating %d message in %s failed; %v", i, mBox.Name()) + } + } + return nil +} + func main() { flag.Parse() defer glog.Flush() @@ -30,6 +62,11 @@ func main() { var store mailstore.Mailstore store = mailstore.NewDummyMailstore() + if *msgCount != 0 { + if err := fill(store, *msgCount); err != nil { + glog.Errorf("Failed to fill dummy mailstore: %v", err) + } + } store = xprometheus.NewMailstore(store) s := imap.NewServer(store) s.Transcript = os.Stdout