mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 00:28:26 -05:00
23325c135f
Summary of changes: 1. Rename `redisCommand->name` to `redisCommand->declared_name`, it is a const char * for native commands and SDS for module commands. 2. Store the [sub]command fullname in `redisCommand->fullname` (sds). 3. List subcommands in `ACL CAT` 4. List subcommands in `COMMAND LIST` 5. `moduleUnregisterCommands` now will also free the module subcommands. 6. RM_GetCurrentCommandName returns full command name Other changes: 1. Add `addReplyErrorArity` and `addReplyErrorExpireTime` 2. Remove `getFullCommandName` function that now is useless. 3. Some cleanups about `fullname` since now it is SDS. 4. Delete `populateSingleCommand` function from server.h that is useless. 5. Added tests to cover this change. 6. Add some module unload tests and fix the leaks 7. Make error messages uniform, make sure they always contain the full command name and that it's quoted. 7. Fixes some typos see the history in #9504, fixes #10124 Co-authored-by: Oran Agra <oran@redislabs.com> Co-authored-by: guybe7 <guy.benoish@redislabs.com>
75 lines
2.3 KiB
Tcl
75 lines
2.3 KiB
Tcl
set testmodule [file normalize tests/modules/auth.so]
|
|
|
|
start_server {tags {"modules"}} {
|
|
r module load $testmodule
|
|
|
|
test {Modules can create a user that can be authenticated} {
|
|
# Make sure we start authenticated with default user
|
|
r auth default ""
|
|
assert_equal [r acl whoami] "default"
|
|
r auth.createmoduleuser
|
|
|
|
set id [r auth.authmoduleuser]
|
|
assert_equal [r client id] $id
|
|
|
|
# Verify returned id is the same as our current id and
|
|
# we are authenticated with the specified user
|
|
assert_equal [r acl whoami] "global"
|
|
}
|
|
|
|
test {De-authenticating clients is tracked and kills clients} {
|
|
assert_equal [r auth.changecount] 0
|
|
r auth.createmoduleuser
|
|
|
|
# Catch the I/O exception that was thrown when Redis
|
|
# disconnected with us.
|
|
catch { [r ping] } e
|
|
assert_match {*I/O*} $e
|
|
|
|
# Check that a user change was registered
|
|
assert_equal [r auth.changecount] 1
|
|
}
|
|
|
|
test {Modules can't authenticate with ACLs users that dont exist} {
|
|
catch { [r auth.authrealuser auth-module-test-fake] } e
|
|
assert_match {*Invalid user*} $e
|
|
}
|
|
|
|
test {Modules can authenticate with ACL users} {
|
|
assert_equal [r acl whoami] "default"
|
|
|
|
# Create user to auth into
|
|
r acl setuser auth-module-test on allkeys allcommands
|
|
|
|
set id [r auth.authrealuser auth-module-test]
|
|
|
|
# Verify returned id is the same as our current id and
|
|
# we are authenticated with the specified user
|
|
assert_equal [r client id] $id
|
|
assert_equal [r acl whoami] "auth-module-test"
|
|
}
|
|
|
|
test {Client callback is called on user switch} {
|
|
assert_equal [r auth.changecount] 0
|
|
|
|
# Auth again and validate change count
|
|
r auth.authrealuser auth-module-test
|
|
assert_equal [r auth.changecount] 1
|
|
|
|
# Re-auth with the default user
|
|
r auth default ""
|
|
assert_equal [r auth.changecount] 1
|
|
assert_equal [r acl whoami] "default"
|
|
|
|
# Re-auth with the default user again, to
|
|
# verify the callback isn't fired again
|
|
r auth default ""
|
|
assert_equal [r auth.changecount] 0
|
|
assert_equal [r acl whoami] "default"
|
|
}
|
|
|
|
test "Unload the module - testacl" {
|
|
assert_equal {OK} [r module unload testacl]
|
|
}
|
|
}
|