diff options
author | onefang | 2019-12-02 22:22:16 +1000 |
---|---|---|
committer | onefang | 2019-12-02 22:22:16 +1000 |
commit | 36a706c4ae8e46f88c1f7193b2686df8509a080a (patch) | |
tree | 1c47f596ebb68d70ad1ace6b3f2821afbd04976b | |
parent | Make it match test_rewrite.sh more. (diff) | |
download | apt-panopticon-36a706c4ae8e46f88c1f7193b2686df8509a080a.zip apt-panopticon-36a706c4ae8e46f88c1f7193b2686df8509a080a.tar.gz apt-panopticon-36a706c4ae8e46f88c1f7193b2686df8509a080a.tar.bz2 apt-panopticon-36a706c4ae8e46f88c1f7193b2686df8509a080a.tar.xz |
Implement URLSanity test.
Diffstat (limited to '')
-rwxr-xr-x | apt-panopticon-report-email-web.lua | 4 | ||||
-rwxr-xr-x | apt-panopticon.lua | 38 |
2 files changed, 32 insertions, 10 deletions
diff --git a/apt-panopticon-report-email-web.lua b/apt-panopticon-report-email-web.lua index 60027d0..fc1f345 100755 --- a/apt-panopticon-report-email-web.lua +++ b/apt-panopticon-report-email-web.lua | |||
@@ -326,7 +326,7 @@ if nil == email then C("opening mirrors file - " .. e) else | |||
326 | local rsync = "[skip]" | 326 | local rsync = "[skip]" |
327 | local dns = "" | 327 | local dns = "" |
328 | local protocol = status(k, results, "Protocol") | 328 | local protocol = status(k, results, "Protocol") |
329 | local sanity = "[skip]" | 329 | local sanity = status(k, results, "URLSanity") |
330 | local integrity = status(k, results, "Integrity") | 330 | local integrity = status(k, results, "Integrity") |
331 | local updated = status(k, results, "Updated") | 331 | local updated = status(k, results, "Updated") |
332 | 332 | ||
@@ -434,7 +434,7 @@ if nil == web then C("opening mirrors file - " .. e) else | |||
434 | local rsync = "[<font color='grey'><b>skip</b></font>]" | 434 | local rsync = "[<font color='grey'><b>skip</b></font>]" |
435 | local dns = "" | 435 | local dns = "" |
436 | local protocol = status(k, results, "Protocol") | 436 | local protocol = status(k, results, "Protocol") |
437 | local sanity = "[<font color='grey'><b>skip</b></font>]" | 437 | local sanity = status(k, results, "URLSanity") |
438 | local integrity = status(k, results, "Integrity") | 438 | local integrity = status(k, results, "Integrity") |
439 | local updated = status(k, results, "Updated") | 439 | local updated = status(k, results, "Updated") |
440 | local rate = v.Rate | 440 | local rate = v.Rate |
diff --git a/apt-panopticon.lua b/apt-panopticon.lua index ade9de3..21e7599 100755 --- a/apt-panopticon.lua +++ b/apt-panopticon.lua | |||
@@ -43,7 +43,7 @@ options = | |||
43 | -- "rsync", | 43 | -- "rsync", |
44 | "DNSRR", | 44 | "DNSRR", |
45 | "Protocol", | 45 | "Protocol", |
46 | -- "URLSanity", | 46 | "URLSanity", |
47 | "Integrity", | 47 | "Integrity", |
48 | "Updated", | 48 | "Updated", |
49 | }, | 49 | }, |
@@ -404,9 +404,10 @@ end | |||
404 | 404 | ||
405 | local timeouts = 0; | 405 | local timeouts = 0; |
406 | local totalTimeouts = 0 | 406 | local totalTimeouts = 0 |
407 | checkHEAD = function (host, URL, r, retry) | 407 | checkHEAD = function (host, URL, r, retry, sanity) |
408 | if nil == r then r = 0 end | 408 | if nil == r then r = 0 end |
409 | if nil == retry then retry = 0 end | 409 | if nil == retry then retry = 0 end |
410 | if nil == sanity then sanity = false end | ||
410 | local check = "Checking file" | 411 | local check = "Checking file" |
411 | local PU = url.parse(URL, defaultURL) | 412 | local PU = url.parse(URL, defaultURL) |
412 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) | 413 | local pu = url.parse(PU.scheme .. "://" .. host, defaultURL) |
@@ -469,12 +470,20 @@ checkHEAD = function (host, URL, r, retry) | |||
469 | if "0" ~= status then | 470 | if "0" ~= status then |
470 | local msg = curlStatus[0 + status] | 471 | local msg = curlStatus[0 + status] |
471 | if nil == msg then msg = "UNKNOWN CURL STATUS CODE!" end | 472 | if nil == msg then msg = "UNKNOWN CURL STATUS CODE!" end |
472 | E(" The curl command return an error code of " .. status .. " - " .. msg, PU.scheme, "", host) | 473 | if sanity then |
474 | E(" The curl command return an error code of " .. status .. " - " .. msg, PU.scheme, "URLSanity", host) | ||
475 | else | ||
476 | E(" The curl command return an error code of " .. status .. " - " .. msg, PU.scheme, "", host) | ||
477 | end | ||
473 | if ("28" == status) or ("7" == status) then | 478 | if ("28" == status) or ("7" == status) then |
474 | E(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "", host) | 479 | if sanity then |
480 | E(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "URLSanity", host) | ||
481 | else | ||
482 | E(" TIMEOUT " .. timeouts + 1 .. ", retry " .. retry + 1, PU.scheme, "", host) | ||
483 | end | ||
475 | timeouts = timeouts + 1 | 484 | timeouts = timeouts + 1 |
476 | end | 485 | end |
477 | checkHEAD(host, URL, r, retry + 1, timeouts) | 486 | checkHEAD(host, URL, r, retry + 1, sanity) |
478 | return | 487 | return |
479 | end | 488 | end |
480 | local rfile, e = io.open("results/STATUS_" .. fname, "r") | 489 | local rfile, e = io.open("results/STATUS_" .. fname, "r") |
@@ -496,7 +505,11 @@ checkHEAD = function (host, URL, r, retry) | |||
496 | end | 505 | end |
497 | os.execute('rm results/"STATUS_' .. fname .. '" 2>/dev/null') | 506 | os.execute('rm results/"STATUS_' .. fname .. '" 2>/dev/null') |
498 | if ("4" == tostring(code):sub(1, 1)) or ("5" == tostring(code):sub(1, 1)) then | 507 | if ("4" == tostring(code):sub(1, 1)) or ("5" == tostring(code):sub(1, 1)) then |
499 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 508 | if sanity then |
509 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "URLSanity", host) | ||
510 | else | ||
511 | E(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | ||
512 | end | ||
500 | else | 513 | else |
501 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) | 514 | I(" " .. code .. " " .. cstr .. ". " .. check .. " " .. host .. " -> " .. URL) |
502 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. | 515 | -- timeouts = timeouts - 1 -- Backoff the timeouts count if we managed to get through. |
@@ -511,9 +524,9 @@ checkHEAD = function (host, URL, r, retry) | |||
511 | E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) | 524 | E(" redirect loop! " .. check .. " " .. host .. " -> " .. URL, PU.scheme, "", host) |
512 | elseif nil == pu.host then | 525 | elseif nil == pu.host then |
513 | I(" relative redirect. " .. check .. " " .. host .. " -> " .. URL .. " -> " .. location) | 526 | I(" relative redirect. " .. check .. " " .. host .. " -> " .. URL .. " -> " .. location) |
514 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. location, r + 1) | 527 | checkHEAD(host, PU.scheme .. "://" .. PU.host .. location, r + 1, retry, sanity) |
515 | elseif (PU.host == pu.host) or (host == pu.host) then | 528 | elseif (PU.host == pu.host) or (host == pu.host) then |
516 | checkHEAD(pu.host, location, r + 1) | 529 | checkHEAD(pu.host, location, r + 1, retry, sanity) |
517 | else | 530 | else |
518 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. | 531 | --[[ The hard part here is that we end up throwing ALL of the test files at the redirected location. |
519 | Not good for deb.debian.org, which we should only be throwing .debs at. | 532 | Not good for deb.debian.org, which we should only be throwing .debs at. |
@@ -544,6 +557,15 @@ local checkTimeouts = function(host, scheme, URL) | |||
544 | return true | 557 | return true |
545 | end | 558 | end |
546 | end | 559 | end |
560 | if testing("URLSanity") then | ||
561 | URL = URL:gsub("merged/", "merged///") | ||
562 | totalTimeouts = totalTimeouts + timeouts; timeouts = 0 | ||
563 | checkHEAD(host, scheme .. "://" .. URL, 0, 0, true) | ||
564 | if 4 <= (totalTimeouts) then | ||
565 | E("Way too many timeouts!", scheme, "URLSanity", host) | ||
566 | return true | ||
567 | end | ||
568 | end | ||
547 | return false | 569 | return false |
548 | end | 570 | end |
549 | 571 | ||