File: test_acl_save_load.py

package info (click to toggle)
python-fakeredis 2.29.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,772 kB
  • sloc: python: 19,002; sh: 8; makefile: 5
file content (59 lines) | stat: -rw-r--r-- 2,396 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import os

from fakeredis import FakeServer, FakeStrictRedis


def test_acl_save_load():
    acl_filename = b"./users.acl"
    server = FakeServer(config={b"aclfile": acl_filename})
    r = FakeStrictRedis(server=server)
    username = "fakeredis-user"
    assert r.acl_setuser(
        username,
        enabled=True,
        reset=True,
        passwords=["+pass1", "+pass2"],
        categories=["+set", "+@hash", "-geo"],
        commands=["+get", "+mget", "-hset"],
        keys=["cache:*", "objects:*"],
        channels=["message:*"],
        selectors=[("+set", "%W~app*"), ("+get", "%RW~app* &x"), ("-hset", "%W~app*")],
    )
    r.acl_save()

    # assert acl file contains all data
    with open(acl_filename, "r") as f:
        lines = f.readlines()
        assert len(lines) == 2
        user_rule = lines[1]
        assert user_rule.startswith("user fakeredis-user")
        assert "nopass" not in user_rule
        assert "#e6c3da5b206634d7f3f3586d747ffdb36b5c675757b380c6a5fe5c570c714349" in user_rule
        assert "#1ba3d16e9881959f8c9a9762854f72c6e6321cdd44358a10a4e939033117eab9" in user_rule
        assert "on" in user_rule
        assert "~cache:*" in user_rule
        assert "~objects:*" in user_rule
        assert "resetchannels &message:*" in user_rule
        assert "(%W~app* resetchannels -@all +set)" in user_rule
        assert "(~app* resetchannels &x -@all +get)" in user_rule
        assert "(%W~app* resetchannels -@all -hset)" in user_rule

    # assert acl file is loaded correctly
    server2 = FakeServer(config={b"aclfile": acl_filename})
    r2 = FakeStrictRedis(server=server2)
    r2.acl_load()
    rules = r2.acl_list()
    user_rule = next(filter(lambda x: x.startswith(f"user {username}"), rules), None)
    assert user_rule.startswith("user fakeredis-user")
    assert "nopass" not in user_rule
    assert "#e6c3da5b206634d7f3f3586d747ffdb36b5c675757b380c6a5fe5c570c714349" in user_rule
    assert "#1ba3d16e9881959f8c9a9762854f72c6e6321cdd44358a10a4e939033117eab9" in user_rule
    assert "on" in user_rule
    assert "~cache:*" in user_rule
    assert "~objects:*" in user_rule
    assert "resetchannels &message:*" in user_rule
    assert "(%W~app* resetchannels -@all +set)" in user_rule
    assert "(~app* resetchannels &x -@all +get)" in user_rule
    assert "(%W~app* resetchannels -@all -hset)" in user_rule

    os.remove(acl_filename)