From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM8PR08MB6323.eurprd08.prod.outlook.com (2603:10a6:20b:354::5) by PAXPR08MB6942.eurprd08.prod.outlook.com with HTTPS; Mon, 31 Aug 2026 14:06:45 +0000 Received: from AS9PR06CA0417.eurprd06.prod.outlook.com (2603:10a6:20b:461::21) by AM8PR08MB6323.eurprd08.prod.outlook.com (2603:10a6:20b:354::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.11; Mon, 31 Aug 2026 14:06:39 +0000 Received: from CPH1EPF00000519.eurprd04.prod.outlook.com (2603:10a6:20b:461:cafe::b) by AS9PR06CA0417.outlook.office365.com (2603:10a6:20b:461::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.360.13 via Frontend Transport; Mon, 31 Aug 2026 14:06:39 +0000 Authentication-Results: spf=softfail (sender IP is 99.81.216.78) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning openvz.org discourages use of 99.81.216.78 as permitted sender) Received: from nat.eu.perception-point.io (99.81.216.78) by CPH1EPF00000519.mail.protection.outlook.com (10.167.241.228) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Mon, 31 Aug 2026 14:06:38 +0000 X-PERCEPTION-POINT-VERDICT: CLN X-PERCEPTION-POINT-SPF: X-PERCEPTION-POINT-SPAM: PASS X-PERCEPTION-POINT-SENDER-IP: 2a00:1450:4864:20::32c X-PP-Forefront-Antispam-Report: CIP:2a00:1450:4864:20::32c;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x32c.google.com;PTR:mail-wm1-x32c.google.com;CAT:NONE;SFS:(13230040)(704161411799003)(2092899012)(82310400026)(43022699015)(12012899012)(6059299003)(3072899012)(19002099009)(5063699009)(10067099003)(57112099003)(22082099003)(16102099003)(55112099003)(18002099003);DIR:INB; Received: from GV1PR07CU001.outbound.protection.outlook.com (mail-gv1pr07cu00101.outbound.protection.outlook.com [40.93.214.97]) by inbound-smtp.eu-west-1.amazonaws.com with SMTP id gr93lgh20t5mdo6t70johep3i5oeoeukerl7kh01; Mon, 31 Aug 2026 14:06:35 +0000 (UTC) X-SES-Spam-Verdict: PASS X-SES-Virus-Verdict: PASS Received-SPF: softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.214.97 as permitted sender) client-ip=40.93.214.97; envelope-from=den@openvz.org; helo=GV1PR07CU001.outbound.protection.outlook.com; Authentication-Results-Original: amazonses.com; spf=softfail (spfCheck: transitioning domain of openvz.org does not designate 40.93.214.97 as permitted sender) client-ip=40.93.214.97; envelope-from=den@openvz.org; helo=GV1PR07CU001.outbound.protection.outlook.com; dkim=pass header.i=@openvz.org; dmarc=pass header.from=openvz.org; X-SES-RECEIPT: AEFBQUFBQUFBQUFFM0ZUWjY5K3JkYWI4MWdEVzBkcEg0RDZuaW9PelFlNFlpZ01ZODZDWW02bjY0bHpnU1FuSTEydzl1Uk8zcnNvcTNpVzlyblpHcHk5bU9udzk0VVlaY0F5L1FMVU96ekFQSmVtUXhpd3FEUXFtL1hjNXRVVG5VRmVrV0x0U08xckJFbVlwTld5QkxOWDJtZ0dVMjlHd0pvcjVPVTM3dTR3azRaZlBVSk43YTlnZ3h5eFUxUGVlMkFVQ1dKRmxnMGJxTGhoUCtaNmR3aVhEclc3eElDOWd6RDlZR2M5ZjA2YW5HTkhOY2ExWUsySTI4MWxURHhDWUZuM0RKTTYyRTV3MTBoVjNvNmNmT0pKYmV5dG1yUnAwMUN5Vk1RTTFFNG8xeEt1dURrcTZrS1E9PQ== X-SES-DKIM-SIGNATURE: a=rsa-sha256; q=dns/txt; b=I3WuQ4GeOgOd8veAEcgdSLoqPO3ZSObZMyuQw6cZMY45CZDFVpzujbWsymj+cS/l5FCjWgCabgjHcYKuHyxbFhBO3bqeduksx61rAGB41luXK3J6Z/IEy3e2pQgBUrau2hTgbV5kCEIedWD6RzIuoY+v3lsIgf6/eg2HmWMyrhA=; c=relaxed/simple; s=shh3fegwg5fppqsuzphvschd53n6ihuv; d=amazonses.com; t=1788185195; v=1; bh=cuUjm+vP6d10Z95PcyKWZeQo/WykhTOfsPQPYYpY2uE=; h=From:To:Cc:Bcc:Subject:Date:Message-ID:MIME-Version:Content-Type:X-SES-RECEIPT; Received: from PA7P264CA0303.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:395::29) by PR3PR08MB5595.eurprd08.prod.outlook.com (2603:10a6:102:83::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Mon, 31 Aug 2026 14:06:28 +0000 Received: from AM7PEPF00000054.EURPRD83.prod.outlook.com (2603:10a6:102:395:cafe::7f) by PA7P264CA0303.outlook.office365.com (2603:10a6:102:395::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.360.13 via Frontend Transport; Mon, 31 Aug 2026 14:06:28 +0000 Authentication-Results-Original: spf=pass (sender IP is 2a00:1450:4864:20::32c) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org;compauth=pass reason=100 Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:20::32c as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:20::32c; helo=mail-wm1-x32c.google.com; pr=C Received: from mail-wm1-x32c.google.com (2a00:1450:4864:20::32c) by AM7PEPF00000054.mail.protection.outlook.com (2603:10a6:20f:fff8::218) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.0 via Frontend Transport; Mon, 31 Aug 2026 14:06:28 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-49ccfae359fso12944795e9.3 for ; Mon, 31 Aug 2026 07:06:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1788185188; x=1788789988; darn=virtuozzo.com; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Gsx67yag+lhPFh6nWc2T17Y8vNfYKK4Qvts+cL5OB+I=; b=rC4TkvPMCO14OWyaUSSeQGXMxewLEjFvjBypwYsPaUEfztqt8KFVFXHfEVtv5uIYbS 1SqA7hr4Wb3Ad7hKlKEb2e/yvSo9gD31rAjqr6JU98dWO5P/bwQvIgPfnHGy01kaI5hT BGVIzJQPiADNy73LFBig62mOPJQ6VlVzNLwxicRWra15q/vJ/2OTc94Iti7utqS/ebF2 41NP6U1sT6iD3yHseHy1YwIW58vSmDt3lRHIjpBjdp6wMPhrdbK6Zr307Y8uqc+O7h8b pgYUGe+vIeQQR5Qo087A06IgZ2stlh3hwWhmmZzLUG0GUlIhXTK+kzU3gUP931Y8pzay t12g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788185188; x=1788789988; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Gsx67yag+lhPFh6nWc2T17Y8vNfYKK4Qvts+cL5OB+I=; b=rzZOiO8YUrAuhIUgcrmENKnJiWhMIUun9EglikENydC9G6emB0PFTXQ5Z7qIhwBdxX 6BZC0WEv/yEeMriMFlXrsrLcFLLgGJoFaTa1w+vqbO5Jss7WdCXuGf0YDp3w4/d4qkBt +YpXL601n/T+h69mq4AfWPOReWyVfOaM8XjS0pxrT1XCf4UTrvfX390nc88dHVn2hao8 HeHa8o80OrQWdiIzNwp+NohZWRQE3TaYjR7i1MOx8vGKZYXlEwLxq9k6moEvOgYChJZ8 lmdro2FTtpp4MvYiSKYGLLaxkpeYPQaXPY8FW9W3xyNGbKie95EPLCuGttfsq0QZCKUI 2byQ== X-Gm-Message-State: AFuF++mRbubzJD6ocNMKP3QJwICFxNucQMhsb5zSGvGN5tl1C5TGHql5 7db5SiujOD6Z/tDZqpXRD2p1/HqIPA4eyM1vuDUTITiVTcBr8Eyw8Rl02TW1aTCmqSs6JC8GIza T6J8qL4w= X-Gm-Gg: AR+sD12667qjxn9lOhu7qt+gCR7jWWr0Z6icMq5COlT8N8B/FOYFAzKR61jQmSyxFmQ npNnhFT7v0xt15S7LC+TR8hqe5vA+OML8V8AaIdOSYehWlpYPrbnrSAwX8ktAMYHNSXi6LXTWuS X90WuDHaO3os74ORFSdwahH/p2Xzxlzs6My5hq/nKX1dWP9iwfijbh1a8JflXjosaYrAaYeuQsj hWu4aaLDfZ9jaGWz4Be/qgukJ9AinBuBYoFf9BXroQktOQy0ugaJRkYfzWawKpmFYw0eIfJUlTO 7JJdL/3UfOEeOcAPXgsvrO/38k4SCp/vu2jj4sNlJ+4IpgXPHEdSzQbiH5OYcms2z9S9qaOFuLc YGJP/l7s0KIkTH0ntEyzAAwhv2570f0ZIAJ1ARSt4tZy9CaNaFgG35rd4wfrFcXIXCTg7551U/o tC+Sf5PfAX7HvIoYcAqFnZDxsQTA3IPfXJA+crvthE4S78tMXKJx64k0FA X-Received: by 2002:a05:600c:529a:b0:49c:cedc:3c36 with SMTP id 5b1f17b1804b1-49ccedc3cafmr229989765e9.16.1788185187791; Mon, 31 Aug 2026 07:06:27 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:3bc1:c53b:30b:203e]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482fbb33070sm23644536f8f.36.2026.08.31.07.06.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 07:06:27 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.0 4/6] tests/unit: add websock handshake test #VSTOR-143316 Date: Mon, 31 Aug 2026 16:06:18 +0200 Message-ID: <20260831140620.1204363-5-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831140620.1204363-1-den@openvz.org> References: <20260831140620.1204363-1-den@openvz.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 1 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:1 X-MS-TrafficTypeDiagnostic: AM7PEPF00000054:EE_|PR3PR08MB5595:EE_|CPH1EPF00000519:EE_|AM8PR08MB6323:EE_|PAXPR08MB6942:EE_ X-MS-Office365-Filtering-Correlation-Id: 197044ba-b2a7-48c7-9434-08df076913dc X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA|SL X-PERCEPTION-POINT-CUSTOM: vzpp X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|704161411799003|2092899012|82310400026|43022699015|12012899012|6059299003|3072899012|19002099009|5063699009|10067099003|57112099003|22082099003|16102099003|55112099003|18002099003; X-Microsoft-Antispam-Message-Info-Original: =?utf-8?B?VHdSekVHQWtwOHQvMmszNVU0dXgraUNFT1E2S09EOEVrZExJWWRmdzdXdVZz?= =?utf-8?B?bkxPNGdWbkx0R2R4amYxTE5hZnpFUGpZOFRYWkdEcFRzRWRvS2ZLaVBreDlu?= =?utf-8?B?NGt3WGdYbFFQd1dlZFJXQTJTbjVHSytLaDNKajlVVzRwMytvaXJpWXphd3dR?= =?utf-8?B?Z1E1WnlXL3p5ZWVWL3pLaXYrZEM5bGhsYXB1cWozSG5DTW9sMUxXbmVGbDQ3?= =?utf-8?B?Tmd1V1NwVGtHQ01qclJTZWlTYy9PcXVTcEhtU2RkakpndEQxS29mcTYwcW51?= =?utf-8?B?WXZLWXU1bFZyVlFqeWUrNUpsSG5PSE12aHFVVWkwMzRiL0szZ0VZY0xoTXBC?= =?utf-8?B?bm5jU0RtQjdtdHJuVkVhTEkwZlRaN29YZ1VHelE1MnliWmxzd2F5bU1VQUxP?= =?utf-8?B?SENzL0Fkd05iVGhNb3FaQTdTZWt4MlVIZDYyVjdjQlNBcGQ5TGNsSlJJU29M?= =?utf-8?B?SnZ5V3V1cjZyY1dEaGR2STVVODlLTXNvWGlJVitqeTJ1cDBNTTNGRjNCU1Vw?= =?utf-8?B?aTM5Y2VLQkRiTkhiVzcxMTJ2Z0ZYbC8xUDZuc3NROHl3Z0RRMVE0M2ExN2Vp?= =?utf-8?B?RmRnVmFIL2txTWtYSVFYYlQ0YWtYbUtXV1piSlk0K2N5U1pPVmw4Z1ZVWHV6?= =?utf-8?B?YjZodWJZcVQ5aGh4clhmZVF4eExVUkpKbUZBMFMzZmFDZW1DZmhoMnY2VHZa?= =?utf-8?B?MWt5dzNsZ2ZoVkdVUFR1OHM5VzhadnQyOU4xdzFmMDJSMm9SdFYxR2s5TURR?= =?utf-8?B?RXFDVDBoMUlMWUwyd09wLzlxUnZEc2thMk9oMENnUG95aG1mNTgxVElpOUg3?= =?utf-8?B?T3BMc2JRcEF2aUh3OGg2Q2dSSzMxR2xBZ2Fnc1E5alZhZDNQeFlsTmlEeWRG?= =?utf-8?B?T3lHV2RRdWhpL25uY2FRb215ZE9pcVZSaXliMWE2ck9FNXZrVDFZUXgxTStn?= =?utf-8?B?cWhUNEtLRlFtTkJET3lyV0V6QWRCVEJ1MENiUGg3cGpkMnpKTU1hdE5zLzVV?= =?utf-8?B?ZlE4NGhZZnZJOGlaU1Z2dElRRUxVU0J4MkN5S2F4dy9DNUdSWklQNlllSHRV?= =?utf-8?B?dHF5SUtub2NnNHBmRDJ3MVBDekg4UVJHWTBzYkxNLzFPck5LYXhLa2Y4RWZT?= =?utf-8?B?UFhGang0OG5XWGNRTm9NQ1g5UkUzSENHbkpwcVRObVpzMjAreXFibFhvVHBD?= =?utf-8?B?ekV2SkhDU1J4UlY0dkxDTDVUd1BrWEI3QU9RWG84blBoMjFiWklyWlVnL2w0?= =?utf-8?B?T3NZWFlWZFNoR012QjFqZy9hUExoUEhpZjJyV1RvV3JOUTgyNmZuMGlBdG5l?= =?utf-8?B?Tmw4aFlUcDFxL1R0ZHJqV24vejF1N1BmNVhSUStxbndiWUVzeFNxQ2pYcVZE?= =?utf-8?B?ek5ic0tLd1dNVUMvckRWbkdaekpGbmVkc0YrdC9XN09tYlNKRXVWMkNOWVQ3?= =?utf-8?B?MFdvVVExYnhLUExZTGVIYytWMEp3VW1yNGord3oxUW1VYXNPbHVkbTFIazNM?= =?utf-8?B?dmFqMno5Yk1IMys5VHcySHpiN0lIby9wSVcyVElVU0htaTd5LzF5d0xWQVBw?= =?utf-8?B?eXlVV2RHVnVvL2FPMTQwOGJETnhsRThBNktqUWNFakU0OGtvMUJxUzVHbk0r?= =?utf-8?B?TURhWkdpb1NienAzZG1hMVYvOXc5d0ErNUNZckZwTitpL3FPQWZncnozU2hZ?= =?utf-8?B?L3dJeDk5SWpWTUprQk9vbmtNSysyc25jS2pvcFVNSUtBcTZ6aDFVNm5PL0Zt?= =?utf-8?B?UUNERmF4bjhGemN2dDVNTXRuV1Zad0phYkRyMy8rZGZubTkvMjZvaEJSMDI4?= =?utf-8?B?Qk12aVptR0Q2NkdiUXBod3pic2JrOGxLazVJelljMXlqODZCT08wWWsrd3VY?= =?utf-8?B?a1VPNzVPK2l6UGpCcERDdStGUGRQRzRwSUlTVVVXZG1EZjZWL0I5SitsSVJI?= =?utf-8?B?WnFqWWxQd3FPek9MNFl3L1piNXZjVkZGYVZFMnVqbGFTQzRWdzhWbDlxSWNh?= =?utf-8?B?UHRxNUFZbGx0TGl1OHBlUVNGTUJWSTY3eW90bGhJaEJPbVdnK3F5RUhTOTR1?= =?utf-8?B?Vk03SW1HZ2F0MUlFenltVTg1WUZRTkN1Z2p1Um1xWlp3S1V4cnIzSjY0Lzcw?= =?utf-8?B?OWhmdWVURllMVkMycjcwNDhKUTNabEhKbmJmbTlKQlVkNXNJWFZvRkdraStM?= =?utf-8?B?c3pZMUJ4SVZDT1FIWndsRzM1eW5tRmVmUmJKc0FYYm0xY0FKTG8rc2NiaXox?= =?utf-8?B?a3dOWnJmS0U5ZGQ3VTlEUlJsTXh2blR6eS9uak55bk9oNE8vZzErRndNNHBH?= =?utf-8?B?VGJoNkM0Y01JMUo2ME1pdDBnREFXMENTdy9JdytWejBVSlB1alM3STg4RVZa?= =?utf-8?B?YkZITzgzZTE1Qmw4WkV6WWprVTlYc3hxakkwREJFb1BGWW92ejlhaENESWkx?= =?utf-8?B?VFFaQlRLai9HWENvZktxUlZ4SW95UzNSZXFaMTRyYnVNUVJ0c1UyOFBEQkRX?= =?utf-8?B?NDlpcEdLaE1OQVBtZXF1NGgwRFh2Q1FSWDJVY1dzUTBQUWM4RjdablhwVjFS?= =?utf-8?B?cXZCcjFCQkFCVDBJRzBwYkFzcHI0VThqYVN2cUVNYkhqMFp0R1Y1ekQ0MW5s?= =?utf-8?B?NStrZUhudXpFQWFlbDRuZ3ZmVTNmcWVFUDFkK1kvZVNyR21vSHlpWFVSSFZU?= =?utf-8?B?bnE4U1dWTmcrYzduMThnS2dGQ293aVprTEhITG05UGZxK3VXUWt6SUQrTTRK?= =?utf-8?B?a1lLN3FOTFZXYzhXMXFvVW1sdWo4TzJ5TnBscFZ0UktjUkltMlUwVDVKUUsy?= =?utf-8?B?b0NOL3o1ZTQrRTVlNmExb1ZDcTRjQzgwUTVpOUdUYTBsN2FFYlRsY0tlT0N1?= =?utf-8?B?K3YxUXAzVCtwbVNPVWhUZlRaUFV6Q0s3dlV3blVmRDNHeUJicGdZV1dCOHhE?= =?utf-8?Q?xshYpqazomJJMpN8?= X-Forefront-Antispam-Report-Untrusted: CIP:2a00:1450:4864:20::32c;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wm1-x32c.google.com;PTR:mail-wm1-x32c.google.com;CAT:NONE;SFS:(13230040)(704161411799003)(2092899012)(82310400026)(43022699015)(12012899012)(6059299003)(3072899012)(19002099009)(5063699009)(10067099003)(57112099003)(22082099003)(16102099003)(55112099003)(18002099003);DIR:INB; X-Auto-Response-Suppress: DR, OOF, AutoReply X-Exchange-RoutingPolicyChecked: PsvPJj5J+LJBC6jLmOA67o5R2s03wxDalpu0NHK7n+Zcy5RzwUJm8KcbAmrz5wgqA6ZK374GfaQhx4TzGhWPkedLbSebogc6X1yynpkKNLis+KngaPZD9lv48RDSx7uL5gS+CZ1brQZ5B1cikGjHAyKV3NzWer3c5d77Nj0firgLftvW7Xb9XHG2od9k5tx2ur241+HhPnuzni1RDRp8VhqVHvmILc7uTYGcYwbQT5ijUY+qMTb2w0Ust+oyUhSXjGLR/gVO5PjyIuFzoYQuDxFYgg2SK7xJT2CG3RpRFhAptX1/pefervj/3mdFwTUlDwXDQ/1HuaL+r16mmWVY+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5595 X-MS-Exchange-Organization-ExpirationStartTime: 31 Aug 2026 14:06:39.6083 (UTC) X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000 X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit X-MS-Exchange-Organization-Network-Message-Id: 197044ba-b2a7-48c7-9434-08df076913dc X-MS-Exchange-Organization-MessageDirectionality: Incoming X-MS-Exchange-Transport-CrossTenantHeadersStripped: CPH1EPF00000519.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Exchange-Organization-AuthSource: CPH1EPF00000519.eurprd04.prod.outlook.com X-MS-Exchange-Organization-AuthAs: Anonymous X-MS-Office365-Filtering-Correlation-Id-Prvs: 1887edf4-4c7e-44c6-7fda-08df07690d3f X-MS-Exchange-Organization-SCL: -1 X-Microsoft-Antispam: BCL:0;ARA:13230040|704161411799003|12012899012|2092899012|35042699022|82310400026|6059299003|3072899012|43022699015|5063699009|5133699003|19002099009|18003699003|16102099003|57112099003|22082099003|55112099003|10067099003; X-Forefront-Antispam-Report: CIP:99.81.216.78;CTRY:IE;LANG:en;SCL:-1;SRV:;IPV:CAL;SFV:SKN;H:nat.eu.perception-point.io;PTR:nat2.eu.perception-point.io;CAT:NONE;SFS:(13230040)(704161411799003)(12012899012)(2092899012)(35042699022)(82310400026)(6059299003)(3072899012)(43022699015)(5063699009)(5133699003)(19002099009)(18003699003)(16102099003)(57112099003)(22082099003)(55112099003)(10067099003);DIR:INB; X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Aug 2026 14:06:38.1666 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 197044ba-b2a7-48c7-9434-08df076913dc X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: CPH1EPF00000519.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6323 X-MS-Exchange-Transport-EndToEndLatency: 00:00:07.0407188 X-MS-Exchange-Processed-By-BccFoldering: 15.21.0382.004 X-Microsoft-Antispam-Mailbox-Delivery: ucf:0;jmr:0;auth:0;dest:I;ENG:(910005)(944506478)(944626604)(920097)(930201)(20251009189)(140003); X-Microsoft-Antispam-Message-Info: =?utf-8?B?UUdWemVJdkFlVTdTdUpQcVhTQVhzbThXcUNjRVNOeXpHK3BLa09lZGxZTGIv?= =?utf-8?B?cTFGTTY5T0tGcCsrT0FUUXdtS3hCMGx6VmtBSWFaSnhTbmNsSVN3NDc1TG1j?= =?utf-8?B?Y3Q2L2I0YWd0TzJzeFRXdU9PUWMxNVFQaE4yUzY5V1VtdWJFWHRIK0F0cGFB?= =?utf-8?B?cnRJc0JLbTRnMnhvZnBTazVRc2NtOUhZcEtYdVBqNHBaNkw5MlpEbG1YY3NR?= =?utf-8?B?ZVFqZjdMZkFQMXlKN29zczYzUy9WOXgvbWZCc0pBcDlrWkl0cFp3dXAxZDZB?= =?utf-8?B?V0RQSDlORlZyQ0VXTno2djNIbnpubExXeGViZi93L2ZxL0Y5MU96TERXV09R?= =?utf-8?B?ZWIzUWNkdVNvWUVBV3NKdmJ4RFRPaFNOQ3Z1L1VXVFN0eDZtcjd4KzYxUit0?= =?utf-8?B?MmlaT2pSZUdicm4rbDNGWFc4WUdVNVRRT0Era3cvK2hJeUxuTHNBR3dQYXFx?= =?utf-8?B?Z2VtenIrWGhRSG1nNTNQU3B2dHVVbnkraVVqanRGSnMwRnBSV3MwK2dwbmxH?= =?utf-8?B?UEVlbVVIZFR3QXUyT1BxQTJjNnFrZG80WjJSb2puZ3ROWEVOdlYycnVkL0dq?= =?utf-8?B?V3NlRERuNkRqNFd1d2lUSEoyUldWNE5yUktLaTlvQVNib1gwMXp6REJ3Ulo4?= =?utf-8?B?blpxNHB3cFk2Vld5UnlhSmw2ODl1Um1GV3o0aUV0RXJkMFdlbHVxVTNsMjhv?= =?utf-8?B?VUFiZDByMlZ3cVc4REtCaXg5YTk2VnRHMzU2cTNXQmlMUDdPYkVrT3l3ZURt?= =?utf-8?B?UUZlbFNNeUtnNDlLckliZHFQYUFsZExsNWVla0h5K3RnalA5U0J1RHJIczBn?= =?utf-8?B?czlDOG5UcFRYZjFyek1ibVJDMHh3Vi9NWk12YnVDaDEzVHpBZDVrK2VaZXIw?= =?utf-8?B?NlY2NkxXYXN4OElCUVZYSGJNcU04NzZLM1Vockd6Nmh2N3M3SmhaTk5Fc05i?= =?utf-8?B?RU96bnUzbXdhQjlOM0taWDJhU3JBZGUxS280YitoZThuelFDY21uZDE5VE9G?= =?utf-8?B?R0g2UWRvQldka1NjV3BNd24xNThSdU5XOFgxUWwvVldKL1lZRGhKNUR1L0xQ?= =?utf-8?B?RXI4eTRxRXJuMFhqQm1ZMTNTQTlpQmhPeHF2Y3F6OHJramhTWFU1MkNjamEr?= =?utf-8?B?Mm0vVzhYN3hSaHJIWjRTRVprb3hPY05zNVJlOE9SbFg1U3RxSGlGMjFIYWhW?= =?utf-8?B?a3hicjcvZFE3UzkycG5RRDVRV0krTTBzbkxYOXJ4ME1zYjlwT0dWbi8vSGpw?= =?utf-8?B?ZWord1UvZ0s2QmkyZXplY2tXVC91Q0xHS1I3RXBKTnRRRFJQMWc1K2QwWnBz?= =?utf-8?B?bFNCV0RsTmFQVHYyRlBkVEVjUzg2MWVCMUllcjJvQjFmcGtkUkUyTjdxcmtU?= =?utf-8?B?VlQrMUlxWmMvZWo2MjN2bVdrY3Q4QWh6dGs0UmQzc2d5cXc5NExCREU2Qk5a?= =?utf-8?B?WmJpd3d2UFVXbGs5T0d4WWZuMXBXajAxWlArRW1zVm1zY0c5dm1lZGExV3Bz?= =?utf-8?B?WXJSZ1I2Q0UzN3VNeWw0MVVPcjQwd0xueXhXdXFHOFRlT0VrOXcvaTdMNnVP?= =?utf-8?B?R2ljbTF2a3Y3Nzk5NDhXVjF6SVZwL24zWHB3MlJ2MmIyNVFkUjFrMHZDaVlH?= =?utf-8?B?OHhGTWlDaUwwd2ZqTEpyVzZVemYvaUNCbVhSTVc1UnArdjh6RVp5WlJCaUhK?= =?utf-8?B?a3R3U1J3bE01eGszVGR1KzMxWW1ReFpDMUJmWjVDNXFGa0ROayt2RlNSYXRq?= =?utf-8?B?amxpamk5VmxFa1RwNFNsVE9DSkZNcFZidjgxTjhQZURFNm1Qcmh6cEhwaG5C?= =?utf-8?B?bUFMY1VranlDbTBiNy9raHBQT3ozbENaTTZTdkZTd2ZwOSt6MWcxNlhDRXJi?= =?utf-8?B?Um5zck9ySC9rV2R1SFNXaEc4Tys4Sit1eVJXZkU3YnZZeEhaMHN5Z1RDWmVN?= =?utf-8?B?bkp6NUZ0V01YWm94SklKbktPRk5XM0VGd1ZvVUxjVytTams0MEh5ZlpHb1g5?= =?utf-8?B?SldtRXNQOUJSMUdRdWp1MUJTeCtwOFY4TTJxTk1zSWczVjBSeDJTUndPTW9U?= =?utf-8?B?QUJzekZXZnI4eVU1K3ZxNjlzeEtyWWdGd2FhTERpTEFMMmVoZDFCMm8rU0FT?= =?utf-8?B?MTNMdU9pUU5saEtSamZDUTZkRFd0WTQvaFFEc2ZpdG9FUTl2dVFWUXh0RXF5?= =?utf-8?B?WDUrcDJxejF0QWJnZkU0VWk2OHdnR3o3L1dqd3ZDa3h3ZTRSa3Q3UzZPRUlj?= =?utf-8?B?QWhmSnlYb2R6OE5WamVBcitCZDYwclV4eVdTWTJhWHRVZld5a3VZemZidy9h?= =?utf-8?B?NE5EcFAyR0o5S1N3bDkwbVA0bDNSNGtybHJzVnBTTmsrandiZTFWVktNa3Bk?= =?utf-8?B?N01vWGVxb1VoQ1lTM1hvdTVmNlZEazdZdnNWNzBuL1Nkb2VselF5ZFoxQU4w?= =?utf-8?B?eFhPTkVjUFFTQldSYyswWmticmJqL0NscFJKTE53K1pJc1B2YlQwL3VNV3Bz?= =?utf-8?B?WDhiS3RpelVBbUR3dklja2x3blhuMVlOb1pkeWF5UzVPaUhuRzlCVzJsWWdW?= =?utf-8?B?OCtiSlBoSTQ0OXRqNFcxbzFYZ1NmMG5nOW9IMFZSSWYzN0dwVXV3MkZTV2xm?= =?utf-8?B?UDA5dzllaW9ucE01WGdqVHlMTUZLNW1jTXJsVTQydWl5RkRENkJlalNva0lG?= =?utf-8?B?aTFWbkw2cytGYk9BazN3SlJRZC9aS2xMRGsvL0I3VHpycmhvREpwTXc3NGFR?= =?utf-8?B?TkJGYXVWc3B2Y011VEZmKzhxTzl0bjJvY0xtSzBIaGZKSnEvZTNOYXhTcDNr?= =?utf-8?B?dE9IRjk5T2VlOFlzUklYVzJ0MzExZ0Fienh3Q29jcGNqMjhWVURiOURrWmVw?= =?utf-8?B?eDJqMHdEcFpyL015QVhocHp0VEJVeXFzWmRpMEd1TTBvMEtoZTBROTVCcmls?= =?utf-8?B?bWJEdzhRalNLUGwwMUhuUWtjSWVMSWttZjBvektOaFFHMGhyNTJ5R1N5ZzNC?= =?utf-8?B?WmVGWVc3Z1d3L3EvK1ZBa0hydFFVc1JhMXR2dGpGSHJ2SnZyWlpWcURma1pH?= =?utf-8?B?ZGR0RjhXUlFiSzJSOG9leUdSWlhOaUJWVkNkUHo2L3Y3Kzd6aXZiMkZ4RXhO?= =?utf-8?B?UldQK29ZKzZ2amRFOTg0MEEwTUV4cndLSDVnTmNOQXJqY0JnK0V6TnU3QTY4?= =?utf-8?B?N1Rodmd1YXQrMTVEUmx0dmF2THZXbjdPeHFSdVowc2hnMXNVQ25YMUQ1TlFC?= =?utf-8?B?bXUvWHhJcnI0cnRaODc2eW00SFA5dldXUGpCWTZjTFNjalF1SERhcGl1ZkpG?= =?utf-8?B?cEN6blRYdGdLbHRFWnN5RmNHeHpuaVlkS0E3U28vQlN2ZVpVWlowUFlJWjVU?= =?utf-8?B?WW4vZ3RvZXNWVkNlbk50MEZ1VUZoWklBdm5UWU0zMWxkQWJUNWNOY01XOCs5?= =?utf-8?B?UituU0l2SjUvR24vVW83MmozSU9PQ0tsMXZXV0FJc2t5cHlIVFZhTEE5RUU3?= =?utf-8?Q?Pd6RJL8GHtrFTtvE8Rypi2Shst1wvyh98mtHgE=3D?= MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: QEMU List-Id: From: Denis V. Lunev Check that malformed HTTP greetings are answered with an HTTP 400 rather than an empty response. The no-space case is the one which used to leave the response buffer empty. Cc: Daniel P. Berrangé Message-ID: <20260831100151.914178-5-den@openvz.org> Reviewed-by: Marc-André Lureau Signed-off-by: Denis V. Lunev --- tests/unit/meson.build | 1 + tests/unit/test-io-channel-websock.c | 105 +++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 tests/unit/test-io-channel-websock.c diff --git a/tests/unit/meson.build b/tests/unit/meson.build index afe3ab569c9..64641c6bb43 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -91,6 +91,7 @@ if have_block 'test-io-channel-command': ['io-channel-helpers.c', io], 'test-io-channel-buffer': ['io-channel-helpers.c', io], 'test-io-channel-null': [io], + 'test-io-channel-websock': [io], 'test-crypto-ivgen': [io], 'test-crypto-afsplit': [io], 'test-crypto-block': [io], diff --git a/tests/unit/test-io-channel-websock.c b/tests/unit/test-io-channel-websock.c new file mode 100644 index 00000000000..2a55a4bcdf8 --- /dev/null +++ b/tests/unit/test-io-channel-websock.c @@ -0,0 +1,105 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * QEMU I/O channel websock test + * + * Copyright (c) 2026 Virtuozzo International GmbH + */ + +#include "qemu/osdep.h" +#include "io/channel-websock.h" +#include "io/channel-socket.h" +#include "qapi/error.h" +#include "qemu/module.h" +#include "qemu/sockets.h" + +typedef struct { + bool finished; + bool failed; +} QIOChannelWebsockHandshake; + +static void test_websock_handshake_done(QIOTask *task, gpointer opaque) +{ + QIOChannelWebsockHandshake *res = opaque; + + res->finished = true; + res->failed = qio_task_propagate_error(task, NULL); +} + +/* + * Drives a server-side handshake against @request and returns whatever + * the server wrote back, NUL terminated. The handshake is expected to + * fail; the point of the test is the HTTP response that goes with it. + */ +static char *test_websock_handshake_reply(const char *request) +{ + QIOChannelWebsockHandshake res = { false, false }; + QIOChannelSocket *cli, *srv; + QIOChannelWebsock *wioc; + GMainContext *mainloop; + int channel[2]; + char *reply; + ssize_t got; + + g_assert(qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, channel) == 0); + + cli = qio_channel_socket_new_fd(channel[0], &error_abort); + srv = qio_channel_socket_new_fd(channel[1], &error_abort); + qio_channel_set_blocking(QIO_CHANNEL(srv), false, &error_abort); + qio_channel_set_blocking(QIO_CHANNEL(cli), false, &error_abort); + + wioc = qio_channel_websock_new_server(QIO_CHANNEL(srv)); + qio_channel_websock_handshake(wioc, test_websock_handshake_done, + &res, NULL); + + qio_channel_write_all(QIO_CHANNEL(cli), request, strlen(request), + &error_abort); + + mainloop = g_main_context_default(); + while (!res.finished) { + g_main_context_iteration(mainloop, TRUE); + } + g_assert(res.failed); + + reply = g_malloc0(1024); + got = qio_channel_read(QIO_CHANNEL(cli), reply, 1023, &error_abort); + if (got > 0) { + reply[got] = '\0'; + } + + object_unref(OBJECT(wioc)); + object_unref(OBJECT(srv)); + object_unref(OBJECT(cli)); + + return reply; +} + +static void test_websock_bad_request(const void *opaque) +{ + const char *request = opaque; + g_autofree char *reply = test_websock_handshake_reply(request); + + g_assert_true(g_str_has_prefix(reply, "HTTP/1.1 400 Bad Request\r\n")); +} + +int main(int argc, char **argv) +{ + module_call_init(MODULE_INIT_QOM); + g_test_init(&argc, &argv, NULL); + +#define TEST_BAD_REQUEST(name, request) \ + g_test_add_data_func("/io/channel/websock/bad-request/" name, \ + request, test_websock_bad_request) + + /* + * A greeting with no space at all used to leave the response buffer + * empty, which drove the handshake into a zero length write. + */ + TEST_BAD_REQUEST("no-space", "stats\r\nx\r\n\r\n"); + TEST_BAD_REQUEST("method-only", "GET\r\nx\r\n\r\n"); + TEST_BAD_REQUEST("no-version", "GET /\r\nx\r\n\r\n"); + TEST_BAD_REQUEST("bad-method", "POST / HTTP/1.1\r\nx: y\r\n\r\n"); + TEST_BAD_REQUEST("bad-version", "GET / HTTP/1.0\r\nx: y\r\n\r\n"); + + return g_test_run(); +} -- 2.53.0