)]}'
{".testr.conf":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":2,"context_line":"test_command\u003dOS_STDOUT_CAPTURE\u003d${OS_STDOUT_CAPTURE:-1} \\"},{"line_number":3,"context_line":"             OS_STDERR_CAPTURE\u003d${OS_STDERR_CAPTURE:-1} \\"},{"line_number":4,"context_line":"             OS_TEST_TIMEOUT\u003d${OS_TEST_TIMEOUT:-60} \\"},{"line_number":5,"context_line":"             ${PYTHON:-python} -m subunit.run discover -t ./ ${OS_TEST_PATH:-./shade/tests/unit} $LISTOPT $IDOPTION"},{"line_number":6,"context_line":"test_id_option\u003d--load-list $IDFILE"},{"line_number":7,"context_line":"test_list_option\u003d--list"}],"source_content_type":"text/plain","patch_set":15,"id":"9a80dd14_203a7236","line":5,"updated":"2015-03-06 01:31:20.000000000","message":"I really wish there was a better way to set the discover path.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"}],"shade/tests/functional/base.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.auth_creds[\u0027username\u0027] \u003d os.environ.get(\u0027OS_USERNAME\u0027)"},{"line_number":27,"context_line":"        self.auth_creds[\u0027password\u0027] \u003d os.environ.get(\u0027OS_PASSWORD\u0027)"},{"line_number":28,"context_line":"        self.auth_creds[\u0027tenant_name\u0027] \u003d os.environ.get(\u0027OS_TENANT_NAME\u0027)"},{"line_number":29,"context_line":"        self.auth_creds[\u0027uri\u0027] \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_404046a5","line":29,"updated":"2015-03-06 01:31:20.000000000","message":"Maybe put this in setUp() so that tests don\u0027t have to explicitly request creds, they can just be available as self.auth_creds from the start.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"0c0f8a63078f1d8a2fd3f8d4d94cb1c1a1eae3da","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.auth_creds[\u0027username\u0027] \u003d os.environ.get(\u0027OS_USERNAME\u0027)"},{"line_number":27,"context_line":"        self.auth_creds[\u0027password\u0027] \u003d os.environ.get(\u0027OS_PASSWORD\u0027)"},{"line_number":28,"context_line":"        self.auth_creds[\u0027tenant_name\u0027] \u003d os.environ.get(\u0027OS_TENANT_NAME\u0027)"},{"line_number":29,"context_line":"        self.auth_creds[\u0027uri\u0027] \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_197a0524","line":29,"in_reply_to":"9a80dd14_404046a5","updated":"2015-03-13 16:37:39.000000000","message":"Turns out openstack_config from os-client-config reads from os.environ the OS-* vars, so not needed to have a base class to pull the variables, simply call \u0027openstack_cloud()\u0027 suffices.\nThus, I\u0027m removing this base class.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"eb047f56335a60c63046e3af509ec722704d3e77","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import testtools"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class BaseFunctionalTestCase(testtools.TestCase):"},{"line_number":18,"context_line":"    \"\"\""},{"line_number":19,"context_line":"    This base class implements a method to pull creds"},{"line_number":20,"context_line":"    from openrc environment variables."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_a7cdb888","line":17,"updated":"2015-03-11 22:36:09.000000000","message":"Would prefer to inherit from base.TestCase which include timeouts and stderr/stdout capture","commit_id":"b3e6a1dd174f30405ee99e5e1abe05c1ad1ef0dc"}],"shade/tests/functional/hooks/post_test_hook.sh":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":24,"context_line":"EXIT_CODE\u003d$?"},{"line_number":25,"context_line":"set -e"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"exit $EXIT_CODE"}],"source_content_type":"text/x-sh","patch_set":15,"id":"9a80dd14_e0169aa6","line":27,"updated":"2015-03-06 01:31:20.000000000","message":"This would be a lot cleaner if the entire script was just set -e","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"}],"shade/tests/functional/test_compute.py":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8ed17399b8300977750e0a954215568ada4ab3b2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.cloud \u003d openstack_cloud(self.auth_creds)"},{"line_number":33,"context_line":"        self.nova \u003d self.cloud.nova_client"},{"line_number":34,"context_line":"        self.flavor \u003d pick_flavor(self.nova.flavors.list())"},{"line_number":35,"context_line":"        self.image \u003d pick_image(self.nova.images.list())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_create_server(self):"},{"line_number":38,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_09adb488","line":35,"updated":"2015-03-02 01:26:32.000000000","message":"These helpers will return None if the tested-against-clouds don\u0027t contain the images or flavors we expect. I suspect this will result in things exploding later. I think it would be quite helpful to add a detail that explains \"no sensible image available\" so the failures include some clues to developers debugging fails.","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"bc39d8ebb1075cd3408cb5922b8af5d07048e2fb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.cloud \u003d openstack_cloud(self.auth_creds)"},{"line_number":33,"context_line":"        self.nova \u003d self.cloud.nova_client"},{"line_number":34,"context_line":"        self.flavor \u003d pick_flavor(self.nova.flavors.list())"},{"line_number":35,"context_line":"        self.image \u003d pick_image(self.nova.images.list())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_create_server(self):"},{"line_number":38,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_5ec5873b","line":35,"in_reply_to":"ba7be1f8_09adb488","updated":"2015-03-02 14:57:23.000000000","message":"Done","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8ed17399b8300977750e0a954215568ada4ab3b2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def test_create_server(self):"},{"line_number":38,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"},{"line_number":39,"context_line":"                                          image\u003dself.image, flavor\u003dself.flavor)"},{"line_number":40,"context_line":"        print server"},{"line_number":41,"context_line":"        print type(server)"},{"line_number":42,"context_line":"        self.assertIsInstance(server, Server)"},{"line_number":43,"context_line":"        self.assertEquals(server.name, \u0027test_create_server\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_29fef8ae","line":40,"updated":"2015-03-02 01:26:32.000000000","message":"Printing isn\u0027t really what you want to do, as it precludes ever using subunit for this test case.\n\nHow about this:\n\n    self.addDetail(\"server\", testtools.text_content(str(server))\n\nThat will cause the details to be noted on failures.\n\nAnyway, if we really do want print, please use py3 compatible \"print()\". Thanks.","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"bc39d8ebb1075cd3408cb5922b8af5d07048e2fb","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def test_create_server(self):"},{"line_number":38,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"},{"line_number":39,"context_line":"                                          image\u003dself.image, flavor\u003dself.flavor)"},{"line_number":40,"context_line":"        print server"},{"line_number":41,"context_line":"        print type(server)"},{"line_number":42,"context_line":"        self.assertIsInstance(server, Server)"},{"line_number":43,"context_line":"        self.assertEquals(server.name, \u0027test_create_server\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_5ef3c79e","line":40,"in_reply_to":"ba7be1f8_29fef8ae","updated":"2015-03-02 14:57:23.000000000","message":"oops, this was a leftover from previous pre-push tests on my side, didn\u0027t want those print statements","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8ed17399b8300977750e0a954215568ada4ab3b2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        server_deleted \u003d self.cloud.delete_server(\u0027test_delete_server\u0027)"},{"line_number":51,"context_line":"        self.assertIsNone(server_deleted)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        super(TestCompute, self).tearDown()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for i in self.nova.servers.list():"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_69a470b9","line":53,"updated":"2015-03-02 01:26:32.000000000","message":"You almost never want to clean up the way tearDown works. \n\nInstead, you probably want something like this at the end of setUp:\n\n    def _cleanup_servers():\n        for i in self.nova.servers.list...\n            ....\n    self.addCleanup(_cleanup_servers)\n\nThe main reason is that tearDown _does not_ get called on failures.","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"bc39d8ebb1075cd3408cb5922b8af5d07048e2fb","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        server_deleted \u003d self.cloud.delete_server(\u0027test_delete_server\u0027)"},{"line_number":51,"context_line":"        self.assertIsNone(server_deleted)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def tearDown(self):"},{"line_number":54,"context_line":"        super(TestCompute, self).tearDown()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for i in self.nova.servers.list():"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_be2be3e9","line":53,"in_reply_to":"ba7be1f8_69a470b9","updated":"2015-03-02 14:57:23.000000000","message":"Done","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"2c667908ccdadc159b98be46414f40632194b37f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def test_create_server(self):"},{"line_number":47,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"},{"line_number":48,"context_line":"                                          image\u003dself.image, flavor\u003dself.flavor)"},{"line_number":49,"context_line":"        self.addCleanup(self._cleanup_servers)"},{"line_number":50,"context_line":"        self.assertIsInstance(server, Server)"},{"line_number":51,"context_line":"        self.assertEquals(server.name, \u0027test_create_server\u0027)"},{"line_number":52,"context_line":"        self.assertEquals(server.image[\u0027id\u0027], self.image.id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_b43a1796","line":49,"updated":"2015-03-02 18:24:40.000000000","message":"I think you should move the call to setUp, so that we don\u0027t have to remember to add it to every test that might leave servers lying around.","commit_id":"472bc792f8a388299e18f0c37144e7b51562469e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.nova \u003d self.cloud.nova_client"},{"line_number":34,"context_line":"        self.flavor \u003d pick_flavor(self.nova.flavors.list())"},{"line_number":35,"context_line":"        if self.flavor is None:"},{"line_number":36,"context_line":"            self.addDetail(\u0027pick_flavor\u0027, \u0027no sensible flavor available\u0027)"},{"line_number":37,"context_line":"        self.image \u003d pick_image(self.nova.images.list())"},{"line_number":38,"context_line":"        if self.image is None:"},{"line_number":39,"context_line":"            self.addDetail(\u0027pick_image\u0027, \u0027no sensible image available\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_603b8a38","line":36,"updated":"2015-03-06 01:31:20.000000000","message":"Should this fail? what happens when you boot without a flavor? Failing as close as possible to the site of the issue is really helpful for debugging.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"0c0f8a63078f1d8a2fd3f8d4d94cb1c1a1eae3da","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.nova \u003d self.cloud.nova_client"},{"line_number":34,"context_line":"        self.flavor \u003d pick_flavor(self.nova.flavors.list())"},{"line_number":35,"context_line":"        if self.flavor is None:"},{"line_number":36,"context_line":"            self.addDetail(\u0027pick_flavor\u0027, \u0027no sensible flavor available\u0027)"},{"line_number":37,"context_line":"        self.image \u003d pick_image(self.nova.images.list())"},{"line_number":38,"context_line":"        if self.image is None:"},{"line_number":39,"context_line":"            self.addDetail(\u0027pick_image\u0027, \u0027no sensible image available\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_f977f1d1","line":36,"in_reply_to":"9a80dd14_603b8a38","updated":"2015-03-13 16:37:39.000000000","message":"I assume you want here a fail(), instead of an addDetail, so we bail out as soon as possible?","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            self.addDetail(\u0027pick_flavor\u0027, \u0027no sensible flavor available\u0027)"},{"line_number":37,"context_line":"        self.image \u003d pick_image(self.nova.images.list())"},{"line_number":38,"context_line":"        if self.image is None:"},{"line_number":39,"context_line":"            self.addDetail(\u0027pick_image\u0027, \u0027no sensible image available\u0027)"},{"line_number":40,"context_line":"        self.addCleanup(self._cleanup_servers)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _cleanup_servers(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_804a3ec3","line":39,"updated":"2015-03-06 01:31:20.000000000","message":"Should this fail? what happens when you boot without an image? Failing as close as possible to the site of the issue is really helpful for debugging.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def _cleanup_servers(self):"},{"line_number":43,"context_line":"        for i in self.nova.servers.list():"},{"line_number":44,"context_line":"            if i.name.startswith(\u0027test\u0027):"},{"line_number":45,"context_line":"                self.nova.servers.delete(i)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_create_server(self):"},{"line_number":48,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_a04582b4","line":45,"updated":"2015-03-06 01:31:20.000000000","message":"So one thing to keep in mind with stuff like this is you may end up needing a much richer abstractio n for resource management to prevent the tests going off the rails. By default these calls are asynchronous so if they take their time you may end up using all available resources on the hypervisors resulting in failed tests.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"0c0f8a63078f1d8a2fd3f8d4d94cb1c1a1eae3da","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def _cleanup_servers(self):"},{"line_number":43,"context_line":"        for i in self.nova.servers.list():"},{"line_number":44,"context_line":"            if i.name.startswith(\u0027test\u0027):"},{"line_number":45,"context_line":"                self.nova.servers.delete(i)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def test_create_server(self):"},{"line_number":48,"context_line":"        server \u003d self.cloud.create_server(name\u003d\u0027test_create_server\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_b41d8064","line":45,"in_reply_to":"9a80dd14_a04582b4","updated":"2015-03-13 16:37:39.000000000","message":"I\u0027m not aware of making this synchronous, is there some sort of flag like poll/wait you can pass to nova delete method?","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def test_delete_server(self):"},{"line_number":56,"context_line":"        self.cloud.create_server(name\u003d\u0027test_delete_server\u0027,"},{"line_number":57,"context_line":"                                 image\u003dself.image, flavor\u003dself.flavor)"},{"line_number":58,"context_line":"        server_deleted \u003d self.cloud.delete_server(\u0027test_delete_server\u0027)"},{"line_number":59,"context_line":"        self.assertIsNone(server_deleted)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_c01356b6","line":58,"updated":"2015-03-06 01:31:20.000000000","message":"This is also async so this test is really only testing that the delete request is submitted.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"}],"shade/tests/functional/util.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    for flavor in flavors:"},{"line_number":30,"context_line":"        if flavor.name \u003d\u003d \u0027m1.small\u0027:"},{"line_number":31,"context_line":"            return flavor"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def pick_image(images):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_00372e4f","line":31,"updated":"2015-03-06 01:31:20.000000000","message":"Devstack has a flavor id of 42 for flavor m1.nano. I think its the smallest flavor and should be the default.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":11610,"name":"Timothy R. Chavez","email":"timrchavez@us.ibm.com","username":"timrchavez"},"change_message_id":"7dc923e49715d4e3de189e4f18a2ba4a9f498fed","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    for flavor in flavors:"},{"line_number":30,"context_line":"        if flavor.name \u003d\u003d \u0027m1.small\u0027:"},{"line_number":31,"context_line":"            return flavor"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def pick_image(images):"},{"line_number":35,"context_line":"    for image in images:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_de3a6a33","line":32,"updated":"2015-03-05 17:46:34.000000000","message":"Maybe rather than running through two loops..\n\nalt_flavor \u003d None\nfor flavor in flavors:\n    if flavor.name \u003d\u003d \"m1.tiny\":\n        return flavor\n    if flavor.name \u003d\u003d \"m1.small\":\n        alt_flavor \u003d flavor\n\nreturn alt_flavor","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"0c0f8a63078f1d8a2fd3f8d4d94cb1c1a1eae3da","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    for flavor in flavors:"},{"line_number":30,"context_line":"        if flavor.name \u003d\u003d \u0027m1.small\u0027:"},{"line_number":31,"context_line":"            return flavor"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def pick_image(images):"},{"line_number":35,"context_line":"    for image in images:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_3448b05b","line":32,"in_reply_to":"9a80dd14_de3a6a33","updated":"2015-03-13 16:37:39.000000000","message":"i agree, copy pasted from python-novaclient, this is horrible.\nBetter to have just one loop","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"},{"author":{"_account_id":1726,"name":"Ghe Rivero","email":"ghe.rivero@gmail.com","username":"ghe.rivero"},"change_message_id":"eb047f56335a60c63046e3af509ec722704d3e77","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    for flavor in flavors:"},{"line_number":26,"context_line":"        if flavor.name \u003d\u003d \u0027m1.tiny\u0027:"},{"line_number":27,"context_line":"            return flavor"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    for flavor in flavors:"},{"line_number":30,"context_line":"        if flavor.name \u003d\u003d \u0027m1.small\u0027:"},{"line_number":31,"context_line":"            return flavor"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_c7c8ec77","line":28,"updated":"2015-03-11 22:36:09.000000000","message":"Those two can be combined","commit_id":"b3e6a1dd174f30405ee99e5e1abe05c1ad1ef0dc"}],"test-requirements.txt":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"e5007c4bd094e94480e0c49006956ac24d95af62","unresolved":false,"context_lines":[{"line_number":6,"context_line":"python-subunit"},{"line_number":7,"context_line":"sphinx\u003e\u003d1.1.2"},{"line_number":8,"context_line":"oslo.config"},{"line_number":9,"context_line":"oslo.sphinx"},{"line_number":10,"context_line":"testrepository\u003e\u003d0.0.17"},{"line_number":11,"context_line":"testscenarios\u003e\u003d0.4,\u003c0.5"},{"line_number":12,"context_line":"testtools\u003e\u003d0.9.32"}],"source_content_type":"text/plain","patch_set":3,"id":"ba7be1f8_ea156ee5","line":9,"updated":"2015-02-24 21:26:40.000000000","message":"Should add tempest here.","commit_id":"7d74479389ab36e14a7fbcce5e76272399234332"}],"tox.ini":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"9e4471f0dbdd94e43638785212dcb689d1dfee0b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"   LC_ALL\u003dC"},{"line_number":14,"context_line":"deps \u003d -r{toxinidir}/requirements.txt"},{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d python setup.py testr --slowest --testr-args\u003d{posargs:shade/tests/unit}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[testenv:func]"},{"line_number":19,"context_line":"commands \u003d python setup.py testr --slowest --testr-args\u003d{posargs:shade/tests/functional}"}],"source_content_type":"text/x-properties","patch_set":8,"id":"ba7be1f8_8a612407","line":16,"updated":"2015-02-25 18:29:37.000000000","message":"It seems like this will work, but it won\u0027t. testr\u0027s CLI is a little weird in this aspect. You\u0027ve passed shade/tests/unit as a filter, not as an argument to discover. So discover will still start in the current dir and import everything called test*.py, which will fail on the tempest.config bits. It only filters after the list has imported everything.\n\nIn trying to help figure this out, it\u0027s become clear to me that tempest.config isn\u0027t used anywhere else, so I\u0027m not sure you can even do what you\u0027re trying to do there.","commit_id":"6daa7847d93b8ee3b797a1f17978a4c3bc9c067a"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8ed17399b8300977750e0a954215568ada4ab3b2","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[testenv:functional]"},{"line_number":19,"context_line":"setenv \u003d"},{"line_number":20,"context_line":"   OS_TEST_PATH \u003d ./shade/tests/functional"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[testenv:pep8]"},{"line_number":23,"context_line":"commands \u003d flake8"}],"source_content_type":"text/x-properties","patch_set":11,"id":"ba7be1f8_09c4d43e","line":20,"updated":"2015-03-02 01:26:32.000000000","message":"I don\u0027t see where this actually gets used. ??","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"bc39d8ebb1075cd3408cb5922b8af5d07048e2fb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[testenv:functional]"},{"line_number":19,"context_line":"setenv \u003d"},{"line_number":20,"context_line":"   OS_TEST_PATH \u003d ./shade/tests/functional"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[testenv:pep8]"},{"line_number":23,"context_line":"commands \u003d flake8"}],"source_content_type":"text/x-properties","patch_set":11,"id":"ba7be1f8_1eba2f6e","line":20,"in_reply_to":"ba7be1f8_09c4d43e","updated":"2015-03-02 14:57:23.000000000","message":"Check .testr.conf, that\u0027s how we can filter the testr discover.\nSame pattern used on python-*client : \n\nhttps://github.com/openstack/python-novaclient/blob/master/.testr.conf","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"03d74894b9dc804410646e56758a2533e9a323ec","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[testenv:functional]"},{"line_number":19,"context_line":"setenv \u003d"},{"line_number":20,"context_line":"   OS_TEST_PATH \u003d ./shade/tests/functional"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[testenv:pep8]"},{"line_number":23,"context_line":"commands \u003d flake8"}],"source_content_type":"text/x-properties","patch_set":11,"id":"ba7be1f8_f412cf07","line":20,"in_reply_to":"ba7be1f8_1eba2f6e","updated":"2015-03-02 18:24:18.000000000","message":"Cool I actually missed where you added the reference to it. Thanks.","commit_id":"f4d8c05d85bd606f204ffe3e9c77679a232b70ba"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"37861e2913ffb663cc9beaa903d9f7630dbdb783","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"[testenv:functional]"},{"line_number":19,"context_line":"setenv \u003d"},{"line_number":20,"context_line":"   OS_TEST_PATH \u003d ./shade/tests/functional"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"[testenv:pep8]"},{"line_number":23,"context_line":"commands \u003d flake8"}],"source_content_type":"text/x-properties","patch_set":15,"id":"9a80dd14_e02f7af4","line":20,"updated":"2015-03-06 01:31:20.000000000","message":"Note that by setting setenv here you override all setenv values from [testenv] not sure that they matter but they might.","commit_id":"18c9cd4e50bbfff3ca3e16a7f08d5c4fb63af9b2"}]}
