diff options
Diffstat (limited to 'examples/redis-unstable/tests/modules/moduleconfigs.c')
| -rw-r--r-- | examples/redis-unstable/tests/modules/moduleconfigs.c | 287 |
1 files changed, 0 insertions, 287 deletions
diff --git a/examples/redis-unstable/tests/modules/moduleconfigs.c b/examples/redis-unstable/tests/modules/moduleconfigs.c deleted file mode 100644 index 04974f7..0000000 --- a/examples/redis-unstable/tests/modules/moduleconfigs.c +++ /dev/null @@ -1,287 +0,0 @@ -#include "redismodule.h" -#include <strings.h> -int mutable_bool_val, no_prefix_bool, no_prefix_bool2; -int immutable_bool_val; -long long longval, no_prefix_longval; -long long memval, no_prefix_memval; -RedisModuleString *strval = NULL; -RedisModuleString *strval2 = NULL; -int enumval, no_prefix_enumval; -int flagsval; - -/* Series of get and set callbacks for each type of config, these rely on the privdata ptr - * to point to the config, and they register the configs as such. Note that one could also just - * use names if they wanted, and store anything in privdata. */ -int getBoolConfigCommand(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - return (*(int *)privdata); -} - -int setBoolConfigCommand(const char *name, int new, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - *(int *)privdata = new; - return REDISMODULE_OK; -} - -long long getNumericConfigCommand(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - return (*(long long *) privdata); -} - -int setNumericConfigCommand(const char *name, long long new, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - *(long long *)privdata = new; - return REDISMODULE_OK; -} - -RedisModuleString *getStringConfigCommand(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(privdata); - return strval; -} -int setStringConfigCommand(const char *name, RedisModuleString *new, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - REDISMODULE_NOT_USED(privdata); - size_t len; - if (!strcasecmp(RedisModule_StringPtrLen(new, &len), "rejectisfreed")) { - *err = RedisModule_CreateString(NULL, "Cannot set string to 'rejectisfreed'", 36); - return REDISMODULE_ERR; - } - if (strval) RedisModule_FreeString(NULL, strval); - RedisModule_RetainString(NULL, new); - strval = new; - return REDISMODULE_OK; -} - -int getEnumConfigCommand(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(privdata); - return enumval; -} - -int setEnumConfigCommand(const char *name, int val, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - REDISMODULE_NOT_USED(privdata); - enumval = val; - return REDISMODULE_OK; -} - -int getFlagsConfigCommand(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(privdata); - return flagsval; -} - -int setFlagsConfigCommand(const char *name, int val, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - REDISMODULE_NOT_USED(privdata); - flagsval = val; - return REDISMODULE_OK; -} - -int boolApplyFunc(RedisModuleCtx *ctx, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(ctx); - REDISMODULE_NOT_USED(privdata); - if (mutable_bool_val && immutable_bool_val) { - *err = RedisModule_CreateString(NULL, "Bool configs cannot both be yes.", 32); - return REDISMODULE_ERR; - } - return REDISMODULE_OK; -} - -int longlongApplyFunc(RedisModuleCtx *ctx, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(ctx); - REDISMODULE_NOT_USED(privdata); - if (longval == memval) { - *err = RedisModule_CreateString(NULL, "These configs cannot equal each other.", 38); - return REDISMODULE_ERR; - } - return REDISMODULE_OK; -} - -RedisModuleString *getStringConfigUnprefix(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(privdata); - return strval2; -} - -int setStringConfigUnprefix(const char *name, RedisModuleString *new, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - REDISMODULE_NOT_USED(privdata); - if (strval2) RedisModule_FreeString(NULL, strval2); - RedisModule_RetainString(NULL, new); - strval2 = new; - return REDISMODULE_OK; -} - -int getEnumConfigUnprefix(const char *name, void *privdata) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(privdata); - return no_prefix_enumval; -} - -int setEnumConfigUnprefix(const char *name, int val, void *privdata, RedisModuleString **err) { - REDISMODULE_NOT_USED(name); - REDISMODULE_NOT_USED(err); - REDISMODULE_NOT_USED(privdata); - no_prefix_enumval = val; - return REDISMODULE_OK; -} - -int registerBlockCheck(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { - REDISMODULE_NOT_USED(argv); - REDISMODULE_NOT_USED(argc); - int response_ok = 0; - int result = RedisModule_RegisterBoolConfig(ctx, "mutable_bool", 1, REDISMODULE_CONFIG_DEFAULT, getBoolConfigCommand, setBoolConfigCommand, boolApplyFunc, &mutable_bool_val); - response_ok |= (result == REDISMODULE_OK); - - result = RedisModule_RegisterStringConfig(ctx, "string", "secret password", REDISMODULE_CONFIG_DEFAULT, getStringConfigCommand, setStringConfigCommand, NULL, NULL); - response_ok |= (result == REDISMODULE_OK); - - const char *enum_vals[] = {"none", "five", "one", "two", "four"}; - const int int_vals[] = {0, 5, 1, 2, 4}; - result = RedisModule_RegisterEnumConfig(ctx, "enum", 1, REDISMODULE_CONFIG_DEFAULT, enum_vals, int_vals, 5, getEnumConfigCommand, setEnumConfigCommand, NULL, NULL); - response_ok |= (result == REDISMODULE_OK); - - result = RedisModule_RegisterNumericConfig(ctx, "numeric", -1, REDISMODULE_CONFIG_DEFAULT, -5, 2000, getNumericConfigCommand, setNumericConfigCommand, longlongApplyFunc, &longval); - response_ok |= (result == REDISMODULE_OK); - - result = RedisModule_LoadConfigs(ctx); - response_ok |= (result == REDISMODULE_OK); - - /* This validates that it's not possible to register/load configs outside OnLoad, - * thus returns an error if they succeed. */ - if (response_ok) { - RedisModule_ReplyWithError(ctx, "UNEXPECTEDOK"); - } else { - RedisModule_ReplyWithSimpleString(ctx, "OK"); - } - return REDISMODULE_OK; -} - -void cleanup(RedisModuleCtx *ctx) { - if (strval) { - RedisModule_FreeString(ctx, strval); - strval = NULL; - } - if (strval2) { - RedisModule_FreeString(ctx, strval2); - strval2 = NULL; - } -} - -int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { - REDISMODULE_NOT_USED(argv); - REDISMODULE_NOT_USED(argc); - - if (RedisModule_Init(ctx, "moduleconfigs", 1, REDISMODULE_APIVER_1) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to init module"); - return REDISMODULE_ERR; - } - - if (RedisModule_RegisterBoolConfig(ctx, "mutable_bool", 1, REDISMODULE_CONFIG_DEFAULT, getBoolConfigCommand, setBoolConfigCommand, boolApplyFunc, &mutable_bool_val) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register mutable_bool"); - return REDISMODULE_ERR; - } - /* Immutable config here. */ - if (RedisModule_RegisterBoolConfig(ctx, "immutable_bool", 0, REDISMODULE_CONFIG_IMMUTABLE, getBoolConfigCommand, setBoolConfigCommand, boolApplyFunc, &immutable_bool_val) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register immutable_bool"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterStringConfig(ctx, "string", "secret password", REDISMODULE_CONFIG_DEFAULT, getStringConfigCommand, setStringConfigCommand, NULL, NULL) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register string"); - return REDISMODULE_ERR; - } - - /* On the stack to make sure we're copying them. */ - const char *enum_vals[] = {"none", "five", "one", "two", "four"}; - const int int_vals[] = {0, 5, 1, 2, 4}; - - if (RedisModule_RegisterEnumConfig(ctx, "enum", 1, REDISMODULE_CONFIG_DEFAULT, enum_vals, int_vals, 5, getEnumConfigCommand, setEnumConfigCommand, NULL, NULL) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register enum"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterEnumConfig(ctx, "flags", 3, REDISMODULE_CONFIG_DEFAULT | REDISMODULE_CONFIG_BITFLAGS, enum_vals, int_vals, 5, getFlagsConfigCommand, setFlagsConfigCommand, NULL, NULL) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register flags"); - return REDISMODULE_ERR; - } - /* Memory config here. */ - if (RedisModule_RegisterNumericConfig(ctx, "memory_numeric", 1024, REDISMODULE_CONFIG_DEFAULT | REDISMODULE_CONFIG_MEMORY, 0, 3000000, getNumericConfigCommand, setNumericConfigCommand, longlongApplyFunc, &memval) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register memory_numeric"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterNumericConfig(ctx, "numeric", -1, REDISMODULE_CONFIG_DEFAULT, -5, 2000, getNumericConfigCommand, setNumericConfigCommand, longlongApplyFunc, &longval) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register numeric"); - return REDISMODULE_ERR; - } - - /*** unprefixed and aliased configuration ***/ - if (RedisModule_RegisterBoolConfig(ctx, "unprefix-bool|unprefix-bool-alias", 1, REDISMODULE_CONFIG_DEFAULT|REDISMODULE_CONFIG_UNPREFIXED, - getBoolConfigCommand, setBoolConfigCommand, NULL, &no_prefix_bool) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register unprefix-bool"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterBoolConfig(ctx, "unprefix-noalias-bool", 1, REDISMODULE_CONFIG_DEFAULT|REDISMODULE_CONFIG_UNPREFIXED, - getBoolConfigCommand, setBoolConfigCommand, NULL, &no_prefix_bool2) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register unprefix-noalias-bool"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterNumericConfig(ctx, "unprefix.numeric|unprefix.numeric-alias", -1, REDISMODULE_CONFIG_DEFAULT|REDISMODULE_CONFIG_UNPREFIXED, - -5, 2000, getNumericConfigCommand, setNumericConfigCommand, NULL, &no_prefix_longval) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register unprefix.numeric"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterStringConfig(ctx, "unprefix-string|unprefix.string-alias", "secret unprefix", REDISMODULE_CONFIG_DEFAULT|REDISMODULE_CONFIG_UNPREFIXED, - getStringConfigUnprefix, setStringConfigUnprefix, NULL, NULL) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register unprefix-string"); - return REDISMODULE_ERR; - } - if (RedisModule_RegisterEnumConfig(ctx, "unprefix-enum|unprefix-enum-alias", 1, REDISMODULE_CONFIG_DEFAULT|REDISMODULE_CONFIG_UNPREFIXED, - enum_vals, int_vals, 5, getEnumConfigUnprefix, setEnumConfigUnprefix, NULL, NULL) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register unprefix-enum"); - return REDISMODULE_ERR; - } - - RedisModule_Log(ctx, "debug", "Registered configuration"); - size_t len; - if (argc && !strcasecmp(RedisModule_StringPtrLen(argv[0], &len), "noload")) { - return REDISMODULE_OK; - } else if (argc && !strcasecmp(RedisModule_StringPtrLen(argv[0], &len), "override-default")) { - if (RedisModule_LoadDefaultConfigs(ctx) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to load default configuration"); - goto err; - } - // simulate configuration values being overwritten by the command line - RedisModule_Log(ctx, "debug", "Overriding configuration values"); - if (strval) RedisModule_FreeString(ctx, strval); - strval = RedisModule_CreateString(ctx, "foo", 3); - longval = memval = 123; - } - RedisModule_Log(ctx, "debug", "Loading configuration"); - if (RedisModule_LoadConfigs(ctx) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to load configuration"); - goto err; - } - /* Creates a command which registers configs outside OnLoad() function. */ - if (RedisModule_CreateCommand(ctx,"block.register.configs.outside.onload", registerBlockCheck, "write", 0, 0, 0) == REDISMODULE_ERR) { - RedisModule_Log(ctx, "warning", "Failed to register command"); - goto err; - } - - return REDISMODULE_OK; -err: - cleanup(ctx); - return REDISMODULE_ERR; -} - -int RedisModule_OnUnload(RedisModuleCtx *ctx) { - REDISMODULE_NOT_USED(ctx); - cleanup(ctx); - return REDISMODULE_OK; -} |
