)]}'
{"nova/privsep/libvirt.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9353828cf0de0aa2a19a75388dc2c4cb18e67c8a","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    return processutils.execute(*sysdr_cmd)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"# NOTE(kaisers): this method is deliberately not wrapped in a privsep entry."},{"line_number":230,"context_line":"def unprivileged_qb_mount(qb_vol, mnt_base, cfg_file\u003dNone):"},{"line_number":231,"context_line":"    \"\"\"Mount QB volume\"\"\""},{"line_number":232,"context_line":"    mnt_cmd \u003d [\u0027mount.quobyte\u0027, \u0027--disable-xattrs\u0027, qb_vol, mnt_base]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_7599ba1d","line":229,"updated":"2019-04-10 22:10:25.000000000","message":"fwiw, I suspect the \u0027p\u0027 was deliberate","commit_id":"82c79ceac30d7b97d68c2d71bdd0aae8c7038811"}],"nova/tests/unit/privsep/test_libvirt.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"2f3b6c8c621cac686e3d7ce033a1283b6c92026f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":37,"context_line":"    def test_dmcrypt_create_volume(self, mock_execute):"},{"line_number":38,"context_line":"        nova.privsep.libvirt.dmcrypt_create_volume("},{"line_number":39,"context_line":"            \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027, \u0027LUKS1\u0027, 1024, \u0027I am a fish\u0027)"},{"line_number":40,"context_line":"        mock_execute.assert_called_with("},{"line_number":41,"context_line":"            \u0027cryptsetup\u0027, \u0027create\u0027, \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027,"},{"line_number":42,"context_line":"           \u0027--cipher\u003dLUKS1\u0027, \u0027--key-size\u003d1024\u0027, \u0027--key-file\u003d-\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_ce48df5d","line":39,"range":{"start_line":39,"start_character":56,"end_line":39,"end_character":69},"updated":"2019-04-03 01:59:54.000000000","message":"Python 3 test fails. So it should be \"b\u0027I am a fish\u0027\".","commit_id":"e438b926202b1b13f9a04dbf16551cdb0e8ae566"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"6c7bbfd584b10f99ae4b09531c8318a883fe0e8a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":37,"context_line":"    def test_dmcrypt_create_volume(self, mock_execute):"},{"line_number":38,"context_line":"        nova.privsep.libvirt.dmcrypt_create_volume("},{"line_number":39,"context_line":"            \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027, \u0027LUKS1\u0027, 1024, \u0027I am a fish\u0027)"},{"line_number":40,"context_line":"        mock_execute.assert_called_with("},{"line_number":41,"context_line":"            \u0027cryptsetup\u0027, \u0027create\u0027, \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027,"},{"line_number":42,"context_line":"           \u0027--cipher\u003dLUKS1\u0027, \u0027--key-size\u003d1024\u0027, \u0027--key-file\u003d-\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_2065c21d","line":39,"range":{"start_line":39,"start_character":56,"end_line":39,"end_character":69},"in_reply_to":"5fc1f717_ce48df5d","updated":"2019-04-04 20:43:43.000000000","message":"Done","commit_id":"e438b926202b1b13f9a04dbf16551cdb0e8ae566"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"2f3b6c8c621cac686e3d7ce033a1283b6c92026f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        mock_execute.assert_called_with("},{"line_number":41,"context_line":"            \u0027cryptsetup\u0027, \u0027create\u0027, \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027,"},{"line_number":42,"context_line":"           \u0027--cipher\u003dLUKS1\u0027, \u0027--key-size\u003d1024\u0027, \u0027--key-file\u003d-\u0027,"},{"line_number":43,"context_line":"            process_input\u003dbinascii.hexlify(\u0027I am a fish\u0027).decode(\u0027utf-8\u0027))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":46,"context_line":"    def test_dmcrypt_delete_volume(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_ee435b3e","line":43,"range":{"start_line":43,"start_character":43,"end_line":43,"end_character":56},"updated":"2019-04-03 01:59:54.000000000","message":"b\u0027I am a fish\u0027","commit_id":"e438b926202b1b13f9a04dbf16551cdb0e8ae566"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"6c7bbfd584b10f99ae4b09531c8318a883fe0e8a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        mock_execute.assert_called_with("},{"line_number":41,"context_line":"            \u0027cryptsetup\u0027, \u0027create\u0027, \u0027/fake/path\u0027, \u0027/dev/nosuch\u0027,"},{"line_number":42,"context_line":"           \u0027--cipher\u003dLUKS1\u0027, \u0027--key-size\u003d1024\u0027, \u0027--key-file\u003d-\u0027,"},{"line_number":43,"context_line":"            process_input\u003dbinascii.hexlify(\u0027I am a fish\u0027).decode(\u0027utf-8\u0027))"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @mock.patch(\u0027oslo_concurrency.processutils.execute\u0027)"},{"line_number":46,"context_line":"    def test_dmcrypt_delete_volume(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_c06b9eee","line":43,"range":{"start_line":43,"start_character":43,"end_line":43,"end_character":56},"in_reply_to":"5fc1f717_ee435b3e","updated":"2019-04-04 20:43:43.000000000","message":"Done","commit_id":"e438b926202b1b13f9a04dbf16551cdb0e8ae566"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9353828cf0de0aa2a19a75388dc2c4cb18e67c8a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027ploop\u0027, \u0027restore-descriptor\u0027, \u0027-f\u0027, \u0027raw\u0027,"},{"line_number":77,"context_line":"            \u0027/img/dir\u0027, \u0027imagefile\u0027, check_exit_code\u003dTrue)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_enable_hairping(self):"},{"line_number":80,"context_line":"        mock_open \u003d mock.mock_open()"},{"line_number":81,"context_line":"        with mock.patch.object(six.moves.builtins, \u0027open\u0027,"},{"line_number":82,"context_line":"                               new\u003dmock_open) as mock_open:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_f5ffea31","line":79,"range":{"start_line":79,"start_character":20,"end_line":79,"end_character":28},"updated":"2019-04-10 22:10:25.000000000","message":"hairpin","commit_id":"82c79ceac30d7b97d68c2d71bdd0aae8c7038811"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9353828cf0de0aa2a19a75388dc2c4cb18e67c8a","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"            mock_import.assert_called()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            # NOTE(mikal): we can\u0027t assert that values from fcntl are passed"},{"line_number":150,"context_line":"            # here because we can\u0027t import fcntl in these tests because it"},{"line_number":151,"context_line":"            # is not present on Microsoft Windows."},{"line_number":152,"context_line":"            mock_fcntl.asert_has_calls("},{"line_number":153,"context_line":"                mock.call(mock.ANY, mock.ANY),"},{"line_number":154,"context_line":"                mock.call(mock.ANY, mock.ANY, 32769 | os.O_NONBLOCK))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_55627e18","line":151,"range":{"start_line":149,"start_character":0,"end_line":151,"end_character":50},"updated":"2019-04-10 22:10:25.000000000","message":"you could mock patch those symbols (as you did fcntl.fcntl) and assert called with the mocks.","commit_id":"82c79ceac30d7b97d68c2d71bdd0aae8c7038811"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9353828cf0de0aa2a19a75388dc2c4cb18e67c8a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            # is not present on Microsoft Windows."},{"line_number":152,"context_line":"            mock_fcntl.asert_has_calls("},{"line_number":153,"context_line":"                mock.call(mock.ANY, mock.ANY),"},{"line_number":154,"context_line":"                mock.call(mock.ANY, mock.ANY, 32769 | os.O_NONBLOCK))"},{"line_number":155,"context_line":"            self.assertTrue(mock.call(\u0027/fake/path\u0027, \u0027r\u0027) in"},{"line_number":156,"context_line":"                            mock_open.mock_calls)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fce034c_554b5e86","line":154,"range":{"start_line":154,"start_character":46,"end_line":154,"end_character":51},"updated":"2019-04-10 22:10:25.000000000","message":"I see os.O_NONBLOCK is 2048, so this happens to be safe, but if the bits overlapped, this wouldn\u0027t prove anything. Possibly worth an explanatory comment that we\u0027re actually relying on the value of os.O_NONBLOCK not overlapping with 32769. Or, if you\u0027re going that far, just hardcode the expected value as 34817.","commit_id":"82c79ceac30d7b97d68c2d71bdd0aae8c7038811"}]}
