)]}'
{"octavia/amphorae/backends/agent/api_server/certificate_update.py":[{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"88c0330507842840d594e6ed22c915ff127ac7c4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"def upload_server_cert():"},{"line_number":29,"context_line":"    stream \u003d flask.request.stream"},{"line_number":30,"context_line":"    file_path \u003d CONF.amphora_agent.agent_server_cert"},{"line_number":31,"context_line":"    with os.fdopen(os.open(file_path, MODE_OWNER), \u0027w\u0027) as crt_file:"},{"line_number":32,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":33,"context_line":"        while b:"},{"line_number":34,"context_line":"            crt_file.write(b)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_84db667b","line":31,"range":{"start_line":31,"start_character":19,"end_line":31,"end_character":49},"updated":"2016-03-04 10:09:00.000000000","message":"Doesn\u0027t \"os.open\" take positional arguments ? In this case, opening mode (or flags) must be defined ?","commit_id":"5c74cda02de8ef0e468643d58350981284433870"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"fb4c2dc3b5975bfb70212240a89e1901e37ad20a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"def upload_server_cert():"},{"line_number":29,"context_line":"    stream \u003d flask.request.stream"},{"line_number":30,"context_line":"    file_path \u003d CONF.amphora_agent.agent_server_cert"},{"line_number":31,"context_line":"    with os.fdopen(os.open(file_path, MODE_OWNER), \u0027w\u0027) as crt_file:"},{"line_number":32,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":33,"context_line":"        while b:"},{"line_number":34,"context_line":"            crt_file.write(b)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_017bac7c","line":31,"range":{"start_line":31,"start_character":19,"end_line":31,"end_character":49},"in_reply_to":"7af24918_84db667b","updated":"2016-03-04 17:25:14.000000000","message":"Thanks for input, but since this patch is under testing, there might be a lot of things need to change, please come back after i remove the \"WIP\" from the commit msg. will consider for your suggestions for the code change.","commit_id":"5c74cda02de8ef0e468643d58350981284433870"}],"octavia/amphorae/backends/agent/api_server/keepalived.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    conf_file \u003d util.keepalived_cfg_path()"},{"line_number":45,"context_line":"    flags \u003d os.O_WRONLY | os.O_CREAT"},{"line_number":46,"context_line":"    with os.fdopen(os.open(conf_file, flags, 0o644), \u0027w\u0027) as f:"},{"line_number":47,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":48,"context_line":"        while b:"},{"line_number":49,"context_line":"            f.write(b)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_f6cffd7c","line":46,"range":{"start_line":46,"start_character":45,"end_line":46,"end_character":50},"updated":"2016-03-16 23:31:31.000000000","message":"do we have a constant for that in os?","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    file_path \u003d util.keepalived_init_path()"},{"line_number":53,"context_line":"    if not os.path.exists(file_path):"},{"line_number":54,"context_line":"        with os.fdopen(os.open(file_path, flags, 0o755), \u0027w\u0027) as text_file:"},{"line_number":55,"context_line":"            text \u003d template.render("},{"line_number":56,"context_line":"                keepalived_pid\u003dutil.keepalived_pid_path(),"},{"line_number":57,"context_line":"                keepalived_cmd\u003dconsts.KEEPALIVED_CMD,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_16c5495a","line":54,"range":{"start_line":54,"start_character":50,"end_line":54,"end_character":51},"updated":"2016-03-16 23:31:31.000000000","message":"do we have a constant for that?","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Renders the Keepalived check script"},{"line_number":64,"context_line":"        keepalived_path \u003d util.keepalived_check_script_path()"},{"line_number":65,"context_line":"        open_obj \u003d os.open(keepalived_path, flags, 0o755)"},{"line_number":66,"context_line":"        with os.fdopen(open_obj, \u0027w\u0027) as text_file:"},{"line_number":67,"context_line":"            text \u003d check_script_template.render("},{"line_number":68,"context_line":"                check_scripts_dir\u003dutil.keepalived_check_scripts_dir()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_b6ac55a1","line":65,"range":{"start_line":65,"start_character":51,"end_line":65,"end_character":56},"updated":"2016-03-16 23:31:31.000000000","message":"ditto","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"}],"octavia/amphorae/backends/agent/api_server/listener.py":[{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"88c0330507842840d594e6ed22c915ff127ac7c4","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    use_upstart \u003d util.CONF.haproxy_amphora.use_upstart"},{"line_number":124,"context_line":"    file_path \u003d util.init_path(listener_id)"},{"line_number":125,"context_line":"    if not os.path.exists(util.init_path(listener_id)):"},{"line_number":126,"context_line":"        with os.fdopen(os.open(file_path, 0o755), \u0027w\u0027) as text_file:"},{"line_number":127,"context_line":"            template \u003d UPSTART_TEMPLATE if use_upstart else SYSVINIT_TEMPLATE"},{"line_number":128,"context_line":"            text \u003d template.render("}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_0418f6d1","line":125,"range":{"start_line":125,"start_character":26,"end_line":125,"end_character":53},"updated":"2016-03-04 10:09:00.000000000","message":"You can use \"file_path\" here.","commit_id":"5c74cda02de8ef0e468643d58350981284433870"},{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"88c0330507842840d594e6ed22c915ff127ac7c4","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    use_upstart \u003d util.CONF.haproxy_amphora.use_upstart"},{"line_number":124,"context_line":"    file_path \u003d util.init_path(listener_id)"},{"line_number":125,"context_line":"    if not os.path.exists(util.init_path(listener_id)):"},{"line_number":126,"context_line":"        with os.fdopen(os.open(file_path, 0o755), \u0027w\u0027) as text_file:"},{"line_number":127,"context_line":"            template \u003d UPSTART_TEMPLATE if use_upstart else SYSVINIT_TEMPLATE"},{"line_number":128,"context_line":"            text \u003d template.render("},{"line_number":129,"context_line":"                peer_name\u003dpeer_name,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_a4a662ab","line":126,"range":{"start_line":126,"start_character":13,"end_line":126,"end_character":54},"updated":"2016-03-04 10:09:00.000000000","message":"Same comment as before.. Otherwise, file updates might invoke the default flag and trigger \"File Exists\" error.","commit_id":"5c74cda02de8ef0e468643d58350981284433870"},{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"88c0330507842840d594e6ed22c915ff127ac7c4","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            text_file.write(text)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    if not use_upstart:"},{"line_number":139,"context_line":"        file \u003d file_path"},{"line_number":140,"context_line":"        insrvcmd \u003d (\"insserv {file}\".format(file\u003dfile))"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_049bd618","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":24},"updated":"2016-03-04 10:09:00.000000000","message":"Another assignment is redundant. You could change the L124 var name to \"file\" or change the below \"file\" occurrences to \"file_path\"","commit_id":"5c74cda02de8ef0e468643d58350981284433870"},{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"88c0330507842840d594e6ed22c915ff127ac7c4","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    stream \u003d Wrapped(flask.request.stream)"},{"line_number":302,"context_line":"    file_path \u003d _cert_file_path(listener_id, filename)"},{"line_number":303,"context_line":"    with os.fdopen(os.open(file_path, 0o600), \u0027w\u0027) as crt_file:"},{"line_number":304,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":305,"context_line":"        while (b):"},{"line_number":306,"context_line":"            crt_file.write(b)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_c48d6ed4","line":303,"range":{"start_line":303,"start_character":19,"end_line":303,"end_character":44},"updated":"2016-03-04 10:09:00.000000000","message":"Same as before.","commit_id":"5c74cda02de8ef0e468643d58350981284433870"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    name \u003d os.path.join(util.haproxy_dir(listener_id), \u0027haproxy.cfg.new\u0027)"},{"line_number":101,"context_line":"    flags \u003d os.O_WRONLY | os.O_CREAT"},{"line_number":102,"context_line":"    with os.fdopen(os.open(name, flags, 0o600), \u0027w\u0027) as file:"},{"line_number":103,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":104,"context_line":"        while b:"},{"line_number":105,"context_line":"            file.write(b)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_568cf134","line":102,"range":{"start_line":102,"start_character":40,"end_line":102,"end_character":45},"updated":"2016-03-16 23:31:31.000000000","message":"constant?","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    use_upstart \u003d util.CONF.haproxy_amphora.use_upstart"},{"line_number":125,"context_line":"    file_path \u003d util.init_path(listener_id)"},{"line_number":126,"context_line":"    if not os.path.exists(file_path):"},{"line_number":127,"context_line":"        with os.fdopen(os.open(file_path, flags, 0o755), \u0027w\u0027) as text_file:"},{"line_number":128,"context_line":"            template \u003d UPSTART_TEMPLATE if use_upstart else SYSVINIT_TEMPLATE"},{"line_number":129,"context_line":"            text \u003d template.render("},{"line_number":130,"context_line":"                peer_name\u003dpeer_name,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_f67d3d1d","line":127,"range":{"start_line":127,"start_character":49,"end_line":127,"end_character":54},"updated":"2016-03-16 23:31:31.000000000","message":"constant","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    stream \u003d Wrapped(flask.request.stream)"},{"line_number":314,"context_line":"    file_path \u003d _cert_file_path(listener_id, filename)"},{"line_number":315,"context_line":"    flags \u003d os.O_WRONLY | os.O_CREAT"},{"line_number":316,"context_line":"    with os.fdopen(os.open(file_path, flags, 0o600), \u0027w\u0027) as crt_file:"},{"line_number":317,"context_line":"        b \u003d stream.read(BUFFER)"},{"line_number":318,"context_line":"        while (b):"},{"line_number":319,"context_line":"            crt_file.write(b)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_1673894e","line":316,"range":{"start_line":316,"start_character":45,"end_line":316,"end_character":50},"updated":"2016-03-16 23:31:31.000000000","message":"constant","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"}],"octavia/common/jinja/haproxy/templates/base.j2":[{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"de8c1fb84682a85e110f3e130c8f0e08b7ac29c1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    group {{ usergroup }}"},{"line_number":21,"context_line":"    log {{ log_http | default(\u0027/dev/log\u0027, true)}} local0"},{"line_number":22,"context_line":"    log {{ log_server | default(\u0027/dev/log\u0027, true)}} local1 notice"},{"line_number":23,"context_line":"    stats socket {{ sock_path }} mode 0644 level user"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"defaults"},{"line_number":26,"context_line":"    log global"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"ba0121b8_bff129d0","line":23,"range":{"start_line":23,"start_character":38,"end_line":23,"end_character":42},"updated":"2016-03-29 01:58:28.000000000","message":"Any reason to make this 644 instead of 600  ?\n\nI understand \"level user\" prevents reading any sensitive information, however as you have made the haproxy.cfg owner read only, shouldn\u0027t the reading of the stats be restricted to owner read-only as well ? \n\nThis would make sure the stats are read only through amphora-agent, isn\u0027t it?","commit_id":"c4dda82a6571c24fa75a3e189112a520c889f228"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8ced1ad4a26dd51e7edd6d95a401c9803ceeeddf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    group {{ usergroup }}"},{"line_number":21,"context_line":"    log {{ log_http | default(\u0027/dev/log\u0027, true)}} local0"},{"line_number":22,"context_line":"    log {{ log_server | default(\u0027/dev/log\u0027, true)}} local1 notice"},{"line_number":23,"context_line":"    stats socket {{ sock_path }} mode 0644 level user"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"defaults"},{"line_number":26,"context_line":"    log global"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"ba0121b8_f8ea5fab","line":23,"range":{"start_line":23,"start_character":38,"end_line":23,"end_character":42},"in_reply_to":"ba0121b8_bff129d0","updated":"2016-03-30 00:18:30.000000000","message":"The reason I asked for 644 here is when we move the amphora-agent to a specific user it will still need to be able to read the stats from this socket.  With 600 only root would be able to read it.  It also needs to be readable for the keepalived health checks to be able to monitor haproxy.","commit_id":"c4dda82a6571c24fa75a3e189112a520c889f228"},{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"e81918b72dc635f52b0023d5903f2af84a207567","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    group {{ usergroup }}"},{"line_number":21,"context_line":"    log {{ log_http | default(\u0027/dev/log\u0027, true)}} local0"},{"line_number":22,"context_line":"    log {{ log_server | default(\u0027/dev/log\u0027, true)}} local1 notice"},{"line_number":23,"context_line":"    stats socket {{ sock_path }} mode 0644 level user"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"defaults"},{"line_number":26,"context_line":"    log global"}],"source_content_type":"text/x-jinja2","patch_set":34,"id":"ba0121b8_db8f9521","line":23,"range":{"start_line":23,"start_character":38,"end_line":23,"end_character":42},"in_reply_to":"ba0121b8_f8ea5fab","updated":"2016-03-30 00:49:54.000000000","message":"Agh got it. I didn\u0027t know we have plans to move agent to a different user.\n\nIf that is the case, this should be \"666\" or \"660\" instead of \"644\" because Unix sockets need Read/Write permissions to accept a connection. Read Only might work only on BSD based machines (from what I read from Unix docs..)","commit_id":"c4dda82a6571c24fa75a3e189112a520c889f228"}],"octavia/controller/worker/tasks/compute_tasks.py":[{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"96f1bdf2ba2c34cb2fb1f6a81361b15eb22dfef6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":126,"context_line":"            ca \u003d client_ca.read()"},{"line_number":127,"context_line":"        config_drive_files \u003d {"},{"line_number":128,"context_line":"            \u0027/etc/octavia/certs/server.pem\u0027: server_pem,"},{"line_number":129,"context_line":"            \u0027/etc/octavia/certs/client_ca.pem\u0027: ca}"},{"line_number":130,"context_line":"        return super(CertComputeCreate, self).execute("},{"line_number":131,"context_line":"            amphora_id, ports\u003dports, config_drive_files\u003dconfig_drive_files,"},{"line_number":132,"context_line":"            server_group_id\u003dserver_group_id)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba0121b8_322196b5","line":129,"range":{"start_line":128,"start_character":12,"end_line":129,"end_character":43},"updated":"2016-03-29 23:31:46.000000000","message":"I know it\u0027s not your change, but if we can get these from const file, that will be good I guess.","commit_id":"6b77f08d5d065edbfbaf9ae974ae5a9bffe432c6"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"e2c83f77608202a0991c963f6041f33af2a4d524","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":126,"context_line":"            ca \u003d client_ca.read()"},{"line_number":127,"context_line":"        config_drive_files \u003d {"},{"line_number":128,"context_line":"            \u0027/etc/octavia/certs/server.pem\u0027: server_pem,"},{"line_number":129,"context_line":"            \u0027/etc/octavia/certs/client_ca.pem\u0027: ca}"},{"line_number":130,"context_line":"        return super(CertComputeCreate, self).execute("},{"line_number":131,"context_line":"            amphora_id, ports\u003dports, config_drive_files\u003dconfig_drive_files,"},{"line_number":132,"context_line":"            server_group_id\u003dserver_group_id)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba0121b8_cb46794e","line":129,"range":{"start_line":128,"start_character":12,"end_line":129,"end_character":43},"in_reply_to":"ba0121b8_322196b5","updated":"2016-03-30 15:15:02.000000000","message":"Hi Banashankar, your point is a good suggestion, but in this patch we just want our change all focused on the launchpad ticket, but you can open a new ticket in lanchpad, and we can make changes there.","commit_id":"6b77f08d5d065edbfbaf9ae974ae5a9bffe432c6"}],"octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py":[{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"7dafb869c6decd6d7cd225fd0b335924c591d8cd","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    def test_upload_server_certificate(self):"},{"line_number":468,"context_line":"        certificate_update.BUFFER \u003d 5  # test the while loop"},{"line_number":469,"context_line":"        m \u003d mock.mock_open()"},{"line_number":470,"context_line":"        with mock.patch.object(os, \u0027fdopen\u0027, m):"},{"line_number":471,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"},{"line_number":472,"context_line":"                              \u0027/certificate\u0027,"},{"line_number":473,"context_line":"                              data\u003d\u0027TestTest\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afc51ec_559cce5c","line":470,"range":{"start_line":470,"start_character":12,"end_line":470,"end_character":13},"updated":"2016-03-15 07:14:17.000000000","message":"Should mock the os.open method as well. \n\nmock.patch(\u0027os.open\u0027), mock.patch.object(os, \u0027fdopen\u0027, m):","commit_id":"fe62663262eafac0fdd0d7201d7fc30b4b07674b"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                              data\u003d\u0027test\u0027)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"            self.assertEqual(202, rv.status_code)"},{"line_number":105,"context_line":"            mock_open.assert_called_with(init_path, flags, 0o755)"},{"line_number":106,"context_line":"            mock_fdopen.assert_called_with(123, \u0027w\u0027)"},{"line_number":107,"context_line":"            handle \u003d mock_fdopen()"},{"line_number":108,"context_line":"            handle.write.assert_any_call(six.b(\u0027test\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_5664f147","line":105,"range":{"start_line":105,"start_character":59,"end_line":105,"end_character":64},"updated":"2016-03-16 23:31:31.000000000","message":"consider constants","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"7681246a8432296d2cec69621c590613c8c04a07","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            self.assertEqual("},{"line_number":124,"context_line":"                {\u0027message\u0027: \u0027Invalid request\u0027, u\u0027details\u0027: u\u0027random error\u0027},"},{"line_number":125,"context_line":"                json.loads(rv.data.decode(\u0027utf-8\u0027)))"},{"line_number":126,"context_line":"            mock_open.assert_called_with(file_name, flags, 0o600)"},{"line_number":127,"context_line":"            mock_fdopen.assert_called_with(123, \u0027w\u0027)"},{"line_number":128,"context_line":"            handle \u003d mock_fdopen()"},{"line_number":129,"context_line":"            handle.write.assert_called_with(six.b(\u0027test\u0027))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1af94dfe_b65bb586","line":126,"range":{"start_line":126,"start_character":59,"end_line":126,"end_character":64},"updated":"2016-03-16 23:31:31.000000000","message":"same","commit_id":"78077dcbbe26531697afa60d61c6df3908093f0f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"96356c2af01129a1db5db4d148ae5d616496f5d9","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        m \u003d mock.mock_open()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # happy case upstart file exists"},{"line_number":58,"context_line":"        with mock.patch(\u0027os.open\u0027) as mock_open, mock.patch.object("},{"line_number":59,"context_line":"                os, \u0027fdopen\u0027, m) as mock_fdopen:"},{"line_number":60,"context_line":"            mock_open.return_value \u003d 123"},{"line_number":61,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a18252c_ab7cabb5","line":58,"updated":"2016-04-14 18:05:21.000000000","message":"Didn\u0027t you JUST fix other instances of mocking os.open in the patch above this? Shouldn\u0027t this use the OpenFixtures method?","commit_id":"bd049810219c89e7c57ea055a2b10441afef8009"},{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"18bfb0bb8f48863b743257a651d81fea8eb49f4f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        m \u003d mock.mock_open()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # happy case upstart file exists"},{"line_number":58,"context_line":"        with mock.patch(\u0027os.open\u0027) as mock_open, mock.patch.object("},{"line_number":59,"context_line":"                os, \u0027fdopen\u0027, m) as mock_fdopen:"},{"line_number":60,"context_line":"            mock_open.return_value \u003d 123"},{"line_number":61,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a18252c_069dd6bb","line":58,"in_reply_to":"5a18252c_ab7cabb5","updated":"2016-04-14 18:07:45.000000000","message":"the other one is using mock.open, this is using os.open, they are different, right? Also I tried to use the openfixtures here instead of os.open, it did not work.","commit_id":"bd049810219c89e7c57ea055a2b10441afef8009"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"96356c2af01129a1db5db4d148ae5d616496f5d9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        m \u003d mock.mock_open()"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # happy case upstart file exists"},{"line_number":95,"context_line":"        with mock.patch(\u0027os.open\u0027) as mock_open, mock.patch.object("},{"line_number":96,"context_line":"                os, \u0027fdopen\u0027, m) as mock_fdopen:"},{"line_number":97,"context_line":"            mock_open.return_value \u003d 123"},{"line_number":98,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a18252c_0b1aff7c","line":95,"updated":"2016-04-14 18:05:21.000000000","message":"Same","commit_id":"bd049810219c89e7c57ea055a2b10441afef8009"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"96356c2af01129a1db5db4d148ae5d616496f5d9","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        mock_exists.return_value \u003d True"},{"line_number":114,"context_line":"        mock_subprocess.side_effect \u003d [subprocess.CalledProcessError("},{"line_number":115,"context_line":"            7, \u0027test\u0027, RANDOM_ERROR)]"},{"line_number":116,"context_line":"        with mock.patch(\u0027os.open\u0027) as mock_open, mock.patch.object("},{"line_number":117,"context_line":"                os, \u0027fdopen\u0027, m) as mock_fdopen:"},{"line_number":118,"context_line":"            mock_open.return_value \u003d 123"},{"line_number":119,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a18252c_4b107759","line":116,"updated":"2016-04-14 18:05:21.000000000","message":"Same","commit_id":"bd049810219c89e7c57ea055a2b10441afef8009"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"96356c2af01129a1db5db4d148ae5d616496f5d9","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        mock_exists.return_value \u003d True"},{"line_number":446,"context_line":"        m \u003d mock.mock_open()"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        with mock.patch(\u0027os.open\u0027), mock.patch.object(os, \u0027fdopen\u0027, m):"},{"line_number":449,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"},{"line_number":450,"context_line":"                              \u0027/listeners/123/certificates/test.pem\u0027,"},{"line_number":451,"context_line":"                              data\u003d\u0027TestTest\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a18252c_e62c1a9b","line":448,"updated":"2016-04-14 18:05:21.000000000","message":"Same... And a few below, going to stop trying to mark them all.","commit_id":"bd049810219c89e7c57ea055a2b10441afef8009"}],"octavia/tests/functional/amphorae/backend/agent/api_server/test_server_sysvinit.py":[{"author":{"_account_id":15226,"name":"Bharath M","email":"bharath.stacker@gmail.com","username":"bharath"},"change_message_id":"7dafb869c6decd6d7cd225fd0b335924c591d8cd","unresolved":false,"context_lines":[{"line_number":463,"context_line":"    def test_upload_server_certificate(self):"},{"line_number":464,"context_line":"        certificate_update.BUFFER \u003d 5  # test the while loop"},{"line_number":465,"context_line":"        m \u003d mock.mock_open()"},{"line_number":466,"context_line":"        with mock.patch.object(os, \u0027fdopen\u0027, m):"},{"line_number":467,"context_line":"            rv \u003d self.app.put(\u0027/\u0027 + api_server.VERSION +"},{"line_number":468,"context_line":"                              \u0027/certificate\u0027,"},{"line_number":469,"context_line":"                              data\u003d\u0027TestTest\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3afc51ec_75ae2a82","line":466,"range":{"start_line":466,"start_character":13,"end_line":466,"end_character":47},"updated":"2016-03-15 07:14:17.000000000","message":"Should mock the os.open method as well. \n\nmock.patch(\u0027os.open\u0027), mock.patch.object(os, \u0027fdopen\u0027, m):","commit_id":"fe62663262eafac0fdd0d7201d7fc30b4b07674b"}]}
