#!/usr/bin/python3 # # Copyright 2018 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import ctypes import importlib import os import sys import unittest import gki import namespace import net_test # man 2 personality personality = ctypes.CDLL(None).personality personality.restype = ctypes.c_int personality.argtypes = [ctypes.c_ulong] # From Linux kernel's include/uapi/linux/personality.h PER_QUERY = 0xFFFFFFFF PER_LINUX = 0 PER_LINUX32 = 8 all_test_modules = [ 'anycast_test', 'bpf_test', 'csocket_test', 'cstruct_test', 'kernel_feature_test', 'leak_test', 'multinetwork_test', 'neighbour_test', 'netlink_test', 'nf_test', 'parameterization_test', 'ping6_test', 'policy_crash_test', 'resilient_rs_test', 'sock_diag_test', 'srcaddr_selection_test', 'sysctls_test', 'tcp_fastopen_test', 'tcp_nuke_addr_test', 'tcp_repair_test', 'xfrm_algorithm_test', 'xfrm_test', 'xfrm_tunnel_test', ] def RunTests(modules_to_test): uname = os.uname() linux = uname.sysname kver = uname.release arch = uname.machine p = personality(PER_LINUX) true_arch = os.uname().machine personality(p) print('Running on %s %s %s %s/%s-%sbit%s%s' % (linux, kver, net_test.LINUX_VERSION, true_arch, arch, '64' if sys.maxsize > 0x7FFFFFFF else '32', ' GKI' if gki.IS_GKI else '', ' GSI' if net_test.IS_GSI else ''), file=sys.stderr) namespace.EnterNewNetworkNamespace() # First, run InjectTests on all modules, to ensure that any parameterized # tests in those modules are injected. for name in modules_to_test: importlib.import_module(name) if hasattr(sys.modules[name], 'InjectTests'): sys.modules[name].InjectTests() test_suite = unittest.defaultTestLoader.loadTestsFromNames(modules_to_test) assert test_suite.countTestCases() > 0, ( 'Inconceivable: no tests found! Command line: %s' % ' '.join(sys.argv)) runner = unittest.TextTestRunner(verbosity=2) result = runner.run(test_suite) sys.exit(not result.wasSuccessful()) if __name__ == '__main__': # If one or more tests were passed in on the command line, only run those. if len(sys.argv) > 1: RunTests(sys.argv[1:]) else: RunTests(all_test_modules)