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