Skip to content
This repository has been archived by the owner on Mar 31, 2019. It is now read-only.

Commit

Permalink
using channels to sync up between operations in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
zabawaba99 committed Oct 23, 2016
1 parent 6788375 commit 500f61f
Showing 1 changed file with 44 additions and 12 deletions.
56 changes: 44 additions & 12 deletions event_callback_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,48 +53,59 @@ func TestChildAdded(t *testing.T) {
server.Set("something", true)
server.Set("AAA", "foo")

// use this to sync up between different events
notifications := make(chan Event)
err := fb.Watch(notifications)
require.NoError(t, err)
<-notifications

var results []testEvent
var mtx syncc.Mutex
fn := func(snapshot DataSnapshot, previousChildKey string) {
mtx.Lock()
results = append(results, testEvent{snapshot, previousChildKey})
mtx.Unlock()
}
err := fb.ChildAdded(fn)
err = fb.ChildAdded(fn)
require.NoError(t, err)

// should get regular addition events
err = fb.Child("foo").Set(2)
require.NoError(t, err)
<-notifications

err = fb.Set(map[string]string{"lala": "faa", "alal": "aaf"})
require.NoError(t, err)
<-notifications

err = fb.Child("bar").Set(map[string]string{"hi": "mom"})
require.NoError(t, err)
<-notifications

fbChild, err := fb.Push("gaga oh la la")
require.NoError(t, err)
pushKey := strings.TrimPrefix(fbChild.url, fb.url+"/")
<-notifications

// should not get updates
err = fb.Child("foo").Set(false)
require.NoError(t, err)
<-notifications

// or deletes
err = fb.Child("bar").Remove()
require.NoError(t, err)
<-notifications

// should get a notification after adding a deleted field
err = fb.Child("bar").Set("something-else")
require.NoError(t, err)
<-notifications

// should not get notifications for addition to a child not
err = fb.Child("bar/child").Set(true)
require.NoError(t, err)

// wait for all notifications to come down
time.Sleep(time.Millisecond)
<-notifications

expected := []testEvent{
{newSnapshot(sync.NewNode("AAA", "foo")), ""},
Expand Down Expand Up @@ -134,44 +145,54 @@ func TestChildChanged(t *testing.T) {
server.Set("alal", "3333")
server.Set("bar", 12123123123)

// use this to sync up between different events
notifications := make(chan Event)
err := fb.Watch(notifications)
require.NoError(t, err)
<-notifications

var results []testEvent
var mtx syncc.Mutex
fn := func(snapshot DataSnapshot, previousChildKey string) {
mtx.Lock()
results = append(results, testEvent{snapshot, previousChildKey})
mtx.Unlock()
}
err := fb.ChildChanged(fn)
err = fb.ChildChanged(fn)
require.NoError(t, err)

// should get regular update events
err = fb.Child("foo").Set(2)
require.NoError(t, err)
<-notifications

err = fb.Set(map[string]string{"lala": "faa", "alal": "aaf"})
require.NoError(t, err)
<-notifications

err = fb.Child("bar").Set(map[string]string{"hi": "mom"})
require.NoError(t, err)
<-notifications

// should not get push
_, err = fb.Push("gaga oh la la")
require.NoError(t, err)
<-notifications

// should not get adds
err = fb.Child("foo123123").Set(false)
require.NoError(t, err)
<-notifications

// or deletes
err = fb.Child("something").Remove()
require.NoError(t, err)
<-notifications

// should not get notifications for addition to a child
err = fb.Child("bar/child").Set(true)
require.NoError(t, err)

// wait for all notifications to come down
time.Sleep(time.Millisecond)
<-notifications

expected := []testEvent{
{newSnapshot(sync.NewNode("foo", float64(2))), ""},
Expand Down Expand Up @@ -204,43 +225,54 @@ func TestChildRemoved(t *testing.T) {
server.Set("foo/something", true)
server.Set("foo/AAA", "foo")

// use this to sync up between different events
notifications := make(chan Event)
err := fb.Watch(notifications)
require.NoError(t, err)
<-notifications

var results []testEvent
var mtx syncc.Mutex
fn := func(snapshot DataSnapshot, previousChildKey string) {
mtx.Lock()
results = append(results, testEvent{snapshot, previousChildKey})
mtx.Unlock()
}
err := fb.ChildRemoved(fn)
err = fb.ChildRemoved(fn)
require.NoError(t, err)

// should get regular deletion events
err = fb.Child("AAA").Remove()
require.NoError(t, err)
<-notifications

err = fb.Child("something").Remove()
require.NoError(t, err)
<-notifications

// should get event for something that was deleted that
// was created after connection was established
err = fb.Child("foobar").Set("eep!")
require.NoError(t, err)
<-notifications

err = fb.Child("foobar").Remove()
require.NoError(t, err)
<-notifications

err = fb.Child("troll1").Set("yes1")
require.NoError(t, err)
<-notifications
err = fb.Child("troll2").Set("yes2")
require.NoError(t, err)
<-notifications
err = fb.Child("troll3").Set("yes3")
require.NoError(t, err)
<-notifications

err = fb.Remove()
require.NoError(t, err)

// wait for all notifications to come down
time.Sleep(time.Millisecond)
<-notifications

expected := []testEvent{
{newSnapshot(sync.NewNode("AAA", "foo")), ""},
Expand Down

0 comments on commit 500f61f

Please sign in to comment.