introspection.tcl 4.0 KB
Newer Older
A
antirez 已提交
1 2 3
start_server {tags {"introspection"}} {
    test {CLIENT LIST} {
        r client list
4
    } {*addr=*:* fd=* age=* idle=* flags=N db=9 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=* obl=0 oll=0 omem=0 events=r cmd=client*}
A
antirez 已提交
5 6 7 8

    test {MONITOR can log executed commands} {
        set rd [redis_deferring_client]
        $rd monitor
9
        assert_match {*OK*} [$rd read]
A
antirez 已提交
10 11
        r set foo bar
        r get foo
12 13
        list [$rd read] [$rd read]
    } {*"set" "foo"*"get" "foo"*}
A
antirez 已提交
14 15 16 17 18

    test {MONITOR can log commands issued by the scripting engine} {
        set rd [redis_deferring_client]
        $rd monitor
        $rd read ;# Discard the OK
19
        r eval {redis.call('set',KEYS[1],ARGV[1])} 1 foo bar
A
antirez 已提交
20 21 22
        assert_match {*eval*} [$rd read]
        assert_match {*lua*"set"*"foo"*"bar"*} [$rd read]
    }
A
antirez 已提交
23 24 25 26 27 28 29 30

    test {CLIENT GETNAME should return NIL if name is not assigned} {
        r client getname
    } {}

    test {CLIENT LIST shows empty fields for unassigned names} {
        r client list
    } {*name= *}
31

A
antirez 已提交
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
    test {CLIENT SETNAME does not accept spaces} {
        catch {r client setname "foo bar"} e
        set e
    } {ERR*}

    test {CLIENT SETNAME can assign a name to this connection} {
        assert_equal [r client setname myname] {OK}
        r client list
    } {*name=myname*}

    test {CLIENT SETNAME can change the name of an existing connection} {
        assert_equal [r client setname someothername] {OK}
        r client list
    } {*name=someothername*}

    test {After CLIENT SETNAME, connection can still be closed} {
        set rd [redis_deferring_client]
        $rd client setname foobar
        assert_equal [$rd read] "OK"
        assert_match {*foobar*} [r client list]
        $rd close
        # Now the client should no longer be listed
54 55 56 57 58 59
        wait_for_condition 50 100 {
            [string match {*foobar*} [r client list]] == 0
        } else {
            fail "Client still listed in CLIENT LIST after SETNAME."
        }
    }
60 61 62 63 64 65 66 67

    test {CONFIG sanity} {
        # Do CONFIG GET, CONFIG SET and then CONFIG GET again
        # Skip immutable configs, one with no get, and other complicated configs
        set skip_configs {
            rdbchecksum
            daemonize
            io-threads-do-reads
68
            tcp-backlog
69 70 71 72 73 74 75 76 77 78 79 80 81
            always-show-logo
            syslog-enabled
            cluster-enabled
            aclfile
            unixsocket
            pidfile
            syslog-ident
            appendfilename
            supervised
            syslog-facility
            databases
            port
            tls-port
82
            io-threads
83 84 85 86 87
            logfile
            unixsocketperm
            slaveof
            bind
            requirepass
Z
zhenwei pi 已提交
88 89 90 91
            server_cpulist
            bio_cpulist
            aof_rewrite_cpulist
            bgsave_cpulist
92 93
        }

94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
        if {!$::tls} {
            append skip_configs {
                tls-prefer-server-ciphers
                tls-session-cache-timeout
                tls-session-cache-size
                tls-session-caching
                tls-cert-file
                tls-key-file
                tls-dh-params-file
                tls-ca-cert-file
                tls-ca-cert-dir
                tls-protocols
                tls-ciphers
                tls-ciphersuites
            }
        }

111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
        set configs {}
        foreach {k v} [r config get *] {
            if {[lsearch $skip_configs $k] != -1} {
                continue
            }
            dict set configs $k $v
            # try to set the config to the same value it already has
            r config set $k $v
        }

        set newconfigs {}
        foreach {k v} [r config get *] {
            if {[lsearch $skip_configs $k] != -1} {
                continue
            }
            dict set newconfigs $k $v
        }

        dict for {k v} $configs {
            set vv [dict get $newconfigs $k]
            if {$v != $vv} {
                fail "config $k mismatch, expecting $v but got $vv"
            }

        }
    }
A
antirez 已提交
137
}