Files

63 lines
2.5 KiB
Lua

-- 控制器打桩测试 v2:直调 action_api,覆盖各分支(含「关->开自动挂回滚」)
-- 用 ssh router 'lua -' < 本文件 执行;不在设备上落任何文件
package.path = "/usr/lib/lua/?.lua;" .. package.path
local F = {}
local http = require "luci.http"
local cap = {}
http.formvalue = function(k) return F[k] end
http.prepare_content = function(t) cap.ct = t end
http.write = function(s) cap.body = s end
local ucic = require("luci.model.uci").cursor()
local function cur(sec, opt) return ucic:get("dnsguard", sec, opt) or "" end
local ctrl = require "luci.controller.dnsguard"
local function run(name)
cap.body = nil
local ok, err = pcall(ctrl.action_api)
print("###CASE:" .. name .. "###")
if not ok then print("LUA_ERROR: " .. tostring(err)) else print(cap.body or "(nil)") end
print("###END###")
end
local function clear() for k in pairs(F) do F[k] = nil end end
-- 用设备上当前值填表,避免测试数据漂移
local function fill(redirect)
clear()
F.action = "save"
F.enabled = "1"
F.redirect53 = redirect or cur("main", "redirect53")
F.watch = "1"
F.block853 = "0"
F.blockdoh = "0"
F.target_port = cur("main", "target_port")
F.ifaces = cur("main", "ifaces")
F.skip_devices = cur("main", "skip_devices")
F.log_limit = cur("main", "log_limit")
F.rollback_minutes = "1"
F.never_hijack4 = cur("limits", "never_hijack4")
F.never_hijack6 = cur("limits", "never_hijack6")
F.doh_servers = cur("limits", "doh_servers")
end
clear(); F.action = "status"; run("status")
clear(); F.action = "selftest"; run("selftest")
clear(); F.action = "rules"; run("rules")
fill(); run("save-same")
fill("0"); run("save-off")
fill("1"); run("save-on-arm") -- 这里应挂上回滚
clear(); F.action = "disarm"; run("disarm")
-- 校验分支
clear(); F.action="save"; F.target_port="70000"; run("bad-port")
clear(); F.action="save"; F.target_port="53"; F.ifaces=""; run("bad-iface")
clear(); F.action="save"; F.target_port="53"; F.ifaces="br-lan"; F.log_limit="0"; run("bad-loglimit")
clear(); F.action="save"; F.target_port="53"; F.ifaces="br-lan"; F.log_limit="5"; F.rollback_minutes="999"; run("bad-rollmin")
clear(); F.action="rollback"; F.ts="; rm -rf /"; run("bad-ts")
clear(); F.action="nope"; run("unknown")
clear(); F.action="bad action!; x"; run("bad-action")