)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b524720d326e36e0158a2ce812137b41d26c16ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"b9ed4bf3_b394fede","updated":"2024-02-21 14:58:14.000000000","message":"Patch in merge conflict and CI also failing.\n\nThis review is \u003e 3 years without comment, and failed CI job the last time it was checked. We are abandoning this for now. Feel free to reactivate the review by pressing the restore button and leaving a \u0027recheck\u0027 comment to get fresh test results.","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"}],"openstack_dashboard/test/integration_tests/helpers.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        width, height \u003d SCREEN_SIZE"},{"line_number":121,"context_line":"        display \u003d \u00270.0\u0027"},{"line_number":122,"context_line":"        # Start a virtual display server for running the tests headless."},{"line_number":123,"context_line":"        if IS_SELENIUM_HEADLESS:"},{"line_number":124,"context_line":"            width, height \u003d 1920, 1080"},{"line_number":125,"context_line":"            self.vdisplay \u003d xvfbwrapper.Xvfb(width\u003dwidth, height\u003dheight)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b25775f5","side":"PARENT","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":72},"updated":"2020-01-27 08:44:34.000000000","message":"I think this comment is still valid.","commit_id":"5129d958fd7f2120d53452baafd9f83b4001735e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":46,"context_line":"ROOT_PATH \u003d os.path.dirname(os.path.abspath(config.__file__))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"DISPLAY \u003d os.environ.get(\u0027DISPLAY\u0027, \u0027:0.0\u0027)"},{"line_number":49,"context_line":"IS_SELENIUM_HEADLESS \u003d int(os.environ.get(\u0027SELENIUM_HEADLESS\u0027, 1))"},{"line_number":50,"context_line":"SCREEN_SIZE \u003d (None, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d266b1ee","line":49,"range":{"start_line":49,"start_character":23,"end_line":49,"end_character":26},"updated":"2020-01-27 08:44:34.000000000","message":"How about using oslo_utils.bool_from_string? It provides more convenient way.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"ROOT_PATH \u003d os.path.dirname(os.path.abspath(config.__file__))"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"DISPLAY \u003d os.environ.get(\u0027DISPLAY\u0027, \u0027:0.0\u0027)"},{"line_number":49,"context_line":"IS_SELENIUM_HEADLESS \u003d int(os.environ.get(\u0027SELENIUM_HEADLESS\u0027, 1))"},{"line_number":50,"context_line":"SCREEN_SIZE \u003d (None, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_06b87a0f","line":49,"range":{"start_line":49,"start_character":23,"end_line":49,"end_character":26},"in_reply_to":"3fa7e38b_d266b1ee","updated":"2020-01-28 13:06:34.000000000","message":"Fixed in patch 3.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SCREEN_SIZE \u003d (None, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"if subprocess.getstatusoutput(\u0027which xdpyinfo\u0027)[0] \u003d\u003d 0:"},{"line_number":54,"context_line":"    rc, out \u003d subprocess.getstatusoutput(\u0027xdpyinfo | grep dimensions\u0027)"},{"line_number":55,"context_line":"    if rc !\u003d 0:"},{"line_number":56,"context_line":"        LOG.error(f\"Can\u0027t run \u0027xdpyinfo\u0027. {out}\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b229b583","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":29},"updated":"2020-01-27 08:44:34.000000000","message":"getstatusoutput is one of legacy functions in subprocess. It is better to use the standard subprocess interface like run() or call(). It provides more detail information and raise an exception if error.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"SCREEN_SIZE \u003d (None, None)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"if subprocess.getstatusoutput(\u0027which xdpyinfo\u0027)[0] \u003d\u003d 0:"},{"line_number":54,"context_line":"    rc, out \u003d subprocess.getstatusoutput(\u0027xdpyinfo | grep dimensions\u0027)"},{"line_number":55,"context_line":"    if rc !\u003d 0:"},{"line_number":56,"context_line":"        LOG.error(f\"Can\u0027t run \u0027xdpyinfo\u0027. {out}\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_06fb9abe","line":53,"range":{"start_line":53,"start_character":14,"end_line":53,"end_character":29},"in_reply_to":"3fa7e38b_b229b583","updated":"2020-01-28 13:06:34.000000000","message":"Fixed in patch 3.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    else:"},{"line_number":58,"context_line":"        SCREEN_SIZE \u003d out.split()[1].split(\u0027x\u0027)"},{"line_number":59,"context_line":"else:"},{"line_number":60,"context_line":"    LOG.error(f\"xorg (X11) isn\u0027t installed, or DISPLAY\u003d{DISPLAY} \""},{"line_number":61,"context_line":"              \"is not correct. Otherwise use xvfb to run tests.\")"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def gen_random_resource_name(resource\u003d\"\", timestamp\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_7276dda5","line":61,"range":{"start_line":60,"start_character":15,"end_line":61,"end_character":64},"updated":"2020-01-27 08:44:34.000000000","message":"I am not sure how the error message should be interpreted.\n\nCan we run the integration tests even if this message is emitted? \"Otherwise\" usually means that the previous sentence (or condition) is not satisfied.\n\nIf you would like to mention that xvfb needs to be installed, \"Otherwise\" would be unnecessary.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    else:"},{"line_number":58,"context_line":"        SCREEN_SIZE \u003d out.split()[1].split(\u0027x\u0027)"},{"line_number":59,"context_line":"else:"},{"line_number":60,"context_line":"    LOG.error(f\"xorg (X11) isn\u0027t installed, or DISPLAY\u003d{DISPLAY} \""},{"line_number":61,"context_line":"              \"is not correct. Otherwise use xvfb to run tests.\")"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"def gen_random_resource_name(resource\u003d\"\", timestamp\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_06707a40","line":61,"range":{"start_line":60,"start_character":15,"end_line":61,"end_character":64},"in_reply_to":"3fa7e38b_7276dda5","updated":"2020-01-28 13:06:34.000000000","message":"There are several problems in xdpyinfo:\n1) To run in GUI Display must be correct, for example, running firefox inside docker with GUI (e.g. Zelenium), the display is :99.0.\n\n2) xorg (the minimum package requirement from X11) must be installed.\n\n3) xvfb is relevant only for SELENIUM_HEADLESS (non GUI mode).\n\nI fixed message in patch 3.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.addCleanup(cleanup)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        width, height \u003d SCREEN_SIZE"},{"line_number":124,"context_line":"        display \u003d DISPLAY"},{"line_number":125,"context_line":"        if IS_SELENIUM_HEADLESS:"},{"line_number":126,"context_line":"            width, height \u003d 1920, 1080"},{"line_number":127,"context_line":"            self.vdisplay \u003d xvfbwrapper.Xvfb(width\u003dwidth, height\u003dheight)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_72e9fd16","line":124,"updated":"2020-01-27 08:44:34.000000000","message":"question: When we use the headless mode, should DISPLAY be 0.0? Or does it work even if DISPLAY is not 0.0?\n\nIf you add DISPLAY to [testenv:integartion] passenv per my comment in tox.ini, the above question would be considered.\n\nIf required, we can set \"display\" to \"0.0\" if IS_SELENIUM_HEADLESS is true.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.addCleanup(cleanup)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        width, height \u003d SCREEN_SIZE"},{"line_number":124,"context_line":"        display \u003d DISPLAY"},{"line_number":125,"context_line":"        if IS_SELENIUM_HEADLESS:"},{"line_number":126,"context_line":"            width, height \u003d 1920, 1080"},{"line_number":127,"context_line":"            self.vdisplay \u003d xvfbwrapper.Xvfb(width\u003dwidth, height\u003dheight)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_26ced657","line":124,"in_reply_to":"3fa7e38b_72e9fd16","updated":"2020-01-28 13:06:34.000000000","message":"When using SELENIUM_HEADLESS\u003d1 (in tox), the DISPLAY value does not matter. \nWhen using SELENIUM_HEADLESS\u003d0 (in tox), the DISPLAY value must refer to the current DISPLAY. Usually it is \":0.0\" (default for local execution), but on remote hosts with X11 it can be different display (e.g. inside my docker it is :99.0).","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"}],"openstack_dashboard/test/integration_tests/video_recorder.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AVCONV_INSTALLED \u003d int(os.environ.get(\u0027AVCONV_INSTALLED\u0027, 0))"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VideoRecorder(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_12ec4926","line":23,"range":{"start_line":23,"start_character":19,"end_line":23,"end_character":22},"updated":"2020-01-27 08:44:34.000000000","message":"oslo_utils.bool_from_string might be better.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AVCONV_INSTALLED \u003d int(os.environ.get(\u0027AVCONV_INSTALLED\u0027, 0))"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class VideoRecorder(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_26e7b6d9","line":23,"range":{"start_line":23,"start_character":19,"end_line":23,"end_character":22},"in_reply_to":"3fa7e38b_12ec4926","updated":"2020-01-28 13:06:34.000000000","message":"Fixed in patch 3.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"}],"tools/gate/integration/post_test_hook.sh":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"fee174a5aab1af5f5e7e3b20e359dbac89313393","unresolved":false,"context_lines":[{"line_number":5,"context_line":"set -x"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Install avconv (ffmpeg) to capture video of failed tests"},{"line_number":8,"context_line":"sudo apt install -y ffmpeg"},{"line_number":9,"context_line":"( [[ -f /usr/bin/avconv ]] || sudo ln /usr/bin/ffmpeg /usr/bin/avconv ) \u0026\u0026 export AVCONV_INSTALLED\u003d1"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"sudo wget -q -O firefox.deb https://sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_46.0.1-0ubuntu1_amd64.deb/download"}],"source_content_type":"text/x-sh","patch_set":4,"id":"3fa7e38b_946765ed","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":26},"updated":"2020-02-19 12:43:59.000000000","message":"If we\u0027re switching to ffmpeg, let\u0027s drop avconv references and do not introduce such symlinks","commit_id":"c332dcce3508527b1a3a5becb007424a96820e1a"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"778016a07fcbde12446b81bd4aa98a68e839df83","unresolved":false,"context_lines":[{"line_number":5,"context_line":"set -x"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"# Install avconv (ffmpeg) to capture video of failed tests"},{"line_number":8,"context_line":"sudo apt install -y ffmpeg"},{"line_number":9,"context_line":"( [[ -f /usr/bin/avconv ]] || sudo ln /usr/bin/ffmpeg /usr/bin/avconv ) \u0026\u0026 export AVCONV_INSTALLED\u003d1"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"sudo wget -q -O firefox.deb https://sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_46.0.1-0ubuntu1_amd64.deb/download"}],"source_content_type":"text/x-sh","patch_set":4,"id":"1f493fa4_01b665fb","line":8,"range":{"start_line":8,"start_character":0,"end_line":8,"end_character":26},"in_reply_to":"3fa7e38b_946765ed","updated":"2020-04-22 12:32:40.000000000","message":"This has now been done by another patch, so I just rebased.","commit_id":"c332dcce3508527b1a3a5becb007424a96820e1a"}],"tox.ini":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  SELENIUM_HEADLESS\u003d1"},{"line_number":91,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"[testenv:integration-gui]"},{"line_number":94,"context_line":"envdir \u003d {toxworkdir}/venv"},{"line_number":95,"context_line":"# Run integration tests in GUI mode (not headless)"},{"line_number":96,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fa7e38b_529881ca","line":93,"updated":"2020-01-27 08:44:34.000000000","message":"The proposed tox env is very similar to the original tox env \"integration\". How about merging these two and switching the modes by an environment variable?","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":27821,"name":"Noam Manos","email":"nmanos@redhat.com","username":"nmanos"},"change_message_id":"bcece69cb13f5f850b5ca11ed2a27b962826888e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  SELENIUM_HEADLESS\u003d1"},{"line_number":91,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"[testenv:integration-gui]"},{"line_number":94,"context_line":"envdir \u003d {toxworkdir}/venv"},{"line_number":95,"context_line":"# Run integration tests in GUI mode (not headless)"},{"line_number":96,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fa7e38b_066f1a29","line":93,"in_reply_to":"3fa7e38b_529881ca","updated":"2020-01-28 13:06:34.000000000","message":"Both env values - SELENIUM_HEADLESS\u003d0, and current DISPLAY - should be passed to tox, in order to open selenium in GUI.\n\nSince it\u0027s not just a single env, and the whole behavior is different, as the integration tests will now run in GUI, not hidden in headless mode, it seems easier to have a dedicated tox stage.\n\nI would even think about adding into the GUI stage another step - to verify AVCONV_INSTALLED, and install (as in tools/gate/integration/post_test_hook.sh). But that\u0027s a different story.","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":94,"context_line":"envdir \u003d {toxworkdir}/venv"},{"line_number":95,"context_line":"# Run integration tests in GUI mode (not headless)"},{"line_number":96,"context_line":"passenv \u003d"},{"line_number":97,"context_line":"  DISPLAY"},{"line_number":98,"context_line":"  AVCONV_INSTALLED"},{"line_number":99,"context_line":"setenv \u003d"},{"line_number":100,"context_line":"  PYTHONHASHSEED\u003d0"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fa7e38b_928a7962","line":97,"range":{"start_line":97,"start_character":2,"end_line":97,"end_character":9},"updated":"2020-01-27 08:44:34.000000000","message":"I think you can add it to [testenv:integration].","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5919edbde129719230951528695198157830be23","unresolved":false,"context_lines":[{"line_number":99,"context_line":"setenv \u003d"},{"line_number":100,"context_line":"  PYTHONHASHSEED\u003d0"},{"line_number":101,"context_line":"  INTEGRATION_TESTS\u003d1"},{"line_number":102,"context_line":"  SELENIUM_HEADLESS\u003d0"},{"line_number":103,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"[testenv:npm]"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fa7e38b_b2853555","line":102,"range":{"start_line":102,"start_character":2,"end_line":102,"end_character":21},"updated":"2020-01-27 08:44:34.000000000","message":"[testenv:integration] can be changed to:\n\n  setenv \u003d\n    ...\n    SELENIUM_HEADLESS\u003d{env:SELENIUM_HEADLESS:1}\n\nby using variable substitution in tox.ini [1].\n\nIf you would like to use the GUI mode, you can do by:\n\n   SELENIUM_HEADLESS\u003d1 tox -e integration\n\nor\n\n   export SELENIUM_HEADLESS\u003d1\n   tox -e integration\n\n[1] https://tox.readthedocs.io/en/latest/config.html#environment-variable-substitutions-with-default-values","commit_id":"7d3b51f41db9f61537fbb0ff65271dfde301ddf5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"636691bcac3d332d4e3feb629789157e89258562","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  oslo-config-generator --namespace openstack_dashboard_integration_tests"},{"line_number":100,"context_line":"  pytest {toxinidir}/openstack_dashboard/test/integration_tests --ds\u003dopenstack_dashboard.test.settings -v --junitxml\u003d\"{toxinidir}/test_reports/integration_test_results.xml\" --html\u003d\"{toxinidir}/test_reports/integration_test_results.html\" --self-contained-html {posargs}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"[testenv:integration-gui]"},{"line_number":103,"context_line":"envdir \u003d {toxworkdir}/venv"},{"line_number":104,"context_line":"# Run integration tests in GUI mode (not headless)"},{"line_number":105,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":7,"id":"1f493fa4_56badabf","line":102,"range":{"start_line":102,"start_character":0,"end_line":102,"end_character":25},"updated":"2020-05-06 09:21:13.000000000","message":"I don\u0027t really think we need a one more tox env with the only change in a environment variable value","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a831231629148555b82e834f873d56695d2c4d5","unresolved":false,"context_lines":[{"line_number":99,"context_line":"  oslo-config-generator --namespace openstack_dashboard_integration_tests"},{"line_number":100,"context_line":"  pytest {toxinidir}/openstack_dashboard/test/integration_tests --ds\u003dopenstack_dashboard.test.settings -v --junitxml\u003d\"{toxinidir}/test_reports/integration_test_results.xml\" --html\u003d\"{toxinidir}/test_reports/integration_test_results.html\" --self-contained-html {posargs}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"[testenv:integration-gui]"},{"line_number":103,"context_line":"envdir \u003d {toxworkdir}/venv"},{"line_number":104,"context_line":"# Run integration tests in GUI mode (not headless)"},{"line_number":105,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":7,"id":"1f493fa4_9ce8fc16","line":102,"updated":"2020-05-06 14:50:10.000000000","message":"I have the same thought as Ivan and I commented this before.\nThe author would like to keep a separate tox env but I still cannot understand the background.","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"636691bcac3d332d4e3feb629789157e89258562","unresolved":false,"context_lines":[{"line_number":106,"context_line":"  DISPLAY"},{"line_number":107,"context_line":"  FFMPEG_INSTALLED"},{"line_number":108,"context_line":"setenv \u003d"},{"line_number":109,"context_line":"  PYTHONHASHSEED\u003d0"},{"line_number":110,"context_line":"  INTEGRATION_TESTS\u003d1"},{"line_number":111,"context_line":"  SELENIUM_HEADLESS\u003d0"},{"line_number":112,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"}],"source_content_type":"text/x-properties","patch_set":7,"id":"1f493fa4_d69c2a5d","line":109,"range":{"start_line":109,"start_character":0,"end_line":109,"end_character":18},"updated":"2020-05-06 09:21:13.000000000","message":"We shouldn\u0027t set it. If tests fail without this change, we need to fix a test or at least add a comment why we need PYTHONHASHSEED\u003d0","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"8a831231629148555b82e834f873d56695d2c4d5","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  PYTHONHASHSEED\u003d0"},{"line_number":110,"context_line":"  INTEGRATION_TESTS\u003d1"},{"line_number":111,"context_line":"  SELENIUM_HEADLESS\u003d0"},{"line_number":112,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"[testenv:npm]"},{"line_number":115,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":7,"id":"1f493fa4_7ceb7011","line":112,"updated":"2020-05-06 14:50:10.000000000","message":"I think it is just because the author proposed this patch before the pytest migration.","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"636691bcac3d332d4e3feb629789157e89258562","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  PYTHONHASHSEED\u003d0"},{"line_number":110,"context_line":"  INTEGRATION_TESTS\u003d1"},{"line_number":111,"context_line":"  SELENIUM_HEADLESS\u003d0"},{"line_number":112,"context_line":"commands \u003d {envpython} {toxinidir}/manage.py test openstack_dashboard --settings\u003dopenstack_dashboard.test.settings --verbosity 2 --tag integration {posargs}"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"[testenv:npm]"},{"line_number":115,"context_line":"passenv \u003d"}],"source_content_type":"text/x-properties","patch_set":7,"id":"1f493fa4_56913a46","line":112,"updated":"2020-05-06 09:21:13.000000000","message":"It uses django test runner instead of pytest. Is it expected or you just didn\u0027t change it?","commit_id":"f06a8ce34c7c70816908fd74f5dc97c0bb0912ba"}]}
