From ab08af7c3a80d7cb15d00e2f809f9cd05f0fab93 Mon Sep 17 00:00:00 2001 From: Noah Hilverling Date: Tue, 5 Mar 2019 10:40:19 +0100 Subject: [PATCH] Redis: Add more tests --- redis_pubsub_test.go | 74 ++++++++++++++++++++++++++++++++++++++++ redis_test.go | 80 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 redis_pubsub_test.go diff --git a/redis_pubsub_test.go b/redis_pubsub_test.go new file mode 100644 index 00000000..34f6cbe9 --- /dev/null +++ b/redis_pubsub_test.go @@ -0,0 +1,74 @@ +package icingadb_connection + +import ( + "github.com/go-redis/redis" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +func TestPubSubWrapper(t *testing.T) { + rdb := redis.NewClient(&redis.Options{ + Addr: "127.0.0.1:6379", + DialTimeout: time.Minute / 2, + ReadTimeout: time.Minute, + WriteTimeout: time.Minute, + }) + rdbw := NewTestRDBW(rdb) + + if !rdbw.CheckConnection(true) { + t.Fatal("This test needs a working Redis connection") + } + + ps := rdbw.Subscribe() + + rdbw.CompareAndSetConnected(false) + + var errSubscribe error + done1:= make(chan bool) + go func () { + errSubscribe = ps.Subscribe("testchannel") + done1 <- true + }() + + time.Sleep(50 * time.Millisecond) + rdbw.CheckConnection(true) + + <- done1 + + rdbw.CompareAndSetConnected(false) + + var msg *redis.Message + var errReceive error + done2 := make(chan bool) + go func() { + msg, errReceive = ps.ReceiveMessage() + done2 <- true + }() + + time.Sleep(50 * time.Millisecond) + rdbw.CheckConnection(true) + + rdbw.Publish("testchannel", "Hello there") + + <- done2 + + rdbw.CompareAndSetConnected(false) + + var errClose error + done3:= make(chan bool) + go func () { + errClose = ps.Close() + done3 <- true + }() + + time.Sleep(50 * time.Millisecond) + rdbw.CheckConnection(true) + + <- done3 + + assert.NoError(t, errSubscribe) + assert.NoError(t, errReceive) + assert.NoError(t, errClose) + assert.Equal(t, "Hello there", msg.Payload) +} \ No newline at end of file diff --git a/redis_test.go b/redis_test.go index 272d1482..18810aab 100644 --- a/redis_test.go +++ b/redis_test.go @@ -193,3 +193,83 @@ func TestRDBWrapper_XDel(t *testing.T) { assert.Error(t, err) assert.Len(t, streams, 0) } + +func TestRDBWrapper_Publish(t *testing.T) { + rdb := redis.NewClient(&redis.Options{ + Addr: "127.0.0.1:6379", + DialTimeout: time.Minute / 2, + ReadTimeout: time.Minute, + WriteTimeout: time.Minute, + }) + rdbw := NewTestRDBW(rdb) + + if !rdbw.CheckConnection(true) { + t.Fatal("This test needs a working Redis connection") + } + + var msg *redis.Message + var err error + done := make(chan bool) + go func() { + msg, err = rdb.Subscribe("testchannel").ReceiveMessage() + done <- true + }() + + rdbw.CompareAndSetConnected(false) + + go func () { + rdbw.Publish("testchannel", "Hello there") + }() + + time.Sleep(50 * time.Millisecond) + rdbw.CheckConnection(true) + + <- done + + assert.NoError(t, err) + assert.Equal(t, "Hello there", msg.Payload) +} + +func TestRDBWrapper_TxPipelined(t *testing.T) { + rdb := redis.NewClient(&redis.Options{ + Addr: "127.0.0.1:6379", + DialTimeout: time.Minute / 2, + ReadTimeout: time.Minute, + WriteTimeout: time.Minute, + }) + rdbw := NewTestRDBW(rdb) + + if !rdbw.CheckConnection(true) { + t.Fatal("This test needs a working Redis connection") + } + + rdb.Del("firstKey") + rdb.Del("secondKey") + rdb.HSet("firstKey", "foo", 5) + rdb.HSet("secondKey", "bar", 11) + + rdbw.CompareAndSetConnected(false) + + var firstMap *redis.StringStringMapCmd + var secondMap *redis.StringStringMapCmd + var err error + done := make(chan bool) + go func() { + _, err = rdbw.TxPipelined(func(pipe redis.Pipeliner) error { + firstMap = pipe.HGetAll("firstKey") + secondMap = pipe.HGetAll("secondKey") + return nil + }) + done <- true + }() + + time.Sleep(50 * time.Millisecond) + rdbw.CheckConnection(true) + + <- done + + assert.NoError(t, err) + assert.Contains(t, firstMap.Val(), "foo") + assert.Contains(t, secondMap.Val(), "bar") + +}