summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5store_test.go243
1 files changed, 121 insertions, 122 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5store_test.go b/src/hub/src/spreadspace.org/sfive/s5store_test.go
index f0b9d1c..67557d4 100644
--- a/src/hub/src/spreadspace.org/sfive/s5store_test.go
+++ b/src/hub/src/spreadspace.org/sfive/s5store_test.go
@@ -37,6 +37,7 @@ import (
"io"
"os"
"os/user"
+ "reflect"
"testing"
"time"
@@ -186,7 +187,7 @@ func TestOpen(t *testing.T) {
store.Close()
}
-func TestAppend(t *testing.T) {
+func TestAppendAndFetch(t *testing.T) {
os.Remove(__boltPath)
store, err := NewStore(__boltPath, false)
if err != nil {
@@ -194,40 +195,38 @@ func TestAppend(t *testing.T) {
}
defer store.Close()
- startTime := time.Date(2014, time.August, 24, 14, 35, 33, 847282000, time.UTC)
- update := DataUpdate{Data: SourceData{ClientCount: 3, BytesReceived: 42, BytesSent: 3 * 42}, StartTime: startTime, Duration: 5000}
+ startTime := time.Date(2014, time.August, 24, 14, 35, 33, 847000000, time.UTC)
streamId := StreamId{ContentId: "talkingheads", Format: "7bitascii", Quality: "high"}
source := SourceId{Hostname: "streamer", Tags: []string{"tag1", "master"}, StreamId: streamId}
- dat := DataUpdateFull{ProtocolVersion, "", -1, source, update}
+ clients := []ClientData{ClientData{Ip: "1.2.3.4", UserAgent: "Mozilla Firefox", BytesSent: 48},
+ ClientData{Ip: "5.6.7.8", UserAgent: "Google Chrome", BytesSent: 52},
+ ClientData{Ip: "4.3.2.1", UserAgent: "Apple Safari", BytesSent: 36}}
+ update := DataUpdate{Data: SourceData{ClientCount: 3, BytesReceived: 42, BytesSent: 136, Clients: clients}, StartTime: startTime, Duration: 5000}
+ in := DataUpdateFull{0, "", -1, source, update}
+
+ if err = store.Append(in); err != nil {
+ t.Fatalf("Failed to append update: %v", err)
+ }
- err = store.Append(dat)
+ out, err := store.GetUpdate(1)
if err != nil {
- t.Fatalf("Failed to append: %v", err)
+ t.Fatalf("Failed to fetch update: %v", err)
+
+ }
+ out.StartTime = out.StartTime.UTC() // this should be handled by the protocol encoder
+
+ expected := in
+ expected.SourceHubUuid = store.GetStoreId()
+ expected.SourceHubDataUpdateId = 1
+
+ if !reflect.DeepEqual(expected, out) {
+ t.Fatalf("should have been equal\nactual: %v\nexpected: %v\n", out, expected)
}
-}
-// func TestGetUpdatesAfter(t *testing.T) {
-// os.Remove(__boltPath)
-// store, err := NewStore(__boltPath, false)
-// if err != nil {
-// t.Fatalf("Failed to initialize: %v", err)
-// }
-// defer store.Close()
-
-// startTime := time.Date(2014, time.August, 24, 14, 35, 33, 847282000, time.UTC)
-// update := DataUpdate{Data: SourceData{BytesSent: 1, ClientCount: 3, BytesReceived: 1}, StartTime: startTime, Duration: 5000}
-// streamId := StreamId{ContentId: "content", Format: "7bitascii", Quality: QualityHigh}
-// source := SourceId{Hostname: "localhost", Tags: []string{"tag1", "master"}, StreamId: streamId, Version: 1}
-// dat := DataUpdateFull{"", -1, source, update}
-
-// err = store.Append(dat)
-// if err != nil {
-// t.Fatalf("Failed to append: %v", err)
-// }
-
-// res, err := store.GetUpdatesAfter(2, -1)
-// t.Logf("got updates (err %v):\n%#v", err, res)
-// }
+ //
+ // TODO: more example data
+ //
+}
func TestReadOnly(t *testing.T) {
// create read-only db from not-existing file must fail
@@ -254,96 +253,96 @@ func TestReadOnly(t *testing.T) {
//
}
-// func generateDataUpdateFull(n int) (data []DataUpdateFull) {
-// hostnames := []string{"streamer1", "streamer2"}
-// contents := []string{"av", "audio"}
-// formats := []string{"webm", "flash", "hls"}
-// qualities := []string{"high", "medium", "low"}
-
-// numcombis := len(hostnames) * len(contents) * len(formats) * len(qualities)
-
-// clients := []ClientData{
-// ClientData{"127.0.0.1", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0", 6400},
-// ClientData{"10.12.0.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400},
-// ClientData{"127.0.0.1", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0", 6400},
-// ClientData{"192.168.0.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400},
-// ClientData{"172.16.0.2", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400}}
-// starttime := time.Now()
-// duration := int64(15000)
-// tags := []string{"2017", "elevate", "discourse"}
-
-// for i := 0; i < n; i += numcombis {
-// for _, hostname := range hostnames {
-// for _, content := range contents {
-// for _, format := range formats {
-// for _, quality := range qualities {
-// d := DataUpdateFull{}
-// d.SourceId.Version = 1
-// d.SourceId.Hostname = hostname
-// d.SourceId.Tags = tags
-
-// d.SourceId.StreamId.ContentId = content
-// d.SourceId.StreamId.Format = format
-// d.SourceId.StreamId.Quality = quality
-
-// d.DataUpdate.StartTime = starttime
-// d.DataUpdate.Duration = duration
-// d.DataUpdate.Data.ClientCount = uint(len(clients))
-// d.DataUpdate.Data.BytesSent = 6400 * uint(len(clients))
-
-// for _, client := range clients {
-// c := ClientData{client.Ip, client.UserAgent, client.BytesSent}
-// d.DataUpdate.Data.Clients = append(d.DataUpdate.Data.Clients, c)
-// }
-// data = append(data, d)
-// }
-// }
-// }
-// }
-// starttime = starttime.Add(time.Duration(duration) * time.Millisecond)
-// }
-// return
-// }
-
-// func BenchmarkAppendMany(b *testing.B) {
-// os.Remove(__boltPath)
-// store, err := NewStore(__boltPath, false)
-// if err != nil {
-// b.Fatalf("Failed to initialize: %v", err)
-// }
-// defer store.Close()
-// data := generateDataUpdateFull(b.N)
-
-// b.ResetTimer()
-
-// if err := store.AppendMany(data); err != nil {
-// b.Fatalf("Failed to append: %v", err)
-// }
-// }
-
-// func BenchmarkGetUpdatesAfter(b *testing.B) {
-// os.Remove(__boltPath)
-// store, err := NewStore(__boltPath, false)
-// if err != nil {
-// b.Fatalf("Failed to initialize: %v", err)
-// }
-// defer store.Close()
-// data := generateDataUpdateFull(b.N)
-// if err := store.AppendMany(data); err != nil {
-// b.Fatalf("Failed to append: %v", err)
-// }
-
-// b.ResetTimer()
-
-// latestId := -1
-// for {
-// updates, err := store.GetUpdatesAfter(latestId, -1)
-// if err != nil {
-// b.Fatalf("Failed to retrieve: %v", err)
-// }
-// if len(updates) == 0 {
-// break
-// }
-// latestId = findMaxId(updates)
-// }
-// }
+func generateDataUpdateFull(n int) (data []DataUpdateFull) {
+ hostnames := []string{"streamer1", "streamer2"}
+ contents := []string{"av", "audio"}
+ formats := []string{"webm", "flash", "hls"}
+ qualities := []string{"high", "medium", "low"}
+
+ numcombis := len(hostnames) * len(contents) * len(formats) * len(qualities)
+
+ clients := []ClientData{
+ ClientData{"127.0.0.1", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0", 6400},
+ ClientData{"10.12.0.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400},
+ ClientData{"127.0.0.1", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0", 6400},
+ ClientData{"192.168.0.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400},
+ ClientData{"172.16.0.2", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/57.0.2987.98 Chrome/57.0.2987.98 Safari/537.36", 6400}}
+ starttime := time.Now()
+ duration := int64(15000)
+ tags := []string{"2017", "elevate", "discourse"}
+
+ for i := 0; i < n; i += numcombis {
+ for _, hostname := range hostnames {
+ for _, content := range contents {
+ for _, format := range formats {
+ for _, quality := range qualities {
+ d := DataUpdateFull{}
+ d.Version = 1
+
+ d.SourceId.Hostname = hostname
+ d.SourceId.Tags = tags
+ d.SourceId.StreamId.ContentId = content
+ d.SourceId.StreamId.Format = format
+ d.SourceId.StreamId.Quality = quality
+
+ d.DataUpdate.StartTime = starttime
+ d.DataUpdate.Duration = duration
+ d.DataUpdate.Data.ClientCount = uint(len(clients))
+ d.DataUpdate.Data.BytesSent = 6400 * uint(len(clients))
+
+ for _, client := range clients {
+ c := ClientData{client.Ip, client.UserAgent, client.BytesSent}
+ d.DataUpdate.Data.Clients = append(d.DataUpdate.Data.Clients, c)
+ }
+ data = append(data, d)
+ }
+ }
+ }
+ }
+ starttime = starttime.Add(time.Duration(duration) * time.Millisecond)
+ }
+ return
+}
+
+func BenchmarkAppendMany(b *testing.B) {
+ os.Remove(__boltPath)
+ store, err := NewStore(__boltPath, false)
+ if err != nil {
+ b.Fatalf("Failed to initialize: %v", err)
+ }
+ defer store.Close()
+ data := generateDataUpdateFull(b.N)
+
+ b.ResetTimer()
+
+ if err := store.AppendMany(data); err != nil {
+ b.Fatalf("Failed to append: %v", err)
+ }
+}
+
+func BenchmarkGetUpdatesAfter(b *testing.B) {
+ os.Remove(__boltPath)
+ store, err := NewStore(__boltPath, false)
+ if err != nil {
+ b.Fatalf("Failed to initialize: %v", err)
+ }
+ defer store.Close()
+ data := generateDataUpdateFull(b.N)
+ if err := store.AppendMany(data); err != nil {
+ b.Fatalf("Failed to append: %v", err)
+ }
+
+ b.ResetTimer()
+
+ latestId := -1
+ for {
+ updates, err := store.GetUpdatesAfter(latestId, -1)
+ if err != nil {
+ b.Fatalf("Failed to retrieve: %v", err)
+ }
+ if len(updates) == 0 {
+ break
+ }
+ latestId = findMaxId(updates)
+ }
+}