notifications_test.go 1.14 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
package notifications

import (
	"bytes"
	"testing"
	"time"

	context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
	blocks "github.com/jbenet/go-ipfs/blocks"
)

func TestPublishSubscribe(t *testing.T) {
13
	blockSent := blocks.NewBlock([]byte("Greetings from The Interval"))
14 15 16 17 18

	n := New()
	defer n.Shutdown()
	ch := n.Subscribe(context.Background(), blockSent.Key())

19
	n.Publish(*blockSent)
20 21 22 23 24
	blockRecvd, ok := <-ch
	if !ok {
		t.Fail()
	}

25
	assertBlocksEqual(t, blockRecvd, *blockSent)
26 27 28 29 30 31 32 33 34 35

}

func TestCarryOnWhenDeadlineExpires(t *testing.T) {

	impossibleDeadline := time.Nanosecond
	fastExpiringCtx, _ := context.WithTimeout(context.Background(), impossibleDeadline)

	n := New()
	defer n.Shutdown()
36
	block := blocks.NewBlock([]byte("A Missed Connection"))
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
	blockChannel := n.Subscribe(fastExpiringCtx, block.Key())

	assertBlockChannelNil(t, blockChannel)
}

func assertBlockChannelNil(t *testing.T, blockChannel <-chan blocks.Block) {
	_, ok := <-blockChannel
	if ok {
		t.Fail()
	}
}

func assertBlocksEqual(t *testing.T, a, b blocks.Block) {
	if !bytes.Equal(a.Data, b.Data) {
		t.Fail()
	}
	if a.Key() != b.Key() {
		t.Fail()
	}
}