Skip to content

Commit

Permalink
removed redis client getter from leaderboard public api
Browse files Browse the repository at this point in the history
  • Loading branch information
lucas-machado committed Jun 13, 2019
1 parent 9e62b88 commit 9eb4887
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 46 deletions.
3 changes: 1 addition & 2 deletions api/healthcheck_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ var _ = Describe("Healthcheck Handler", func() {
})

It("Should fail if redis failing", func() {
a := GetDefaultTestApp()
a.Leaderboards.RedisClient().Client = GetFaultyRedis()
a := GetDefaultTestAppWithFaultyRedis()

status, body := Get(a, "/healthcheck")

Expand Down
22 changes: 22 additions & 0 deletions api/helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,27 @@ import (
"net/http/httptest"
"time"

"github.com/spf13/viper"
"github.com/topfreegames/podium/leaderboard"

"github.com/go-redis/redis"

"github.com/labstack/echo/engine/standard"
. "github.com/onsi/gomega"
extredis "github.com/topfreegames/extensions/redis"
"github.com/topfreegames/podium/api"
"github.com/topfreegames/podium/testing"
"github.com/valyala/fasthttp"
)

func GetConnectedRedis() (*extredis.Client, error) {
config := viper.New()
config.Set("redis.url", "redis://localhost:1234/0")
config.Set("redis.connectionTimeout", 200)

return extredis.NewClient("redis", config)
}

//GetFaultyRedis returns an invalid connection to redis
func GetFaultyRedis() *redis.Client {
return redis.NewClient(&redis.Options{
Expand All @@ -53,6 +65,16 @@ func GetDefaultTestApp() *api.App {
return app
}

// GetFaultyTestApp returns a new podium API Application bound to 0.0.0.0:8890 for test but with a failing Redis
func GetDefaultTestAppWithFaultyRedis() *api.App {
app := GetDefaultTestApp()
faultyRedisClient, err := GetConnectedRedis()
Expect(err).NotTo(HaveOccurred())
faultyRedisClient.Client = GetFaultyRedis()
app.Leaderboards = leaderboard.NewClientWithRedis(faultyRedisClient)
return app
}

//Get from server
func Get(app *api.App, url string) (int, string) {
return doRequest(app, "GET", url, "")
Expand Down
70 changes: 30 additions & 40 deletions api/leaderboard_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import (
"strings"
"time"

"github.com/topfreegames/extensions/redis/interfaces"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
uuid "github.com/satori/go.uuid"
Expand All @@ -27,14 +29,17 @@ import (

var _ = Describe("Leaderboard Handler", func() {
var a *api.App
var redisClient interfaces.RedisClient
const testLeaderboardID = "testkey"

BeforeSuite(func() {
a = GetDefaultTestApp()
})

BeforeEach(func() {
redisClient := a.Leaderboards.RedisClient().Client
extRedisClient, err := GetConnectedRedis()
Expect(err).NotTo(HaveOccurred())
redisClient = extRedisClient.Client
redisClient.Del("testkey")
redisClient.Del("testkey1")
redisClient.Del("testkey2")
Expand Down Expand Up @@ -227,20 +232,20 @@ var _ = Describe("Leaderboard Handler", func() {
}

redisLBExpirationKey := fmt.Sprintf("%s:ttl", lbName)
result2, err := a.Leaderboards.RedisClient().Client.Exists(redisLBExpirationKey).Result()
result2, err := redisClient.Exists(redisLBExpirationKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result2).To(Equal(int64(1)))
redisExpirationSetKey := "expiration-sets"
result2, err = a.Leaderboards.RedisClient().Client.Exists(redisExpirationSetKey).Result()
result2, err = redisClient.Exists(redisExpirationSetKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result2).To(Equal(int64(1)))
result3, err := a.Leaderboards.RedisClient().Client.SMembers(redisExpirationSetKey).Result()
result3, err := redisClient.SMembers(redisExpirationSetKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result3).To(ContainElement(redisLBExpirationKey))
result4, err := a.Leaderboards.RedisClient().Client.ZScore(redisLBExpirationKey, "memberpublicid1").Result()
result4, err := redisClient.ZScore(redisLBExpirationKey, "memberpublicid1").Result()
Expect(err).NotTo(HaveOccurred())
Expect(result4).To(BeNumerically("~", time.Now().Unix()+int64(ttl), 1))
result5, err := a.Leaderboards.RedisClient().Client.ZScore(redisLBExpirationKey, "memberpublicid2").Result()
result5, err := redisClient.ZScore(redisLBExpirationKey, "memberpublicid2").Result()
Expect(err).NotTo(HaveOccurred())
Expect(result5).To(BeNumerically("~", time.Now().Unix()+int64(ttl), 1))

Expand Down Expand Up @@ -340,8 +345,7 @@ var _ = Describe("Leaderboard Handler", func() {
{"publicID": "memberpublicid1", "score": int64(0)},
{"publicID": "memberpublicid2", "score": int64(0)},
}}
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := PutJSON(app, "/l/testkey/scores", payload)
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -433,17 +437,17 @@ var _ = Describe("Leaderboard Handler", func() {
Expect(member.ExpireAt).To(BeNumerically("~", time.Now().Unix()+int64(ttl), 1))

redisLBExpirationKey := fmt.Sprintf("%s:ttl", lbName)
result2, err := a.Leaderboards.RedisClient().Client.Exists(redisLBExpirationKey).Result()
result2, err := redisClient.Exists(redisLBExpirationKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result2).To(Equal(int64(1)))
redisExpirationSetKey := "expiration-sets"
result2, err = a.Leaderboards.RedisClient().Client.Exists(redisExpirationSetKey).Result()
result2, err = redisClient.Exists(redisExpirationSetKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result2).To(Equal(int64(1)))
result3, err := a.Leaderboards.RedisClient().Client.SMembers(redisExpirationSetKey).Result()
result3, err := redisClient.SMembers(redisExpirationSetKey).Result()
Expect(err).NotTo(HaveOccurred())
Expect(result3).To(ContainElement(redisLBExpirationKey))
result4, err := a.Leaderboards.RedisClient().Client.ZScore(redisLBExpirationKey, "memberpublicid").Result()
result4, err := redisClient.ZScore(redisLBExpirationKey, "memberpublicid").Result()
Expect(err).NotTo(HaveOccurred())
Expect(result4).To(BeNumerically("~", time.Now().Unix()+int64(ttl), 1))
})
Expand Down Expand Up @@ -536,8 +540,7 @@ var _ = Describe("Leaderboard Handler", func() {
payload := map[string]interface{}{
"score": int64(100),
}
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := PutJSON(app, "/l/testkey/members/memberpublicid/score", payload)
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -645,8 +648,7 @@ var _ = Describe("Leaderboard Handler", func() {
payload := map[string]interface{}{
"increment": 100,
}
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := PatchJSON(app, "/l/testkey/members/memberpublicid/score", payload)
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -722,8 +724,7 @@ var _ = Describe("Leaderboard Handler", func() {
_, err := a.Leaderboards.SetMemberScore(NewEmptyCtx(), testLeaderboardID, "memberpublicid", 100, false, "")
Expect(err).NotTo(HaveOccurred())

app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Delete(app, "/l/testkey/members?ids=memberpublicid")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -847,8 +848,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/members/member_99")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -922,8 +922,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/members/member_99/rank")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1229,17 +1228,15 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/members/member_99/around")
Expect(status).To(Equal(500), body)
Expect(body).To(ContainSubstring("connection refused"))
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/members/member_99/around?getLastIfNotFound=true")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1479,8 +1476,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/scores/50/around")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1512,8 +1508,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/members-count")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1716,8 +1711,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error getting top members from Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/top/1")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1820,8 +1814,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(app, "/l/testkey/top-percent/10")
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -1944,8 +1937,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis when upserting many leaderboards", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

payload := map[string]interface{}{
"score": 100,
Expand Down Expand Up @@ -1998,8 +1990,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Delete(app, fmt.Sprintf("/l/%s", uuid.NewV4().String()))
Expect(status).To(Equal(500), body)
Expand Down Expand Up @@ -2106,8 +2097,7 @@ var _ = Describe("Leaderboard Handler", func() {
})

It("Should fail if error in Redis", func() {
app := GetDefaultTestApp()
app.Leaderboards.RedisClient().Client = GetFaultyRedis()
app := GetDefaultTestAppWithFaultyRedis()

status, body := Get(
app,
Expand Down
4 changes: 0 additions & 4 deletions leaderboard/leaderboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,6 @@ type Client struct {
redisClient *tfgredis.Client
}

func (c *Client) RedisClient() *tfgredis.Client {
return c.redisClient
}

func (c *Client) redisWithTracing(ctx context.Context) interfaces.RedisClient {
return c.redisClient.Trace(ctx)
}
Expand Down

0 comments on commit 9eb4887

Please sign in to comment.