// pipelineDatabase connects to a Redis database with the given options // and returns a pipeling and a function for closing. This function // shall be called with a defer. func pipelineDatabase(assert audit.Assertion, options ...redis.Option) (*redis.Pipeline, func()) { // Open and connect database. options = append(options, redis.Index(testDatabaseIndex, "")) db, err := redis.Open(options...) assert.Nil(err) ppl, err := db.Pipeline() assert.Nil(err) // Return pipeline and cleanup function. return ppl, func() { db.Close() } }
// subscribeDatabase connects to a Redis database with the given options // and returns a subscription and a function for closing. This function // shall be called with a defer. func subscribeDatabase(assert audit.Assertion, options ...redis.Option) (*redis.Subscription, func()) { // Open and connect database. options = append(options, redis.Index(testDatabaseIndex, "")) db, err := redis.Open(options...) assert.Nil(err) sub, err := db.Subscription() assert.Nil(err) // Return subscription and cleanup function. return sub, func() { sub.Close() db.Close() } }
// connectDatabase connects to a Redis database with the given options // and returns a connection and a function for closing. This function // shall be called with defer. func connectDatabase(assert audit.Assertion, options ...redis.Option) (*redis.Connection, func()) { // Open and connect database. options = append(options, redis.Index(testDatabaseIndex, "")) db, err := redis.Open(options...) assert.Nil(err) conn, err := db.Connection() assert.Nil(err) // Flush all keys to get a clean testing environment. _, err = conn.Do("flushdb") assert.Nil(err) // Return connection and cleanup function. return conn, func() { conn.Return() db.Close() } }
func TestOptions(t *testing.T) { assert := audit.NewTestingAssertion(t, true) db, err := redis.Open(redis.UnixConnection("", 0), redis.PoolSize(5)) assert.Nil(err) defer db.Close() options := db.Options() assert.Equal(options.Address, "/tmp/redis.sock") assert.Equal(options.Network, "unix") assert.Equal(options.Timeout, 30*time.Second) assert.Equal(options.Index, 0) assert.Equal(options.Password, "") assert.Equal(options.PoolSize, 5) assert.Equal(options.Logging, false) assert.Equal(options.Monitoring, false) }
func TestConcurrency(t *testing.T) { assert := audit.NewTestingAssertion(t, true) db, err := redis.Open(redis.UnixConnection("", 0), redis.PoolSize(5)) assert.Nil(err) defer db.Close() for i := 0; i < 500; i++ { go func() { conn, err := db.Connection() assert.Nil(err) defer conn.Return() result, err := conn.Do("ping") assert.Nil(err) assertEqualString(assert, result, 0, "+PONG") time.Sleep(10 * time.Millisecond) }() } }