redict/tests/unit
Oran Agra 4faddf18ca Build TLS as a loadable module
* Support BUILD_TLS=module to be loaded as a module via config file or
  command line. e.g. redis-server --loadmodule redis-tls.so
* Updates to redismodule.h to allow it to be used side by side with
  server.h by defining REDISMODULE_CORE_MODULE
* Changes to server.h, redismodule.h and module.c to avoid repeated
  type declarations (gcc 4.8 doesn't like these)
* Add a mechanism for non-ABI neutral modules (ones who include
  server.h) to refuse loading if they detect not being built together with
  redis (release.c)
* Fix wrong signature of RedisModuleDefragFunc, this could break
  compilation of a module, but not the ABI
* Move initialization of listeners in server.c to be after loading
  the modules
* Config TLS after initialization of listeners
* Init cluster after initialization of listeners
* Add TLS module to CI
* Fix a test suite race conditions:
  Now that the listeners are initialized later, it's not sufficient to
  wait for the PID message in the log, we need to wait for the "Server
  Initialized" message.
* Fix issues with moduleconfigs test as a result from start_server
  waiting for "Server Initialized"
* Fix issues with modules/infra test as a result of an additional module
  present

Notes about Sentinel:
Sentinel can't really rely on the tls module, since it uses hiredis to
initiate connections and depends on OpenSSL (won't be able to use any
other connection modules for that), so it was decided that when TLS is
built as a module, sentinel does not support TLS at all.
This means that it keeps using redis_tls_ctx and redis_tls_client_ctx directly.

Example code of config in redis-tls.so(may be use in the future):
RedisModuleString *tls_cfg = NULL;

void tlsInfo(RedisModuleInfoCtx *ctx, int for_crash_report) {
    UNUSED(for_crash_report);
    RedisModule_InfoAddSection(ctx, "");
    RedisModule_InfoAddFieldLongLong(ctx, "var", 42);
}

int tlsCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
{
    if (argc != 2) return RedisModule_WrongArity(ctx);
    return RedisModule_ReplyWithString(ctx, argv[1]);
}

RedisModuleString *getStringConfigCommand(const char *name, void *privdata) {
    REDISMODULE_NOT_USED(name);
    REDISMODULE_NOT_USED(privdata);
    return tls_cfg;
}

int setStringConfigCommand(const char *name, RedisModuleString *new, void *privdata, RedisModuleString **err) {
    REDISMODULE_NOT_USED(name);
    REDISMODULE_NOT_USED(err);
    REDISMODULE_NOT_USED(privdata);
    if (tls_cfg) RedisModule_FreeString(NULL, tls_cfg);
    RedisModule_RetainString(NULL, new);
    tls_cfg = new;
    return REDISMODULE_OK;
}

int RedisModule_OnLoad(void *ctx, RedisModuleString **argv, int argc)
{
    ....
    if (RedisModule_CreateCommand(ctx,"tls",tlsCommand,"",0,0,0) == REDISMODULE_ERR)
        return REDISMODULE_ERR;

    if (RedisModule_RegisterStringConfig(ctx, "cfg", "", REDISMODULE_CONFIG_DEFAULT, getStringConfigCommand, setStringConfigCommand, NULL, NULL) == REDISMODULE_ERR)
        return REDISMODULE_ERR;

    if (RedisModule_LoadConfigs(ctx) == REDISMODULE_ERR) {
        if (tls_cfg) {
            RedisModule_FreeString(ctx, tls_cfg);
            tls_cfg = NULL;
        }
        return REDISMODULE_ERR;
    }
    ...
}

Co-authored-by: zhenwei pi <pizhenwei@bytedance.com>
Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
2022-08-23 12:37:56 +03:00
..
cluster Fix CLUSTERDOWN issue in cluster reshard unblock test (#11139) 2022-08-18 09:18:18 -07:00
moduleapi Build TLS as a loadable module 2022-08-23 12:37:56 +03:00
type Add 2 test cases for XDEL and XGROUP CREATE command (#11137) 2022-08-21 07:52:57 +03:00
acl-v2.tcl acl: bitfield with get and set|incrby can be executed with readonly permission (#11086) 2022-08-07 09:21:19 +03:00
acl.tcl Fix acl tests to support --singledb flag (#11077) 2022-08-03 12:11:32 +03:00
aofrw.tcl
auth.tcl
bitfield.tcl
bitops.tcl
client-eviction.tcl Account sharded pubsub channels memory consumption (#10925) 2022-07-04 09:18:57 +03:00
dump.tcl
expire.tcl Fix replication inconsistency on modules that uses key space notifications (#10969) 2022-08-18 10:16:32 +03:00
functions.tcl Tests: Add missing key declaration in scripts (#11134) 2022-08-16 22:04:22 +03:00
geo.tcl
hyperloglog.tcl
info-command.tcl
info.tcl
introspection-2.tcl
introspection.tcl
keyspace.tcl
latency-monitor.tcl
lazyfree.tcl
limits.tcl
maxmemory.tcl Fix replication inconsistency on modules that uses key space notifications (#10969) 2022-08-18 10:16:32 +03:00
memefficiency.tcl
multi.tcl Fix replication inconsistency on modules that uses key space notifications (#10969) 2022-08-18 10:16:32 +03:00
networking.tcl
obuf-limits.tcl
oom-score-adj.tcl
other.tcl
pause.tcl
pendingquerybuf.tcl
printver.tcl
protocol.tcl
pubsub.tcl
pubsubshard.tcl
querybuf.tcl
quit.tcl
replybufsize.tcl
scan.tcl
scripting.tcl Tests: Add missing key declaration in scripts (#11134) 2022-08-16 22:04:22 +03:00
shutdown.tcl
slowlog.tcl
sort.tcl
tls.tcl
tracking.tcl fix the client type in trackingInvalidateKey() (#11052) 2022-08-10 11:58:54 +03:00
violations.tcl
wait.tcl