1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6236dae4SAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 3*6236dae4SAndroid Build Coastguard Worker#*************************************************************************** 4*6236dae4SAndroid Build Coastguard Worker# _ _ ____ _ 5*6236dae4SAndroid Build Coastguard Worker# Project ___| | | | _ \| | 6*6236dae4SAndroid Build Coastguard Worker# / __| | | | |_) | | 7*6236dae4SAndroid Build Coastguard Worker# | (__| |_| | _ <| |___ 8*6236dae4SAndroid Build Coastguard Worker# \___|\___/|_| \_\_____| 9*6236dae4SAndroid Build Coastguard Worker# 10*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al. 11*6236dae4SAndroid Build Coastguard Worker# 12*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which 13*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms 14*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html. 15*6236dae4SAndroid Build Coastguard Worker# 16*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell 17*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is 18*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file. 19*6236dae4SAndroid Build Coastguard Worker# 20*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied. 22*6236dae4SAndroid Build Coastguard Worker# 23*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl 24*6236dae4SAndroid Build Coastguard Worker# 25*6236dae4SAndroid Build Coastguard Worker########################################################################### 26*6236dae4SAndroid Build Coastguard Worker# 27*6236dae4SAndroid Build Coastguard Workerimport logging 28*6236dae4SAndroid Build Coastguard Workerimport re 29*6236dae4SAndroid Build Coastguard Worker 30*6236dae4SAndroid Build Coastguard Workerfrom testenv import Env 31*6236dae4SAndroid Build Coastguard Workerfrom testenv import CurlClient 32*6236dae4SAndroid Build Coastguard Worker 33*6236dae4SAndroid Build Coastguard Worker 34*6236dae4SAndroid Build Coastguard Workerlog = logging.getLogger(__name__) 35*6236dae4SAndroid Build Coastguard Worker 36*6236dae4SAndroid Build Coastguard Worker 37*6236dae4SAndroid Build Coastguard Workerclass TestTracing: 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard Worker # default verbose output 40*6236dae4SAndroid Build Coastguard Worker def test_15_01_trace_defaults(self, env: Env, httpd): 41*6236dae4SAndroid Build Coastguard Worker curl = CurlClient(env=env) 42*6236dae4SAndroid Build Coastguard Worker url = f'http://{env.domain1}:{env.http_port}/data.json' 43*6236dae4SAndroid Build Coastguard Worker r = curl.http_get(url=url, def_tracing=False, extra_args=[ 44*6236dae4SAndroid Build Coastguard Worker '-v' 45*6236dae4SAndroid Build Coastguard Worker ]) 46*6236dae4SAndroid Build Coastguard Worker r.check_response(http_status=200) 47*6236dae4SAndroid Build Coastguard Worker trace = r.trace_lines 48*6236dae4SAndroid Build Coastguard Worker assert len(trace) > 0 49*6236dae4SAndroid Build Coastguard Worker 50*6236dae4SAndroid Build Coastguard Worker # trace ids 51*6236dae4SAndroid Build Coastguard Worker def test_15_02_trace_ids(self, env: Env, httpd): 52*6236dae4SAndroid Build Coastguard Worker curl = CurlClient(env=env) 53*6236dae4SAndroid Build Coastguard Worker url = f'http://{env.domain1}:{env.http_port}/data.json' 54*6236dae4SAndroid Build Coastguard Worker r = curl.http_get(url=url, def_tracing=False, extra_args=[ 55*6236dae4SAndroid Build Coastguard Worker '-v', '--trace-config', 'ids' 56*6236dae4SAndroid Build Coastguard Worker ]) 57*6236dae4SAndroid Build Coastguard Worker r.check_response(http_status=200) 58*6236dae4SAndroid Build Coastguard Worker for line in r.trace_lines: 59*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^\[0-[0x]] .+', line) 60*6236dae4SAndroid Build Coastguard Worker if m is None: 61*6236dae4SAndroid Build Coastguard Worker assert False, f'no match: {line}' 62*6236dae4SAndroid Build Coastguard Worker 63*6236dae4SAndroid Build Coastguard Worker # trace ids+time 64*6236dae4SAndroid Build Coastguard Worker def test_15_03_trace_ids_time(self, env: Env, httpd): 65*6236dae4SAndroid Build Coastguard Worker curl = CurlClient(env=env) 66*6236dae4SAndroid Build Coastguard Worker url = f'http://{env.domain1}:{env.http_port}/data.json' 67*6236dae4SAndroid Build Coastguard Worker r = curl.http_get(url=url, def_tracing=False, extra_args=[ 68*6236dae4SAndroid Build Coastguard Worker '-v', '--trace-config', 'ids,time' 69*6236dae4SAndroid Build Coastguard Worker ]) 70*6236dae4SAndroid Build Coastguard Worker r.check_response(http_status=200) 71*6236dae4SAndroid Build Coastguard Worker for line in r.trace_lines: 72*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^([0-9:.]+) \[0-[0x]] .+', line) 73*6236dae4SAndroid Build Coastguard Worker if m is None: 74*6236dae4SAndroid Build Coastguard Worker assert False, f'no match: {line}' 75*6236dae4SAndroid Build Coastguard Worker 76*6236dae4SAndroid Build Coastguard Worker # trace all 77*6236dae4SAndroid Build Coastguard Worker def test_15_04_trace_all(self, env: Env, httpd): 78*6236dae4SAndroid Build Coastguard Worker curl = CurlClient(env=env) 79*6236dae4SAndroid Build Coastguard Worker url = f'http://{env.domain1}:{env.http_port}/data.json' 80*6236dae4SAndroid Build Coastguard Worker r = curl.http_get(url=url, def_tracing=False, extra_args=[ 81*6236dae4SAndroid Build Coastguard Worker '-v', '--trace-config', 'all' 82*6236dae4SAndroid Build Coastguard Worker ]) 83*6236dae4SAndroid Build Coastguard Worker r.check_response(http_status=200) 84*6236dae4SAndroid Build Coastguard Worker found_tcp = False 85*6236dae4SAndroid Build Coastguard Worker for line in r.trace_lines: 86*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^([0-9:.]+) \[0-[0x]] .+', line) 87*6236dae4SAndroid Build Coastguard Worker if m is None: 88*6236dae4SAndroid Build Coastguard Worker assert False, f'no match: {line}' 89*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^([0-9:.]+) \[0-[0x]] . \[TCP].+', line) 90*6236dae4SAndroid Build Coastguard Worker if m is not None: 91*6236dae4SAndroid Build Coastguard Worker found_tcp = True 92*6236dae4SAndroid Build Coastguard Worker if not found_tcp: 93*6236dae4SAndroid Build Coastguard Worker assert False, f'TCP filter does not appear in trace "all": {r.stderr}' 94*6236dae4SAndroid Build Coastguard Worker 95*6236dae4SAndroid Build Coastguard Worker # trace all, no TCP, no time 96*6236dae4SAndroid Build Coastguard Worker def test_15_05_trace_all(self, env: Env, httpd): 97*6236dae4SAndroid Build Coastguard Worker curl = CurlClient(env=env) 98*6236dae4SAndroid Build Coastguard Worker url = f'http://{env.domain1}:{env.http_port}/data.json' 99*6236dae4SAndroid Build Coastguard Worker r = curl.http_get(url=url, def_tracing=False, extra_args=[ 100*6236dae4SAndroid Build Coastguard Worker '-v', '--trace-config', 'all,-tcp,-time' 101*6236dae4SAndroid Build Coastguard Worker ]) 102*6236dae4SAndroid Build Coastguard Worker r.check_response(http_status=200) 103*6236dae4SAndroid Build Coastguard Worker found_tcp = False 104*6236dae4SAndroid Build Coastguard Worker for line in r.trace_lines: 105*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^\[0-[0x]] .+', line) 106*6236dae4SAndroid Build Coastguard Worker if m is None: 107*6236dae4SAndroid Build Coastguard Worker assert False, f'no match: {line}' 108*6236dae4SAndroid Build Coastguard Worker m = re.match(r'^\[0-[0x]] . \[TCP].+', line) 109*6236dae4SAndroid Build Coastguard Worker if m is not None: 110*6236dae4SAndroid Build Coastguard Worker found_tcp = True 111*6236dae4SAndroid Build Coastguard Worker if found_tcp: 112*6236dae4SAndroid Build Coastguard Worker assert False, f'TCP filter appears in trace "all,-tcp": {r.stderr}' 113