summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2017-05-01 12:59:52 +0200
committerChristian Pointner <equinox@spreadspace.org>2017-05-01 12:59:52 +0200
commit2d20d809f66be6139853fce52a711a0e67be43bd (patch)
treeba7823d783b043449d8bfe8be0d5ddddcf7726da
parentsome more tests... (diff)
some more open tests
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5store.go7
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5store_test.go181
2 files changed, 120 insertions, 68 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5store.go b/src/hub/src/spreadspace.org/sfive/s5store.go
index 426b46d..2266895 100644
--- a/src/hub/src/spreadspace.org/sfive/s5store.go
+++ b/src/hub/src/spreadspace.org/sfive/s5store.go
@@ -105,7 +105,9 @@ func openDb(dbPath string, readOnly bool) (db *bolt.DB, version int, hubUuid str
}
return nil
})
-
+ if err != nil {
+ db.Close()
+ }
return
}
@@ -136,6 +138,9 @@ func createDb(dbPath string) (db *bolt.DB, version int, hubUuid string, err erro
}
return nil
})
+ if err != nil {
+ db.Close()
+ }
return
}
diff --git a/src/hub/src/spreadspace.org/sfive/s5store_test.go b/src/hub/src/spreadspace.org/sfive/s5store_test.go
index 96f1847..180019c 100644
--- a/src/hub/src/spreadspace.org/sfive/s5store_test.go
+++ b/src/hub/src/spreadspace.org/sfive/s5store_test.go
@@ -58,6 +58,48 @@ var (
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}}
)
+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)
+
+ 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(clientsData))
+ d.DataUpdate.Data.BytesSent = 6400 * uint(len(clientsData))
+
+ d.DataUpdate.Data.Clients = clientsData
+ data = append(data, d)
+ }
+ }
+ }
+ }
+ starttime = starttime.Add(time.Duration(duration) * time.Millisecond)
+ }
+ return
+}
+
func TestMain(m *testing.M) {
u, err := user.Current()
if err != nil {
@@ -67,6 +109,10 @@ func TestMain(m *testing.M) {
os.Exit(m.Run())
}
+//
+// Testing
+//
+
func TestOpen(t *testing.T) {
// non-existing directory
if _, err := NewStore("/nonexistend/db.bolt", false); err == nil {
@@ -94,14 +140,27 @@ func TestOpen(t *testing.T) {
t.Fatalf("opening store using a invalid database should throw an error")
}
- // bolt db with wrong layout
+ // bolt db without HubInfo Bucket
os.Remove(testBoltPath)
+ db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond})
+ if err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ } else {
+ if err = db.Close(); err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ }
+ if _, err := NewStore(testBoltPath, false); err == nil {
+ t.Fatalf("opening store without HubInfo Bucket should throw an error")
+ }
+
+ // bolt db no version key
if db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond}); err != nil {
t.Fatalf("unexpected error: %v", err)
} else {
err = db.Update(func(tx *bolt.Tx) error {
- if _, err := tx.CreateBucket([]byte("invalid-key")); err != nil {
- t.Fatalf("unexpected error: %v", err)
+ if _, err := tx.CreateBucket([]byte(hubInfoBn)); err != nil {
+ return err
}
return nil
})
@@ -113,22 +172,39 @@ func TestOpen(t *testing.T) {
}
}
if _, err := NewStore(testBoltPath, false); err == nil {
- t.Fatalf("opening store using a invalid database should throw an error")
+ t.Fatalf("opening store without a database version should throw an error")
}
- // bolt db with wrong version
- os.Remove(testBoltPath)
+ // bolt db wrong version
if db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond}); err != nil {
t.Fatalf("unexpected error: %v", err)
} else {
err = db.Update(func(tx *bolt.Tx) error {
- b, err := tx.CreateBucket([]byte(hubInfoBn))
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
+ b := tx.Bucket([]byte(hubInfoBn))
+ if err := b.Put([]byte(storeVersionKey), itob(0)); err != nil {
+ return err
}
- err = b.Put([]byte(storeVersionKey), itob(0))
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
+ return nil
+ })
+ if err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ if err = db.Close(); err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ }
+ if _, err := NewStore(testBoltPath, false); err == nil {
+ t.Fatalf("opening store with wrong database version should throw an error")
+ }
+
+ // bolt db no UUID key
+ if db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond}); err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ } else {
+ err = db.Update(func(tx *bolt.Tx) error {
+ b := tx.Bucket([]byte(hubInfoBn))
+ if err := b.Put([]byte(storeVersionKey), itob(StoreVersion)); err != nil {
+ return err
}
return nil
})
@@ -140,26 +216,17 @@ func TestOpen(t *testing.T) {
}
}
if _, err := NewStore(testBoltPath, false); err == nil {
- t.Fatalf("opening store with the wrong database version should throw an error")
+ t.Fatalf("opening store without a database UUID should throw an error")
}
// bolt db empty UUID
- os.Remove(testBoltPath)
if db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond}); err != nil {
t.Fatalf("unexpected error: %v", err)
} else {
err = db.Update(func(tx *bolt.Tx) error {
- b, err := tx.CreateBucket([]byte(hubInfoBn))
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
- err = b.Put([]byte(storeVersionKey), itob(StoreVersion))
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
- }
- err = b.Put([]byte(hubUuidKey), []byte(""))
- if err != nil {
- t.Fatalf("unexpected error: %v", err)
+ b := tx.Bucket([]byte(hubInfoBn))
+ if err := b.Put([]byte(hubUuidKey), []byte("")); err != nil {
+ return err
}
return nil
})
@@ -174,6 +241,28 @@ func TestOpen(t *testing.T) {
t.Fatalf("opening store with empty UUID should throw an error")
}
+ // bolt db with missing buckets
+ if db, err := bolt.Open(testBoltPath, 0600, &bolt.Options{Timeout: 100 * time.Millisecond}); err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ } else {
+ err = db.Update(func(tx *bolt.Tx) error {
+ b := tx.Bucket([]byte(hubInfoBn))
+ if err := b.Put([]byte(hubUuidKey), []byte("6d1a2192-7cb6-404d-80fb-add9b40a8f33")); err != nil {
+ return err
+ }
+ return nil
+ })
+ if err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ if err = db.Close(); err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ }
+ if _, err := NewStore(testBoltPath, false); err == nil {
+ t.Fatalf("opening store with (some) buckets missing should throw an error")
+ }
+
// create new bolt-db and reopen it
os.Remove(testBoltPath)
store, err := NewStore(testBoltPath, false)
@@ -461,48 +550,6 @@ func TestForwardedDataUpdates(t *testing.T) {
// Benchmarking
//
-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)
-
- 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(clientsData))
- d.DataUpdate.Data.BytesSent = 6400 * uint(len(clientsData))
-
- d.DataUpdate.Data.Clients = clientsData
- data = append(data, d)
- }
- }
- }
- }
- starttime = starttime.Add(time.Duration(duration) * time.Millisecond)
- }
- return
-}
-
func BenchmarkAppendMany(b *testing.B) {
os.Remove(testBoltPath)
store, err := NewStore(testBoltPath, false)