mirror of
https://github.com/redis/go-redis.git
synced 2025-11-10 00:00:57 +03:00
feat(acl): add acl support and test (#3576)
* feat: add acl support and command test * validate client name before kill it --------- Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
This commit is contained in:
@@ -8,8 +8,12 @@ type ACLCmdable interface {
|
||||
ACLLog(ctx context.Context, count int64) *ACLLogCmd
|
||||
ACLLogReset(ctx context.Context) *StatusCmd
|
||||
|
||||
ACLGenPass(ctx context.Context, bit int) *StringCmd
|
||||
|
||||
ACLSetUser(ctx context.Context, username string, rules ...string) *StatusCmd
|
||||
ACLDelUser(ctx context.Context, username string) *IntCmd
|
||||
ACLUsers(ctx context.Context) *StringSliceCmd
|
||||
ACLWhoAmI(ctx context.Context) *StringCmd
|
||||
ACLList(ctx context.Context) *StringSliceCmd
|
||||
|
||||
ACLCat(ctx context.Context) *StringSliceCmd
|
||||
@@ -65,6 +69,24 @@ func (c cmdable) ACLSetUser(ctx context.Context, username string, rules ...strin
|
||||
return cmd
|
||||
}
|
||||
|
||||
func (c cmdable) ACLGenPass(ctx context.Context, bit int) *StringCmd {
|
||||
cmd := NewStringCmd(ctx, "acl", "genpass")
|
||||
_ = c(ctx, cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
func (c cmdable) ACLUsers(ctx context.Context) *StringSliceCmd {
|
||||
cmd := NewStringSliceCmd(ctx, "acl", "users")
|
||||
_ = c(ctx, cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
func (c cmdable) ACLWhoAmI(ctx context.Context) *StringCmd {
|
||||
cmd := NewStringCmd(ctx, "acl", "whoami")
|
||||
_ = c(ctx, cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
func (c cmdable) ACLList(ctx context.Context) *StringSliceCmd {
|
||||
cmd := NewStringSliceCmd(ctx, "acl", "list")
|
||||
_ = c(ctx, cmd)
|
||||
|
||||
@@ -92,6 +92,21 @@ var _ = Describe("ACL user commands", Label("NonRedisEnterprise"), func() {
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0]).To(ContainSubstring("default"))
|
||||
|
||||
res, err = client.ACLUsers(ctx).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res).To(HaveLen(1))
|
||||
Expect(res[0]).To(Equal("default"))
|
||||
|
||||
res1, err := client.ACLWhoAmI(ctx).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(res1).To(Equal("default"))
|
||||
})
|
||||
|
||||
It("gen password", func() {
|
||||
password, err := client.ACLGenPass(ctx, 0).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(password).NotTo(BeEmpty())
|
||||
})
|
||||
|
||||
It("setuser and deluser", func() {
|
||||
|
||||
@@ -199,6 +199,29 @@ var _ = Describe("Commands", func() {
|
||||
Expect(r.Val()).To(Equal(int64(0)))
|
||||
})
|
||||
|
||||
It("should ClientKillByFilter with kill myself", func() {
|
||||
opt := redisOptions()
|
||||
opt.ClientName = "killmyid"
|
||||
db := redis.NewClient(opt)
|
||||
Expect(db.Ping(ctx).Err()).NotTo(HaveOccurred())
|
||||
|
||||
defer func() {
|
||||
Expect(db.Close()).NotTo(HaveOccurred())
|
||||
}()
|
||||
val, err := client.ClientList(ctx).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(val).Should(ContainSubstring("name=killmyid"))
|
||||
|
||||
myid := db.ClientID(ctx).Val()
|
||||
killed := client.ClientKillByFilter(ctx, "ID", strconv.FormatInt(myid, 10))
|
||||
Expect(killed.Err()).NotTo(HaveOccurred())
|
||||
Expect(killed.Val()).To(BeNumerically("==", 1))
|
||||
|
||||
val, err = client.ClientList(ctx).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(val).ShouldNot(ContainSubstring("name=killmyid"))
|
||||
})
|
||||
|
||||
It("should ClientKillByFilter with MAXAGE", Label("NonRedisEnterprise"), func() {
|
||||
SkipBeforeRedisVersion(7.4, "doesn't work with older redis stack images")
|
||||
var s []string
|
||||
|
||||
Reference in New Issue
Block a user