mirror of
https://github.com/redis/go-redis.git
synced 2025-06-12 14:21:52 +03:00
feat(command): add ACL commands, validate module categories exist (#3262)
* add ACL{SetUser,DelUser,List} commands * test presence of categories in acl cat * code cleanup * add basic acl tests * add acl modules tests * reset acl log before test * refactor acl tests * fix clientkillbyage test
This commit is contained in:
@ -211,13 +211,13 @@ var _ = Describe("Commands", func() {
|
||||
select {
|
||||
case <-done:
|
||||
Fail("BLPOP is not blocked.")
|
||||
case <-time.After(2 * time.Second):
|
||||
case <-time.After(1 * time.Second):
|
||||
// ok
|
||||
}
|
||||
|
||||
killed := client.ClientKillByFilter(ctx, "MAXAGE", "1")
|
||||
Expect(killed.Err()).NotTo(HaveOccurred())
|
||||
Expect(killed.Val()).To(SatisfyAny(Equal(int64(2)), Equal(int64(3))))
|
||||
Expect(killed.Val()).To(SatisfyAny(Equal(int64(2)), Equal(int64(3)), Equal(int64(4))))
|
||||
|
||||
select {
|
||||
case <-done:
|
||||
@ -2228,12 +2228,6 @@ var _ = Describe("Commands", func() {
|
||||
Expect(replace.Val()).To(Equal(int64(1)))
|
||||
})
|
||||
|
||||
It("should acl dryrun", func() {
|
||||
dryRun := client.ACLDryRun(ctx, "default", "get", "randomKey")
|
||||
Expect(dryRun.Err()).NotTo(HaveOccurred())
|
||||
Expect(dryRun.Val()).To(Equal("OK"))
|
||||
})
|
||||
|
||||
It("should fail module loadex", Label("NonRedisEnterprise"), func() {
|
||||
dryRun := client.ModuleLoadex(ctx, &redis.ModuleLoadexConfig{
|
||||
Path: "/path/to/non-existent-library.so",
|
||||
@ -2281,51 +2275,6 @@ var _ = Describe("Commands", func() {
|
||||
|
||||
Expect(args).To(Equal(expectedArgs))
|
||||
})
|
||||
|
||||
It("should ACL LOG", Label("NonRedisEnterprise"), func() {
|
||||
err := client.Do(ctx, "acl", "setuser", "test", ">test", "on", "allkeys", "+get").Err()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
|
||||
clientAcl := redis.NewClient(redisOptions())
|
||||
clientAcl.Options().Username = "test"
|
||||
clientAcl.Options().Password = "test"
|
||||
clientAcl.Options().DB = 0
|
||||
_ = clientAcl.Set(ctx, "mystring", "foo", 0).Err()
|
||||
_ = clientAcl.HSet(ctx, "myhash", "foo", "bar").Err()
|
||||
_ = clientAcl.SAdd(ctx, "myset", "foo", "bar").Err()
|
||||
|
||||
logEntries, err := client.ACLLog(ctx, 10).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(len(logEntries)).To(Equal(4))
|
||||
|
||||
for _, entry := range logEntries {
|
||||
Expect(entry.Reason).To(Equal("command"))
|
||||
Expect(entry.Context).To(Equal("toplevel"))
|
||||
Expect(entry.Object).NotTo(BeEmpty())
|
||||
Expect(entry.Username).To(Equal("test"))
|
||||
Expect(entry.AgeSeconds).To(BeNumerically(">=", 0))
|
||||
Expect(entry.ClientInfo).NotTo(BeNil())
|
||||
Expect(entry.EntryID).To(BeNumerically(">=", 0))
|
||||
Expect(entry.TimestampCreated).To(BeNumerically(">=", 0))
|
||||
Expect(entry.TimestampLastUpdated).To(BeNumerically(">=", 0))
|
||||
}
|
||||
|
||||
limitedLogEntries, err := client.ACLLog(ctx, 2).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(len(limitedLogEntries)).To(Equal(2))
|
||||
})
|
||||
|
||||
It("should ACL LOG RESET", Label("NonRedisEnterprise"), func() {
|
||||
// Call ACL LOG RESET
|
||||
resetCmd := client.ACLLogReset(ctx)
|
||||
Expect(resetCmd.Err()).NotTo(HaveOccurred())
|
||||
Expect(resetCmd.Val()).To(Equal("OK"))
|
||||
|
||||
// Verify that the log is empty after the reset
|
||||
logEntries, err := client.ACLLog(ctx, 10).Result()
|
||||
Expect(err).NotTo(HaveOccurred())
|
||||
Expect(len(logEntries)).To(Equal(0))
|
||||
})
|
||||
})
|
||||
|
||||
Describe("hashes", func() {
|
||||
|
Reference in New Issue
Block a user