)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9152,"name":"Castulo J. Martinez","email":"castulo.martinez@intel.com","username":"cas"},"change_message_id":"7b824bd9d105a484290396678bd6dfcdc0111f6e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"whether or not the communication between the novncproxy and VNC"},{"line_number":25,"context_line":"session is using TLS or is unencrypted."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"This also addresses https://bugs.launchpad.net/tempest/+bug/1554460."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Change-Id: Ic7e149f79705cbb910c5b6524dac5cdb73d69710"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dada55a8_028be568","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":67},"updated":"2016-07-21 15:01:26.000000000","message":"Maybe instead of the text you added referencing the bug you should just add:\nCloses-Bug: 1554460\nAs mentioned in the developer\u0027s guide so the reference to the patch is added to the bug automatically and the bug gets closed once the patch is merged: http://docs.openstack.org/infra/manual/developers.html#working-on-bugs","commit_id":"0b2abf21b7cb421f995b327e801cd40707ff23ee"}],"tempest/api/compute/servers/test_novnc.py":[{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"c50a9f197839c407f0afc28c2317df58044835bc","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                         \u0027initial call: \u0027 + str(resp.status))"},{"line_number":61,"context_line":"        # Do some basic validation to make sure it is an expected HTML document"},{"line_number":62,"context_line":"        self.assertFalse(resp.data.find(\u0027\u003chtml\u003e\u0027) \u003c 0 or"},{"line_number":63,"context_line":"                         resp.data.find(\u0027\u003c/html\u003e\u0027) \u003c 0,"},{"line_number":64,"context_line":"                         \u0027Not a valid html document in the response.\u0027)"},{"line_number":65,"context_line":"        # Just try to make sure we got JavaScript back for noVNC, since we"},{"line_number":66,"context_line":"        # won\u0027t actually use it since not inside of a browser"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_2a4bc288","line":63,"updated":"2016-07-29 15:22:03.000000000","message":"maybe replace with...\nself.assertTrue(\u0027\u003chtml\u003e\u0027 in resp.data and \u0027\u003c/html\u003e\u0027 in resp.data","commit_id":"62944b0d8a1618cc6d6aed8097ff7f10012a5527"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"c50a9f197839c407f0afc28c2317df58044835bc","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # won\u0027t actually use it since not inside of a browser"},{"line_number":67,"context_line":"        self.assertFalse(resp.data.find(\u0027noVNC\u0027) \u003c 0 or"},{"line_number":68,"context_line":"                         resp.data.find(\u0027\u003cscript\u0027) \u003c 0,"},{"line_number":69,"context_line":"                         \u0027Not a valid noVNC java script html document.\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _validate_rfb_negotiation(self):"},{"line_number":72,"context_line":"        \"\"\"Verify we can connect to novnc and do the websocket connection.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_2a32a210","line":69,"updated":"2016-07-29 15:22:03.000000000","message":"maybe replace with...\nself.assertTrue(\u0027noVNC\u0027 in resp.data and \u0027\u003cscript\u0027 in resp.data,","commit_id":"62944b0d8a1618cc6d6aed8097ff7f10012a5527"},{"author":{"_account_id":6608,"name":"Paul Carlton","email":"paul.carlton2@hpe.com","username":"paul-carlton2"},"change_message_id":"c50a9f197839c407f0afc28c2317df58044835bc","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        \"\"\"Verify we can connect to novnc and do the websocket connection.\"\"\""},{"line_number":73,"context_line":"        # Turn the Socket into a WebSocket to do the communication"},{"line_number":74,"context_line":"        data \u003d self._websocket.receive_frame()"},{"line_number":75,"context_line":"        self.assertFalse(data is None or len(data) \u003c\u003d 0,"},{"line_number":76,"context_line":"                         \u0027Token must be invalid because the connection \u0027"},{"line_number":77,"context_line":"                         \u0027closed.\u0027)"},{"line_number":78,"context_line":"        # Parse the RFB version from the data to make sure it is valid"}],"source_content_type":"text/x-python","patch_set":4,"id":"bacf61ea_182d7595","line":75,"updated":"2016-07-29 15:22:03.000000000","message":"can len() return less than 0?","commit_id":"62944b0d8a1618cc6d6aed8097ff7f10012a5527"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"80fbc69bc9cdcf443b1fead1351456b3d8faf784","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":"import socket"},{"line_number":19,"context_line":"import struct"},{"line_number":20,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_6bfb4148","line":17,"updated":"2016-11-21 10:01:45.000000000","message":"Nit; six is not in stdlib. Shouldn\u0027t be grouped here.","commit_id":"3fa8baea319d07b4b36fabc2c23c72b5c2027aeb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"80fbc69bc9cdcf443b1fead1351456b3d8faf784","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self._websocket.send_frame(str(data))"},{"line_number":83,"context_line":"        # Get the sever authentication type and make sure None is supported"},{"line_number":84,"context_line":"        data \u003d self._websocket.receive_frame()"},{"line_number":85,"context_line":"        self.assertFalse("},{"line_number":86,"context_line":"            data is None or len(data) \u003c 2 or"},{"line_number":87,"context_line":"            1 not in [ord(data[i + 1]) for i in range(ord(data[0]))],"},{"line_number":88,"context_line":"            \u0027Expected authentication type None.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_0b3f2dd7","line":85,"updated":"2016-11-21 10:01:45.000000000","message":"I am not a fan of this complicated assertFalse. Let\u0027s say the assertion fails. The log will say \"True is not False\" (not so useful) and their\u0027s no way to which \"parts\" of the logical expression failed.\n\nConsider using 3 assertions here. assertIsNotNone(...), assertGreater(...), and assertIn(...)","commit_id":"3fa8baea319d07b4b36fabc2c23c72b5c2027aeb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"80fbc69bc9cdcf443b1fead1351456b3d8faf784","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self._websocket.send_frame(six.int2byte(1))"},{"line_number":91,"context_line":"        # The server should send 4 bytes of 0\u0027s if security handshake succeeded"},{"line_number":92,"context_line":"        data \u003d self._websocket.receive_frame()"},{"line_number":93,"context_line":"        self.assertFalse("},{"line_number":94,"context_line":"            len(data) !\u003d 4 or [ord(i) for i in data] !\u003d [0, 0, 0, 0],"},{"line_number":95,"context_line":"            \u0027Server did not think security was successful.\u0027)"},{"line_number":96,"context_line":"        # Say to leave the desktop as shared as part of client initialization"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_4b2125b4","line":93,"updated":"2016-11-21 10:01:45.000000000","message":"same","commit_id":"3fa8baea319d07b4b36fabc2c23c72b5c2027aeb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"80fbc69bc9cdcf443b1fead1351456b3d8faf784","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        url \u003d body[\u0027url\u0027].replace(\u0027token\u003d\u0027, \u0027token\u003dbad\u0027)"},{"line_number":158,"context_line":"        self._websocket \u003d self._create_websocket(url)"},{"line_number":159,"context_line":"        # Make sure the novncproxy rejected the connection and closed it"},{"line_number":160,"context_line":"        self.assertTrue(len(self._websocket.response))"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"class _WebSocket(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_0b164d55","line":160,"updated":"2016-11-21 10:01:45.000000000","message":"use assertGreater(0, len(...))","commit_id":"3fa8baea319d07b4b36fabc2c23c72b5c2027aeb"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33cc186bd0725ac308df7f31967bee289d2be566","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":"import struct"},{"line_number":19,"context_line":"import testtools"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_29523014","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":14},"updated":"2016-12-30 09:16:53.000000000","message":"This is not used","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"33cc186bd0725ac308df7f31967bee289d2be566","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":"import struct"},{"line_number":19,"context_line":"import testtools"},{"line_number":20,"context_line":"import urllib3"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_c93444e0","line":19,"range":{"start_line":19,"start_character":7,"end_line":19,"end_character":16},"updated":"2016-12-30 09:16:53.000000000","message":"testtools should also be grouped with six","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d25a321a30552f4c62d3a8e01c3866983ef416c1","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import socket"},{"line_number":18,"context_line":"import struct"},{"line_number":19,"context_line":"import testtools"},{"line_number":20,"context_line":"import urllib3"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import six"},{"line_number":23,"context_line":"from six.moves.urllib import parse as urlparse"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_b75da44a","line":20,"updated":"2016-12-19 11:43:01.000000000","message":"urllib3 is not in stdlib. This import should be grouped with \u0027six\u0027.","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7bebff2691475999528ce1ac7710c84781617c0b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        return _WebSocket(client_socket, url)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @test.idempotent_id(\u0027c640fdff-8ab4-45a4-a5d8-7e6146cbd0dc\u0027)"},{"line_number":138,"context_line":"    @testtools.skipUnless(CONF.compute_feature_enabled.vnc_console,"},{"line_number":139,"context_line":"                          \u0027VNC Console feature is disabled.\u0027)"},{"line_number":140,"context_line":"    def test_novnc(self):"},{"line_number":141,"context_line":"        body \u003d self.client.get_vnc_console(self.server[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_f533ab60","line":138,"range":{"start_line":138,"start_character":26,"end_line":138,"end_character":66},"updated":"2016-12-18 22:33:58.000000000","message":"Since all tests in this class depend on this feature, you may as well use \"skip_checks\" and skip the entire class.","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ba41cc4d263d37d1aec0a45e4495c4d09b47085b","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        url \u003d body[\u0027url\u0027].replace(\u0027token\u003d\u0027, \u0027token\u003dbad\u0027)"},{"line_number":162,"context_line":"        self._websocket \u003d self._create_websocket(url)"},{"line_number":163,"context_line":"        # Make sure the novncproxy rejected the connection and closed it"},{"line_number":164,"context_line":"        self.assertGreater(len(self._websocket.response), 0)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class _WebSocket(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_5569bf24","line":164,"updated":"2016-12-18 22:47:28.000000000","message":"This assertion is not obvious to me. I guess the create web socket will return some data only in case of a bad token? Could you add a not, provide an assertion message?","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d25a321a30552f4c62d3a8e01c3866983ef416c1","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        url \u003d body[\u0027url\u0027].replace(\u0027token\u003d\u0027, \u0027token\u003dbad\u0027)"},{"line_number":162,"context_line":"        self._websocket \u003d self._create_websocket(url)"},{"line_number":163,"context_line":"        # Make sure the novncproxy rejected the connection and closed it"},{"line_number":164,"context_line":"        self.assertGreater(len(self._websocket.response), 0)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class _WebSocket(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_5a2ab57f","line":164,"in_reply_to":"1a6eadb0_5569bf24","updated":"2016-12-19 11:43:01.000000000","message":"+1. Can\u0027t you assert \u0027more\u0027 than just \u0027hey we received some bytes\u0027 ?","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ba41cc4d263d37d1aec0a45e4495c4d09b47085b","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.assertGreater(len(self._websocket.response), 0)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class _WebSocket(object):"},{"line_number":168,"context_line":"    def __init__(self, client_socket, url):"},{"line_number":169,"context_line":"        \"\"\"Contructor for the WebSocket wrapper to the socket.\"\"\""},{"line_number":170,"context_line":"        self._socket \u003d client_socket"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_f581ebc4","line":167,"updated":"2016-12-18 22:47:28.000000000","message":"I like that you\u0027re not adding any extra dependency here. \nIn case this copy it taken from some other library, could you mention the source? If not it\u0027s fine as is.","commit_id":"53483e3bd60a9a16524d0559d85e6405d19ba329"}]}
