1-- TODO: separate test file which pokes the mutator config failure modes
2-- config arg would make that pretty easy.
3
4function mcp_config_pools()
5    local b1 = mcp.backend('b1', '127.0.0.1', 12173)
6    return mcp.pool({b1})
7end
8
9function mcp_config_routes(p)
10    local mgfg = mcp.funcgen_new()
11    local mgfgh = mgfg:new_handle(p)
12    local msfg = mcp.funcgen_new()
13    local msfgh = msfg:new_handle(p)
14    -- TODO: basic ascii handlers as well
15    -- so we can test rewriting requests between command types
16
17    -- various mutators to test
18
19    -- basic; no flags at all.
20    local mut_mgreq = mcp.req_mutator_new(
21        { t = "cmdset", cmd = "mg" },
22        { t = "keyset", str = "override" }
23    )
24
25    -- set a bunch of flags
26    local mut_mgflagreq = mcp.req_mutator_new(
27        { t = "cmdset", cmd = "mg" },
28        { t = "keyset", str = "override" },
29        { t = "flagset", flag = "s" },
30        { t = "flagset", flag = "t" },
31        { t = "flagset", flag = "O", val = "opaque" },
32        { t = "flagset", flag = "N", val = 33 }
33    )
34
35    -- basic res: no flags.
36    local mut_mgres = mcp.res_mutator_new(
37        { t = "rescodeset", str = "HD" }
38    )
39
40    -- res with value.
41    local mut_mgresval = mcp.res_mutator_new(
42        { t = "rescodeset", str = "VA" },
43        { t = "valcopy", idx = 2, arg = "string" }
44    )
45
46    -- res with flags.
47    local mut_mgresflag = mcp.res_mutator_new(
48        { t = "rescodeset", str = "HD" },
49        { t = "flagset", flag = "t", val = "37" },
50        { t = "flagcopy", flag = "O", idx = 2 }
51    )
52
53    mgfg:ready({
54        n = "mgtest", f = function(rctx)
55            -- make blank request objects for handing to mutator
56
57            -- these objects must be made per slot (rctx)
58            -- they're made via the rctx so it can release memory inbetween
59            -- requests.
60            local nreq = rctx:request_new()
61            local nres = rctx:response_new()
62
63            return function(r)
64                local key = r:key()
65                -- test tree
66
67                if key == "mgreq" then
68                    local ret = mut_mgreq(nreq)
69                    return rctx:enqueue_and_wait(nreq, mgfgh)
70                elseif key == "mgflagreq" then
71                    local ret = mut_mgflagreq(nreq)
72                    return rctx:enqueue_and_wait(nreq, mgfgh)
73                elseif key == "mgres" then
74                    local ret = mut_mgres(nres)
75                    return nres
76                elseif key == "mgresval" then
77                    local ret = mut_mgresval(nres, "example value\r\n")
78                    return nres
79                elseif key == "mgresflag" then
80                    local res = rctx:enqueue_and_wait(r, mgfgh)
81                    local ret = mut_mgresflag(nres, res)
82                    return nres
83                end
84            end
85        end
86    })
87
88    msfg:ready({
89        n = "mstest", f = function(rctx)
90            return function(r)
91                local key = r:key()
92                -- test tree
93            end
94        end
95    })
96
97    mcp.attach(mcp.CMD_MG, mgfg)
98    mcp.attach(mcp.CMD_MS, msfg)
99end
100