"ddos challenge" style script #4
2 changed files with 39 additions and 63 deletions
35
test.lua
35
test.lua
|
|
@ -10,6 +10,32 @@ package.preload['resty.string'] = function()
|
|||
return require('tests.mock_resty_string')
|
||||
end
|
||||
|
||||
-- Create a mock shared dictionary
|
||||
local function createMockSharedDict()
|
||||
local storage = {}
|
||||
return {
|
||||
get = function(self, key)
|
||||
local item = storage[key]
|
||||
if not item then return nil end
|
||||
if item.expiry and item.expiry < ngx.time() then
|
||||
storage[key] = nil
|
||||
return nil
|
||||
end
|
||||
return item.value
|
||||
end,
|
||||
set = function(self, key, value, exptime)
|
||||
storage[key] = {
|
||||
value = value,
|
||||
expiry = exptime and (ngx.time() + exptime) or nil
|
||||
}
|
||||
return true, nil
|
||||
end,
|
||||
delete = function(self, key)
|
||||
storage[key] = nil
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function createNgx()
|
||||
local ngx = {
|
||||
status = nil
|
||||
|
|
@ -53,6 +79,15 @@ function createNgx()
|
|||
ngx.re.match = rex.match
|
||||
ngx.re.search = rex.find
|
||||
|
||||
-- shared memory dictionaries for testing
|
||||
ngx.shared = {
|
||||
aproxy_bans = createMockSharedDict(),
|
||||
aproxy_tokens = createMockSharedDict()
|
||||
}
|
||||
|
||||
-- time function for testing
|
||||
ngx.time = function() return 1000000 end
|
||||
|
||||
return ngx
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,44 +1,9 @@
|
|||
TestDDoSProtectionChallenge = {}
|
||||
|
||||
-- Mock shared dictionary
|
||||
local function createMockSharedDict()
|
||||
local storage = {}
|
||||
return {
|
||||
get = function(self, key)
|
||||
local item = storage[key]
|
||||
if not item then return nil end
|
||||
if item.expiry and item.expiry < ngx.time() then
|
||||
storage[key] = nil
|
||||
return nil
|
||||
end
|
||||
return item.value
|
||||
end,
|
||||
set = function(self, key, value, exptime)
|
||||
storage[key] = {
|
||||
value = value,
|
||||
expiry = exptime and (ngx.time() + exptime) or nil
|
||||
}
|
||||
return true, nil
|
||||
end,
|
||||
delete = function(self, key)
|
||||
storage[key] = nil
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function TestDDoSProtectionChallenge:setup()
|
||||
-- Reset ngx
|
||||
-- Reset ngx (includes shared dicts and time function)
|
||||
resetNgx()
|
||||
|
||||
-- Create mock shared dictionaries AFTER resetNgx
|
||||
ngx.shared = {
|
||||
aproxy_bans = createMockSharedDict(),
|
||||
aproxy_tokens = createMockSharedDict()
|
||||
}
|
||||
|
||||
-- Mock ngx.time for consistent testing
|
||||
ngx.time = function() return 1000000 end
|
||||
|
||||
-- Add missing ngx.req functions
|
||||
ngx.req.read_body = function() end
|
||||
ngx.req.get_post_args = function()
|
||||
|
|
@ -215,17 +180,9 @@ end
|
|||
TestDDoSProtectionChallengePaths = {}
|
||||
|
||||
function TestDDoSProtectionChallengePaths:setup()
|
||||
-- Reset ngx
|
||||
-- Reset ngx (includes shared dicts and time function)
|
||||
resetNgx()
|
||||
|
||||
-- Create mock shared dictionaries AFTER resetNgx
|
||||
ngx.shared = {
|
||||
aproxy_bans = createMockSharedDict(),
|
||||
aproxy_tokens = createMockSharedDict()
|
||||
}
|
||||
|
||||
ngx.time = function() return 1000000 end
|
||||
|
||||
-- Add missing ngx.req functions
|
||||
ngx.req.read_body = function() end
|
||||
ngx.req.get_post_args = function()
|
||||
|
|
@ -382,17 +339,9 @@ end
|
|||
TestDDoSProtectionChallengeQuestion = {}
|
||||
|
||||
function TestDDoSProtectionChallengeQuestion:setup()
|
||||
-- Reset ngx
|
||||
-- Reset ngx (includes shared dicts and time function)
|
||||
resetNgx()
|
||||
|
||||
-- Create mock shared dictionaries AFTER resetNgx
|
||||
ngx.shared = {
|
||||
aproxy_bans = createMockSharedDict(),
|
||||
aproxy_tokens = createMockSharedDict()
|
||||
}
|
||||
|
||||
ngx.time = function() return 1000000 end
|
||||
|
||||
-- Add missing ngx.req functions
|
||||
ngx.req.read_body = function() end
|
||||
ngx.req.get_post_args = function()
|
||||
|
|
@ -517,17 +466,9 @@ end
|
|||
TestDDoSProtectionChallengePow = {}
|
||||
|
||||
function TestDDoSProtectionChallengePow:setup()
|
||||
-- Reset ngx
|
||||
-- Reset ngx (includes shared dicts and time function)
|
||||
resetNgx()
|
||||
|
||||
-- Create mock shared dictionaries AFTER resetNgx
|
||||
ngx.shared = {
|
||||
aproxy_bans = createMockSharedDict(),
|
||||
aproxy_tokens = createMockSharedDict()
|
||||
}
|
||||
|
||||
ngx.time = function() return 1000000 end
|
||||
|
||||
-- Add missing ngx.req functions
|
||||
ngx.req.read_body = function() end
|
||||
ngx.req.get_post_args = function()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue