* refactor: enable QA tests and jafar self test Part of https://github.com/ooni/probe/issues/1335 * chore: make sure all workflows run on release branches
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
 | 
						|
""" ./QA/hirl.py - main QA script for hirl
 | 
						|
 | 
						|
    This script performs a bunch of hirl tests under censored
 | 
						|
    network conditions and verifies that the measurement is consistent
 | 
						|
    with the expectations, by parsing the resulting JSONL. """
 | 
						|
 | 
						|
import contextlib
 | 
						|
import json
 | 
						|
import os
 | 
						|
import shlex
 | 
						|
import socket
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
import time
 | 
						|
import urllib.parse
 | 
						|
 | 
						|
sys.path.insert(0, ".")
 | 
						|
import common
 | 
						|
 | 
						|
 | 
						|
def execute_jafar_and_return_validated_test_keys(ooni_exe, outfile, tag, args):
 | 
						|
    """ Executes jafar and returns the validated parsed test keys, or throws
 | 
						|
        an AssertionError if the result is not valid. """
 | 
						|
    tk = common.execute_jafar_and_miniooni(
 | 
						|
        ooni_exe, outfile, "http_invalid_request_line", tag, args
 | 
						|
    )
 | 
						|
    # TODO(bassosimone): what checks to put here?
 | 
						|
    return tk
 | 
						|
 | 
						|
 | 
						|
def hirl_transparent_proxy(ooni_exe, outfile):
 | 
						|
    """ Test case where we're passing through a transparent proxy """
 | 
						|
    args = ["-iptables-hijack-http-to", "127.0.0.1:80"]
 | 
						|
    tk = execute_jafar_and_return_validated_test_keys(
 | 
						|
        ooni_exe, outfile, "hirl_transparent_proxy", args,
 | 
						|
    )
 | 
						|
    count = 0
 | 
						|
    for entry in tk["failure_list"]:
 | 
						|
        if entry is None:
 | 
						|
            count += 1
 | 
						|
        elif entry == "eof_error":
 | 
						|
            count += 1e03
 | 
						|
        else:
 | 
						|
            count += 1e06
 | 
						|
    assert count == 3002
 | 
						|
    assert tk["tampering_list"] == [True, True, True, True, True]
 | 
						|
    assert tk["tampering"] == True
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    if len(sys.argv) != 2:
 | 
						|
        sys.exit("usage: %s /path/to/ooniprobelegacy-like/binary" % sys.argv[0])
 | 
						|
    outfile = "hirl.jsonl"
 | 
						|
    ooni_exe = sys.argv[1]
 | 
						|
    tests = [
 | 
						|
        hirl_transparent_proxy,
 | 
						|
    ]
 | 
						|
    for test in tests:
 | 
						|
        test(ooni_exe, outfile)
 | 
						|
        time.sleep(7)
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |