)]}'
{"octavia_tempest_plugin/tests/scenario/v2/test_traffic_ops.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1330,"context_line":"        self._test_basic_traffic("},{"line_number":1331,"context_line":"            const.HTTP, listener_port, listener_id, pool_id)"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"        # Update listener to insert HTTP \"X_FORWARDED\" type headers."},{"line_number":1334,"context_line":"        listener_kwargs \u003d {"},{"line_number":1335,"context_line":"            const.LISTENER_ID: listener_id,"},{"line_number":1336,"context_line":"            const.INSERT_HEADERS: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"26fbff0a_b66a9260","line":1333,"range":{"start_line":1333,"start_character":10,"end_line":1333,"end_character":25},"updated":"2021-03-09 10:11:39.000000000","message":"I think we can cover more cases if:\n- the listener is directly created with the \"insert_headers\" feature\n- the test verifies that all the headers are present in the server\u0027s replies\n- the listener is updated (enable only 1 or 2 insert_headers)\n- the test checks that only the requested headers are in the reply","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"        self._test_basic_traffic("},{"line_number":1331,"context_line":"            const.HTTP, listener_port, listener_id, pool_id)"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"        # Update listener to insert HTTP \"X_FORWARDED\" type headers."},{"line_number":1334,"context_line":"        listener_kwargs \u003d {"},{"line_number":1335,"context_line":"            const.LISTENER_ID: listener_id,"},{"line_number":1336,"context_line":"            const.INSERT_HEADERS: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"85036eb3_f07d8f92","line":1333,"range":{"start_line":1333,"start_character":10,"end_line":1333,"end_character":25},"in_reply_to":"26fbff0a_b66a9260","updated":"2021-03-10 11:30:50.000000000","message":"Done","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1348,"context_line":"        # Should never fail if LB is up and running properly."},{"line_number":1349,"context_line":"        # Runtime Error is raised on failure."},{"line_number":1350,"context_line":"        try:"},{"line_number":1351,"context_line":"            s \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"},{"line_number":1352,"context_line":"            s.connect((self.lb_vip_address, listener_port))"},{"line_number":1353,"context_line":"            client_source_ip \u003d s.getsockname()[0]"},{"line_number":1354,"context_line":"            s.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"03481923_e2fe4e33","line":1351,"range":{"start_line":1351,"start_character":53,"end_line":1351,"end_character":63},"updated":"2021-03-09 10:11:39.000000000","message":"SOCK_DGRAM is for UDP sockets, SOCK_STREAM is the correct type for TCP sockets.\nHere it works because we don\u0027t need to send any packets, and any UDP or TCP sockets will use the same client source ip","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":false,"context_lines":[{"line_number":1348,"context_line":"        # Should never fail if LB is up and running properly."},{"line_number":1349,"context_line":"        # Runtime Error is raised on failure."},{"line_number":1350,"context_line":"        try:"},{"line_number":1351,"context_line":"            s \u003d socket.socket(socket.AF_INET, socket.SOCK_DGRAM)"},{"line_number":1352,"context_line":"            s.connect((self.lb_vip_address, listener_port))"},{"line_number":1353,"context_line":"            client_source_ip \u003d s.getsockname()[0]"},{"line_number":1354,"context_line":"            s.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"50fab044_d6239788","line":1351,"range":{"start_line":1351,"start_character":53,"end_line":1351,"end_character":63},"in_reply_to":"03481923_e2fe4e33","updated":"2021-03-10 11:30:50.000000000","message":"Done","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1353,"context_line":"            client_source_ip \u003d s.getsockname()[0]"},{"line_number":1354,"context_line":"            s.close()"},{"line_number":1355,"context_line":"        except Exception as e:"},{"line_number":1356,"context_line":"            LOG.error(\u0027Failed with: {} \u0027.format(e))"},{"line_number":1357,"context_line":"            raise RuntimeError(\u0027Failed to establish TCP connection to LB\u0027)"},{"line_number":1358,"context_line":""},{"line_number":1359,"context_line":"        # Initiate HTTP traffic, make sure that all HTTP headers have been"}],"source_content_type":"text/x-python","patch_set":1,"id":"33dd8f40_82e08fd3","line":1356,"range":{"start_line":1356,"start_character":16,"end_line":1356,"end_character":21},"updated":"2021-03-09 10:11:39.000000000","message":"look goods, but LOG.exception would fit better here, it displays the string, then displays the exception (so you wouldn\u0027t need to pass \u0027e\u0027 in the string)","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":false,"context_lines":[{"line_number":1353,"context_line":"            client_source_ip \u003d s.getsockname()[0]"},{"line_number":1354,"context_line":"            s.close()"},{"line_number":1355,"context_line":"        except Exception as e:"},{"line_number":1356,"context_line":"            LOG.error(\u0027Failed with: {} \u0027.format(e))"},{"line_number":1357,"context_line":"            raise RuntimeError(\u0027Failed to establish TCP connection to LB\u0027)"},{"line_number":1358,"context_line":""},{"line_number":1359,"context_line":"        # Initiate HTTP traffic, make sure that all HTTP headers have been"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0856bd5_f1edd8b3","line":1356,"range":{"start_line":1356,"start_character":16,"end_line":1356,"end_character":21},"in_reply_to":"33dd8f40_82e08fd3","updated":"2021-03-10 11:30:50.000000000","message":"Done","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1354,"context_line":"            s.close()"},{"line_number":1355,"context_line":"        except Exception as e:"},{"line_number":1356,"context_line":"            LOG.error(\u0027Failed with: {} \u0027.format(e))"},{"line_number":1357,"context_line":"            raise RuntimeError(\u0027Failed to establish TCP connection to LB\u0027)"},{"line_number":1358,"context_line":""},{"line_number":1359,"context_line":"        # Initiate HTTP traffic, make sure that all HTTP headers have been"},{"line_number":1360,"context_line":"        # successfully forwarded to the backend server (members)"}],"source_content_type":"text/x-python","patch_set":1,"id":"255b6a7a_c5841f04","line":1357,"range":{"start_line":1357,"start_character":18,"end_line":1357,"end_character":30},"updated":"2021-03-09 10:11:39.000000000","message":"\"Exception\" type is more appropriate here (this is the exception we raise in similar cases in octavia_tempest_plugin/tests/validators.py)","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":false,"context_lines":[{"line_number":1354,"context_line":"            s.close()"},{"line_number":1355,"context_line":"        except Exception as e:"},{"line_number":1356,"context_line":"            LOG.error(\u0027Failed with: {} \u0027.format(e))"},{"line_number":1357,"context_line":"            raise RuntimeError(\u0027Failed to establish TCP connection to LB\u0027)"},{"line_number":1358,"context_line":""},{"line_number":1359,"context_line":"        # Initiate HTTP traffic, make sure that all HTTP headers have been"},{"line_number":1360,"context_line":"        # successfully forwarded to the backend server (members)"}],"source_content_type":"text/x-python","patch_set":1,"id":"cc903637_5603bda2","line":1357,"range":{"start_line":1357,"start_character":18,"end_line":1357,"end_character":30},"in_reply_to":"255b6a7a_c5841f04","updated":"2021-03-10 11:30:50.000000000","message":"Done","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1360,"context_line":"        # successfully forwarded to the backend server (members)"},{"line_number":1361,"context_line":"        test_url \u003d \u0027http://{}:{}/request\u0027.format("},{"line_number":1362,"context_line":"            self.lb_vip_address, listener_port)"},{"line_number":1363,"context_line":"        data \u003d self.validate_URL_response(test_url).lower().replace(\u0027 \u0027, \u0027\u0027)"},{"line_number":1364,"context_line":"        LOG.info(\"Retrieved client\u0027s HTTP headers are: {}\\n\".format(data))"},{"line_number":1365,"context_line":"        expected_headers \u003d listener_kwargs[const.INSERT_HEADERS]"},{"line_number":1366,"context_line":"        expected_key_values \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"bda62b6d_6f57fcae","line":1363,"range":{"start_line":1363,"start_character":51,"end_line":1363,"end_character":76},"updated":"2021-03-09 10:11:39.000000000","message":"any reason why we need to modify the payload?","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":true,"context_lines":[{"line_number":1360,"context_line":"        # successfully forwarded to the backend server (members)"},{"line_number":1361,"context_line":"        test_url \u003d \u0027http://{}:{}/request\u0027.format("},{"line_number":1362,"context_line":"            self.lb_vip_address, listener_port)"},{"line_number":1363,"context_line":"        data \u003d self.validate_URL_response(test_url).lower().replace(\u0027 \u0027, \u0027\u0027)"},{"line_number":1364,"context_line":"        LOG.info(\"Retrieved client\u0027s HTTP headers are: {}\\n\".format(data))"},{"line_number":1365,"context_line":"        expected_headers \u003d listener_kwargs[const.INSERT_HEADERS]"},{"line_number":1366,"context_line":"        expected_key_values \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"c7bad33b_ab22bb10","line":1363,"range":{"start_line":1363,"start_character":51,"end_line":1363,"end_character":76},"in_reply_to":"bda62b6d_6f57fcae","updated":"2021-03-10 11:30:50.000000000","message":"To avoid failures because of case sensitive, for example \"http\" value is forwarded in low case.","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"218b7ec8d16bd866b5c1f732a3c15a10a5039951","unresolved":true,"context_lines":[{"line_number":1363,"context_line":"        data \u003d self.validate_URL_response(test_url).lower().replace(\u0027 \u0027, \u0027\u0027)"},{"line_number":1364,"context_line":"        LOG.info(\"Retrieved client\u0027s HTTP headers are: {}\\n\".format(data))"},{"line_number":1365,"context_line":"        expected_headers \u003d listener_kwargs[const.INSERT_HEADERS]"},{"line_number":1366,"context_line":"        expected_key_values \u003d []"},{"line_number":1367,"context_line":"        for header in expected_headers:"},{"line_number":1368,"context_line":"            if header \u003d\u003d const.X_FORWARDED_FOR:"},{"line_number":1369,"context_line":"                expected_key_values.append("},{"line_number":1370,"context_line":"                    (const.X_FORWARDED_FOR+\u0027:\u0027+client_source_ip).lower())"},{"line_number":1371,"context_line":"            if header \u003d\u003d const.X_FORWARDED_PORT:"},{"line_number":1372,"context_line":"                expected_key_values.append("},{"line_number":1373,"context_line":"                    (const.X_FORWARDED_PORT+\u0027:\u0027+str(listener_port)).lower())"},{"line_number":1374,"context_line":"            if header \u003d\u003d const.X_FORWARDED_PROTO:"},{"line_number":1375,"context_line":"                expected_key_values.append("},{"line_number":1376,"context_line":"                    (const.X_FORWARDED_PROTO+\u0027:\u0027+const.HTTP).lower())"},{"line_number":1377,"context_line":"        LOG.info(\u0027Expected HTTP headers are: {}\\n\u0027.format("},{"line_number":1378,"context_line":"            str(expected_key_values)))"},{"line_number":1379,"context_line":"        for item in expected_key_values:"},{"line_number":1380,"context_line":"            self.assertIn("},{"line_number":1381,"context_line":"                item, data,"},{"line_number":1382,"context_line":"                \u0027\"{}\" was not found in retrieved headers {}\\n. \u0027.format("},{"line_number":1383,"context_line":"                    item, data))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa0eca3_eecdb487","line":1383,"range":{"start_line":1366,"start_character":7,"end_line":1383,"end_character":32},"updated":"2021-03-09 10:11:39.000000000","message":"I feel like this part is too much complex with a lot of string processing, it would be better to build a dict from the server payload, then compares the elements from the dict with the expected headers, something like:\n\n        data \u003d self.validate_URL_response(test_url)\n        received_headers \u003d {}\n        expected_headers \u003d {\n            const.X_FORWARDED_FOR: client_source_ip,\n            const.X_FORWARDED_PORT: str(listener_port),\n            const.X_FORWARDED_PROTO: const.HTTP.lower()\n        }\n        for line in data.split(\u0027\\n\u0027):\n            try:\n                key, value \u003d line.split(\u0027: \u0027, 1)\n            except ValueError:\n                continue\n            if key in expected_headers:\n                received_headers[key] \u003d value\n        self.assertEqual(expected_headers, received_headers)","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":28609,"name":"Arkady Shtempler","email":"ashtempl@redhat.com","username":"ashtempl"},"change_message_id":"bb766621d8582a3ecb07971ee795072c0aaeff49","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        data \u003d self.validate_URL_response(test_url).lower().replace(\u0027 \u0027, \u0027\u0027)"},{"line_number":1364,"context_line":"        LOG.info(\"Retrieved client\u0027s HTTP headers are: {}\\n\".format(data))"},{"line_number":1365,"context_line":"        expected_headers \u003d listener_kwargs[const.INSERT_HEADERS]"},{"line_number":1366,"context_line":"        expected_key_values \u003d []"},{"line_number":1367,"context_line":"        for header in expected_headers:"},{"line_number":1368,"context_line":"            if header \u003d\u003d const.X_FORWARDED_FOR:"},{"line_number":1369,"context_line":"                expected_key_values.append("},{"line_number":1370,"context_line":"                    (const.X_FORWARDED_FOR+\u0027:\u0027+client_source_ip).lower())"},{"line_number":1371,"context_line":"            if header \u003d\u003d const.X_FORWARDED_PORT:"},{"line_number":1372,"context_line":"                expected_key_values.append("},{"line_number":1373,"context_line":"                    (const.X_FORWARDED_PORT+\u0027:\u0027+str(listener_port)).lower())"},{"line_number":1374,"context_line":"            if header \u003d\u003d const.X_FORWARDED_PROTO:"},{"line_number":1375,"context_line":"                expected_key_values.append("},{"line_number":1376,"context_line":"                    (const.X_FORWARDED_PROTO+\u0027:\u0027+const.HTTP).lower())"},{"line_number":1377,"context_line":"        LOG.info(\u0027Expected HTTP headers are: {}\\n\u0027.format("},{"line_number":1378,"context_line":"            str(expected_key_values)))"},{"line_number":1379,"context_line":"        for item in expected_key_values:"},{"line_number":1380,"context_line":"            self.assertIn("},{"line_number":1381,"context_line":"                item, data,"},{"line_number":1382,"context_line":"                \u0027\"{}\" was not found in retrieved headers {}\\n. \u0027.format("},{"line_number":1383,"context_line":"                    item, data))"}],"source_content_type":"text/x-python","patch_set":1,"id":"98ada6b8_b5085288","line":1383,"range":{"start_line":1366,"start_character":7,"end_line":1383,"end_character":32},"in_reply_to":"1fa0eca3_eecdb487","updated":"2021-03-10 11:30:50.000000000","message":"Done","commit_id":"170644bf493f23dfb9f9cfdcb251b46a6243a2ef"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"140790d1737a59e24a875d3237b7df663b143b13","unresolved":true,"context_lines":[{"line_number":1362,"context_line":"                    key, value \u003d line.split(\u0027: \u0027, 1)"},{"line_number":1363,"context_line":"                except ValueError:"},{"line_number":1364,"context_line":"                    continue"},{"line_number":1365,"context_line":"                if key in relevant_headers.keys():"},{"line_number":1366,"context_line":"                    retrieved_headers[key] \u003d value.replace(\u0027 \u0027, \u0027\u0027).lower()"},{"line_number":1367,"context_line":"            return retrieved_headers"},{"line_number":1368,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e01d0db5_012484c8","line":1365,"range":{"start_line":1365,"start_character":42,"end_line":1365,"end_character":49},"updated":"2021-03-11 09:25:10.000000000","message":".keys() is not needed with python3","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"140790d1737a59e24a875d3237b7df663b143b13","unresolved":true,"context_lines":[{"line_number":1363,"context_line":"                except ValueError:"},{"line_number":1364,"context_line":"                    continue"},{"line_number":1365,"context_line":"                if key in relevant_headers.keys():"},{"line_number":1366,"context_line":"                    retrieved_headers[key] \u003d value.replace(\u0027 \u0027, \u0027\u0027).lower()"},{"line_number":1367,"context_line":"            return retrieved_headers"},{"line_number":1368,"context_line":""},{"line_number":1369,"context_line":"        # Make sure that \"X_FORWARDED_FOR\" header was inserted with"}],"source_content_type":"text/x-python","patch_set":2,"id":"538ce327_13c24a12","line":1366,"range":{"start_line":1366,"start_character":50,"end_line":1366,"end_character":75},"updated":"2021-03-11 09:25:10.000000000","message":"I think you don\u0027t have to modify the payload, we are expecting 3 types of headers:\n- an ip address\n- a port number\n- a protocol name (already lowercase)\nperhaps lower() is acceptable, but replace(\u0027 \u0027, \u0027\u0027) can be safely removed","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"140790d1737a59e24a875d3237b7df663b143b13","unresolved":true,"context_lines":[{"line_number":1371,"context_line":"        expected_headers \u003d {const.X_FORWARDED_FOR: client_source_ip}"},{"line_number":1372,"context_line":"        received_headers \u003d _data_parser(data, expected_headers)"},{"line_number":1373,"context_line":"        self.assertEqual(expected_headers, received_headers)"},{"line_number":1374,"context_line":""},{"line_number":1375,"context_line":"        # Update listener to insert: \"X_FORWARDED_PORT\" and"},{"line_number":1376,"context_line":"        # \"X_FORWARDED_PROTO\"type headers."},{"line_number":1377,"context_line":"        listener_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"24b5d427_d9c0823a","line":1374,"updated":"2021-03-11 09:25:10.000000000","message":"we can improve the assert here, by testing that non-requested header are not present in the received headers (so we also check that X_FORWARDED_FOR was correctly removed after the update):\n       self.assertNotIn(const.X_FORWARDED_PORT, received_headers)\n       self.assertNotIn(const.X_FORWARDED_PROTO, received_headers)","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"6a5339e242fadb0251d65c438fb03c64302cd4fd","unresolved":true,"context_lines":[{"line_number":1371,"context_line":"        expected_headers \u003d {const.X_FORWARDED_FOR: client_source_ip}"},{"line_number":1372,"context_line":"        received_headers \u003d _data_parser(data, expected_headers)"},{"line_number":1373,"context_line":"        self.assertEqual(expected_headers, received_headers)"},{"line_number":1374,"context_line":""},{"line_number":1375,"context_line":"        # Update listener to insert: \"X_FORWARDED_PORT\" and"},{"line_number":1376,"context_line":"        # \"X_FORWARDED_PROTO\"type headers."},{"line_number":1377,"context_line":"        listener_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"e1fa79aa_054a5228","line":1374,"in_reply_to":"24b5d427_d9c0823a","updated":"2021-03-11 09:32:39.000000000","message":"that\u0027s a bit stupid from me :D the assertEqual already checks that no other keys are in the dict. sorry for the comment","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"140790d1737a59e24a875d3237b7df663b143b13","unresolved":true,"context_lines":[{"line_number":1392,"context_line":"        expected_headers \u003d {const.X_FORWARDED_PORT: \u0027{}\u0027.format("},{"line_number":1393,"context_line":"            listener_port), const.X_FORWARDED_PROTO: const.HTTP.lower()}"},{"line_number":1394,"context_line":"        received_headers \u003d _data_parser(data, expected_headers)"},{"line_number":1395,"context_line":"        self.assertEqual(expected_headers, received_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"cad3756e_33d4cf4b","line":1395,"updated":"2021-03-11 09:25:10.000000000","message":"We can add:\n        self.assertNotIn(const.X_FORWARDED_FOR, received_headers)","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"6a5339e242fadb0251d65c438fb03c64302cd4fd","unresolved":true,"context_lines":[{"line_number":1392,"context_line":"        expected_headers \u003d {const.X_FORWARDED_PORT: \u0027{}\u0027.format("},{"line_number":1393,"context_line":"            listener_port), const.X_FORWARDED_PROTO: const.HTTP.lower()}"},{"line_number":1394,"context_line":"        received_headers \u003d _data_parser(data, expected_headers)"},{"line_number":1395,"context_line":"        self.assertEqual(expected_headers, received_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d8a42804_e39459f2","line":1395,"in_reply_to":"cad3756e_33d4cf4b","updated":"2021-03-11 09:32:39.000000000","message":"Same here, my remark is useless","commit_id":"6e6f932b00f82bae4c6bc7e766acca7c2b942598"}]}
