mirror of
https://github.com/redis/go-redis.git
synced 2025-06-12 14:21:52 +03:00
feat: Enable CI for Redis CE 8.0 (#3274)
* chore: extract benchmark tests * wip * enable pubsub tests * enable ring tests * stop tests with build redis from source * start all tests * mix of makefile and action * add sentinel configs * fix example test * stop debug on re * wip * enable gears for redis 7.2 * wip * enable sentinel, they are expected to fail * fix: linter configuration * chore: update re versions * return older redis enterprise version * add basic codeql * wip: increase timeout, focus only sentinel tests * sentinels with docker network host * enable all tests * fix flanky test * enable example tests * tidy docker compose * add debug output * stop shutingdown masters * don't test sentinel for re * skip unsuported addscores * Update README bump go version in CI * Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CONTRIBUTING.md add information about new test setup --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@ -194,6 +194,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should ClientKillByFilter with MAXAGE", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
var s []string
|
||||
started := make(chan bool)
|
||||
done := make(chan bool)
|
||||
@ -211,18 +212,18 @@ var _ = Describe("Commands", func() {
|
||||
select {
|
||||
case <-done:
|
||||
Fail("BLPOP is not blocked.")
|
||||
case <-time.After(1 * time.Second):
|
||||
case <-time.After(1100 * time.Millisecond):
|
||||
// ok
|
||||
}
|
||||
|
||||
killed := client.ClientKillByFilter(ctx, "MAXAGE", "1")
|
||||
Expect(killed.Err()).NotTo(HaveOccurred())
|
||||
Expect(killed.Val()).To(BeNumerically(">=", 2))
|
||||
Expect(killed.Val()).To(BeNumerically(">=", 1))
|
||||
|
||||
select {
|
||||
case <-done:
|
||||
// ok
|
||||
case <-time.After(time.Second):
|
||||
case <-time.After(200 * time.Millisecond):
|
||||
Fail("BLPOP is still blocked.")
|
||||
}
|
||||
})
|
||||
@ -345,7 +346,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should ConfigGet Modules", func() {
|
||||
SkipBeforeRedisMajor(8, "Config doesn't include modules before Redis 8")
|
||||
SkipBeforeRedisVersion(8, "Config doesn't include modules before Redis 8")
|
||||
expected := map[string]string{
|
||||
"search-*": "search-timeout",
|
||||
"ts-*": "ts-retention-policy",
|
||||
@ -380,7 +381,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should ConfigGet with Modules", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisMajor(8, "config get won't return modules configs before redis 8")
|
||||
SkipBeforeRedisVersion(8, "config get won't return modules configs before redis 8")
|
||||
configGet := client.ConfigGet(ctx, "*")
|
||||
Expect(configGet.Err()).NotTo(HaveOccurred())
|
||||
Expect(configGet.Val()).To(HaveKey("maxmemory"))
|
||||
@ -391,7 +392,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should ConfigSet FT DIALECT", func() {
|
||||
SkipBeforeRedisMajor(8, "config doesn't include modules before Redis 8")
|
||||
SkipBeforeRedisVersion(8, "config doesn't include modules before Redis 8")
|
||||
defaultState, err := client.ConfigGet(ctx, "search-default-dialect").Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
@ -437,13 +438,13 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should ConfigSet fail for ReadOnly", func() {
|
||||
SkipBeforeRedisMajor(8, "Config doesn't include modules before Redis 8")
|
||||
SkipBeforeRedisVersion(8, "Config doesn't include modules before Redis 8")
|
||||
_, err := client.ConfigSet(ctx, "search-max-doctablesize", "100000").Result()
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
|
||||
It("should ConfigSet Modules", func() {
|
||||
SkipBeforeRedisMajor(8, "Config doesn't include modules before Redis 8")
|
||||
SkipBeforeRedisVersion(8, "Config doesn't include modules before Redis 8")
|
||||
defaults := map[string]string{}
|
||||
expected := map[string]string{
|
||||
"search-timeout": "100",
|
||||
@ -484,7 +485,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should Fail ConfigSet Modules", func() {
|
||||
SkipBeforeRedisMajor(8, "Config doesn't include modules before Redis 8")
|
||||
SkipBeforeRedisVersion(8, "Config doesn't include modules before Redis 8")
|
||||
expected := map[string]string{
|
||||
"search-timeout": "-100",
|
||||
"ts-retention-policy": "-10",
|
||||
@ -533,7 +534,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should Info Modules", Label("redis.info"), func() {
|
||||
SkipBeforeRedisMajor(8, "modules are included in info for Redis Version >= 8")
|
||||
SkipBeforeRedisVersion(8, "modules are included in info for Redis Version >= 8")
|
||||
info := client.Info(ctx)
|
||||
Expect(info.Err()).NotTo(HaveOccurred())
|
||||
Expect(info.Val()).NotTo(BeNil())
|
||||
@ -558,7 +559,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should InfoMap Modules", Label("redis.info"), func() {
|
||||
SkipBeforeRedisMajor(8, "modules are included in info for Redis Version >= 8")
|
||||
SkipBeforeRedisVersion(8, "modules are included in info for Redis Version >= 8")
|
||||
info := client.InfoMap(ctx)
|
||||
Expect(info.Err()).NotTo(HaveOccurred())
|
||||
Expect(info.Val()).NotTo(BeNil())
|
||||
@ -701,8 +702,8 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
})
|
||||
|
||||
Describe("debugging", func() {
|
||||
PIt("should DebugObject", func() {
|
||||
Describe("debugging", Label("NonRedisEnterprise"), func() {
|
||||
It("should DebugObject", func() {
|
||||
err := client.DebugObject(ctx, "foo").Err()
|
||||
Expect(err).To(MatchError("ERR no such key"))
|
||||
|
||||
@ -1332,6 +1333,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HScan without values", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
for i := 0; i < 1000; i++ {
|
||||
sadd := client.HSet(ctx, "myhash", fmt.Sprintf("key%d", i), "hello")
|
||||
Expect(sadd.Err()).NotTo(HaveOccurred())
|
||||
@ -2625,6 +2627,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HExpire", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
res, err := client.HExpire(ctx, "no_such_key", 10*time.Second, "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(res).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2640,6 +2643,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HPExpire", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
res, err := client.HPExpire(ctx, "no_such_key", 10*time.Second, "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(res).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2655,6 +2659,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HExpireAt", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HExpireAt(ctx, "no_such_key", time.Now().Add(10*time.Second), "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2670,6 +2675,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HPExpireAt", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HPExpireAt(ctx, "no_such_key", time.Now().Add(10*time.Second), "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2685,6 +2691,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HPersist", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HPersist(ctx, "no_such_key", "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2708,6 +2715,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HExpireTime", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HExpireTime(ctx, "no_such_key", "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2727,6 +2735,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HPExpireTime", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HPExpireTime(ctx, "no_such_key", "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2747,6 +2756,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HTTL", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HTTL(ctx, "no_such_key", "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -2766,6 +2776,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should HPTTL", Label("hash-expiration", "NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
resEmpty, err := client.HPTTL(ctx, "no_such_key", "field1", "field2", "field3").Result()
|
||||
Expect(err).To(BeNil())
|
||||
Expect(resEmpty).To(BeEquivalentTo([]int64{-2, -2, -2}))
|
||||
@ -6040,6 +6051,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should XRead LastEntry", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
res, err := client.XRead(ctx, &redis.XReadArgs{
|
||||
Streams: []string{"stream"},
|
||||
Count: 2, // we expect 1 message
|
||||
@ -6057,6 +6069,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should XRead LastEntry from two streams", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
res, err := client.XRead(ctx, &redis.XReadArgs{
|
||||
Streams: []string{"stream", "stream"},
|
||||
ID: "+",
|
||||
@ -6079,6 +6092,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("should XRead LastEntry blocks", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
start := time.Now()
|
||||
go func() {
|
||||
defer GinkgoRecover()
|
||||
@ -6614,14 +6628,12 @@ var _ = Describe("Commands", func() {
|
||||
|
||||
res, err := client.ZRangeWithScores(ctx, "result", 0, -1).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res).To(ContainElement(redis.Z{
|
||||
Score: 190.44242984775784,
|
||||
Member: "Palermo",
|
||||
}))
|
||||
Expect(res).To(ContainElement(redis.Z{
|
||||
Score: 56.4412578701582,
|
||||
Member: "Catania",
|
||||
}))
|
||||
Expect(len(res)).To(Equal(2))
|
||||
var palermo, catania redis.Z
|
||||
Expect(res).To(ContainElement(HaveField("Member", "Palermo"), &palermo))
|
||||
Expect(res).To(ContainElement(HaveField("Member", "Catania"), &catania))
|
||||
Expect(palermo.Score).To(BeNumerically("~", 190, 1))
|
||||
Expect(catania.Score).To(BeNumerically("~", 56, 1))
|
||||
})
|
||||
|
||||
It("should search geo radius with options", func() {
|
||||
@ -6933,16 +6945,13 @@ var _ = Describe("Commands", func() {
|
||||
|
||||
v, err := client.ZRangeWithScores(ctx, "key2", 0, -1).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(v).To(Equal([]redis.Z{
|
||||
{
|
||||
Score: 56.441257870158204,
|
||||
Member: "Catania",
|
||||
},
|
||||
{
|
||||
Score: 190.44242984775784,
|
||||
Member: "Palermo",
|
||||
},
|
||||
}))
|
||||
|
||||
Expect(len(v)).To(Equal(2))
|
||||
var palermo, catania redis.Z
|
||||
Expect(v).To(ContainElement(HaveField("Member", "Palermo"), &palermo))
|
||||
Expect(v).To(ContainElement(HaveField("Member", "Catania"), &catania))
|
||||
Expect(palermo.Score).To(BeNumerically("~", 190, 1))
|
||||
Expect(catania.Score).To(BeNumerically("~", 56, 1))
|
||||
})
|
||||
})
|
||||
|
||||
@ -7332,6 +7341,7 @@ var _ = Describe("Commands", func() {
|
||||
})
|
||||
|
||||
It("Shows function stats", func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
defer client.FunctionKill(ctx)
|
||||
|
||||
// We can not run blocking commands in Redis functions, so we're using an infinite loop,
|
||||
|
Reference in New Issue
Block a user