)]}'
{"tempest/api/compute/base.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"c93f925a2ce0082ddec319e3da9243cb8cc686df","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 netaddr"},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_7b07c783","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":14},"updated":"2019-09-25 09:49:58.000000000","message":"is this import really needed? I suspect so, but I do not see it in this diff...","commit_id":"30c8c5550f06a1680b317ff62965f22045ce37ea"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9cbbaafc724e4f5b517ee72339bc0ec531bd4fa2","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                       \u0027flavor!\u0027 % key)"},{"line_number":574,"context_line":"                self.assertEqual(flavor[key], server_flavor[key], msg)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    @classmethod"},{"line_number":577,"context_line":"    def create_network(cls, network_name\u003dNone, **kwargs):"},{"line_number":578,"context_line":"        \"\"\"Wrapper utility that creates a test network."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        :param network_name: (str) network name"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        network_name \u003d network_name or data_utils.rand_name("},{"line_number":583,"context_line":"            cls.__name__ + \u0027-test-network\u0027)"},{"line_number":584,"context_line":"        body \u003d cls.neutron_networks_client.create_network(name\u003dnetwork_name,"},{"line_number":585,"context_line":"                                                          **kwargs)"},{"line_number":586,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":587,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":588,"context_line":"                                    cls.neutron_networks_client.delete_network,"},{"line_number":589,"context_line":"                                    network[\u0027id\u0027])"},{"line_number":590,"context_line":"        return network"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    @classmethod"},{"line_number":593,"context_line":"    def create_subnet(cls, network_id, cidr, ip_version):"},{"line_number":594,"context_line":"        \"\"\"Wrapper utility that returns a test subnet.\"\"\""},{"line_number":595,"context_line":"        # The cidr depends on the ip version."},{"line_number":596,"context_line":"        body \u003d cls.neutron_subnets_client.create_subnet("},{"line_number":597,"context_line":"            network_id\u003dnetwork_id, cidr\u003dcidr, ip_version\u003dip_version)"},{"line_number":598,"context_line":"        subnet \u003d body[\u0027subnet\u0027]"},{"line_number":599,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":600,"context_line":"                                    cls.neutron_subnets_client.delete_subnet,"},{"line_number":601,"context_line":"                                    subnet[\u0027id\u0027])"},{"line_number":602,"context_line":"        return subnet"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class BaseV2ComputeAdminTest(BaseV2ComputeTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_17a2294c","line":602,"range":{"start_line":576,"start_character":0,"end_line":602,"end_character":21},"updated":"2019-09-25 08:26:17.000000000","message":"As I see this is already implemented here:\nhttps://opendev.org/openstack/tempest/src/branch/master/tempest/test.py#L869\n\nand this one calls actually this one:\nhttps://opendev.org/openstack/tempest/src/branch/master/tempest/test.py#L869","commit_id":"30c8c5550f06a1680b317ff62965f22045ce37ea"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f6fa226282772593b2813e82db16b9dff24e5dab","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                       \u0027flavor!\u0027 % key)"},{"line_number":574,"context_line":"                self.assertEqual(flavor[key], server_flavor[key], msg)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    @classmethod"},{"line_number":577,"context_line":"    def create_network(cls, network_name\u003dNone, **kwargs):"},{"line_number":578,"context_line":"        \"\"\"Wrapper utility that creates a test network."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        :param network_name: (str) network name"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        network_name \u003d network_name or data_utils.rand_name("},{"line_number":583,"context_line":"            cls.__name__ + \u0027-test-network\u0027)"},{"line_number":584,"context_line":"        body \u003d cls.neutron_networks_client.create_network(name\u003dnetwork_name,"},{"line_number":585,"context_line":"                                                          **kwargs)"},{"line_number":586,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":587,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":588,"context_line":"                                    cls.neutron_networks_client.delete_network,"},{"line_number":589,"context_line":"                                    network[\u0027id\u0027])"},{"line_number":590,"context_line":"        return network"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    @classmethod"},{"line_number":593,"context_line":"    def create_subnet(cls, network_id, cidr, ip_version):"},{"line_number":594,"context_line":"        \"\"\"Wrapper utility that returns a test subnet.\"\"\""},{"line_number":595,"context_line":"        # The cidr depends on the ip version."},{"line_number":596,"context_line":"        body \u003d cls.neutron_subnets_client.create_subnet("},{"line_number":597,"context_line":"            network_id\u003dnetwork_id, cidr\u003dcidr, ip_version\u003dip_version)"},{"line_number":598,"context_line":"        subnet \u003d body[\u0027subnet\u0027]"},{"line_number":599,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":600,"context_line":"                                    cls.neutron_subnets_client.delete_subnet,"},{"line_number":601,"context_line":"                                    subnet[\u0027id\u0027])"},{"line_number":602,"context_line":"        return subnet"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class BaseV2ComputeAdminTest(BaseV2ComputeTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_b82b0593","line":602,"range":{"start_line":576,"start_character":0,"end_line":602,"end_character":21},"in_reply_to":"3fa7e38b_17a2294c","updated":"2019-09-25 09:29:32.000000000","message":"Sorry, I don\u0027t get your point here. BTW, the both links are the same.\n\nWhat I\u0027m doing in this patch is creating a tenant network and explicitly passing this network during the server creation, to avoid the problem explained in the bug (\"Multiple possible networks found, use a Network ID to be more specific.\")","commit_id":"30c8c5550f06a1680b317ff62965f22045ce37ea"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f65a946cd6aa27375c8d0d912e3a1b2652a010f2","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                       \u0027flavor!\u0027 % key)"},{"line_number":574,"context_line":"                self.assertEqual(flavor[key], server_flavor[key], msg)"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    @classmethod"},{"line_number":577,"context_line":"    def create_network(cls, network_name\u003dNone, **kwargs):"},{"line_number":578,"context_line":"        \"\"\"Wrapper utility that creates a test network."},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        :param network_name: (str) network name"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        network_name \u003d network_name or data_utils.rand_name("},{"line_number":583,"context_line":"            cls.__name__ + \u0027-test-network\u0027)"},{"line_number":584,"context_line":"        body \u003d cls.neutron_networks_client.create_network(name\u003dnetwork_name,"},{"line_number":585,"context_line":"                                                          **kwargs)"},{"line_number":586,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":587,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":588,"context_line":"                                    cls.neutron_networks_client.delete_network,"},{"line_number":589,"context_line":"                                    network[\u0027id\u0027])"},{"line_number":590,"context_line":"        return network"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    @classmethod"},{"line_number":593,"context_line":"    def create_subnet(cls, network_id, cidr, ip_version):"},{"line_number":594,"context_line":"        \"\"\"Wrapper utility that returns a test subnet.\"\"\""},{"line_number":595,"context_line":"        # The cidr depends on the ip version."},{"line_number":596,"context_line":"        body \u003d cls.neutron_subnets_client.create_subnet("},{"line_number":597,"context_line":"            network_id\u003dnetwork_id, cidr\u003dcidr, ip_version\u003dip_version)"},{"line_number":598,"context_line":"        subnet \u003d body[\u0027subnet\u0027]"},{"line_number":599,"context_line":"        cls.addClassResourceCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":600,"context_line":"                                    cls.neutron_subnets_client.delete_subnet,"},{"line_number":601,"context_line":"                                    subnet[\u0027id\u0027])"},{"line_number":602,"context_line":"        return subnet"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class BaseV2ComputeAdminTest(BaseV2ComputeTest):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_2c3fd7b4","line":602,"range":{"start_line":576,"start_character":0,"end_line":602,"end_character":21},"in_reply_to":"3fa7e38b_b82b0593","updated":"2019-09-25 11:17:21.000000000","message":"Sorry, the links are the following:\nhttps://opendev.org/openstack/tempest/src/branch/master/tempest/test.py#L869\nhttps://opendev.org/openstack/tempest/src/branch/master/tempest/lib/common/fixed_network.py#L79\n\nMy point was that this functionality is defined several places in tempest, one is that I referenced in the links. \nAnd I would go against code duplication if possible","commit_id":"30c8c5550f06a1680b317ff62965f22045ce37ea"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6134a968e52708baebe0681aa3fa0754b1019403","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if \u0027name\u0027 not in kwargs:"},{"line_number":228,"context_line":"            kwargs[\u0027name\u0027] \u003d data_utils.rand_name(cls.__name__ + \"-server\")"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        if getattr(cls, \u0027default_networks\u0027, None) and \u0027networks\u0027 not in kwargs:"},{"line_number":231,"context_line":"            kwargs[\u0027networks\u0027] \u003d cls.default_networks"},{"line_number":232,"context_line":"            tenant_network \u003d None"},{"line_number":233,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_e201f1b6","line":230,"range":{"start_line":230,"start_character":11,"end_line":230,"end_character":49},"updated":"2019-12-05 00:16:20.000000000","message":"any other way any test class can set the default_networks than cls.get_tenant_network() ?\nif not then there is no difference from original code.","commit_id":"7af2915331905742d7419133a39417652e759050"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9a64bd959210da24ad31caf0f0f3660aab486fe2","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if \u0027name\u0027 not in kwargs:"},{"line_number":228,"context_line":"            kwargs[\u0027name\u0027] \u003d data_utils.rand_name(cls.__name__ + \"-server\")"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        if getattr(cls, \u0027default_networks\u0027, None) and \u0027networks\u0027 not in kwargs:"},{"line_number":231,"context_line":"            kwargs[\u0027networks\u0027] \u003d cls.default_networks"},{"line_number":232,"context_line":"            tenant_network \u003d None"},{"line_number":233,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_e2cbea19","line":230,"range":{"start_line":230,"start_character":11,"end_line":230,"end_character":49},"in_reply_to":"3fa7e38b_e201f1b6","updated":"2019-12-10 15:20:20.000000000","message":"I\u0027ll use the default members defined in \"set_network_resources\".\n\nBut the goal of this patch is to force the tenant network in the input parameters because as seen in the bug description, when \"create_test_server\" tries to select the tenant network, more than one is created.","commit_id":"7af2915331905742d7419133a39417652e759050"}],"tempest/api/compute/servers/test_servers_negative.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"6a8dd9be6bb701a26dc6eba68709ad122d353047","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.__class__.server_id \u003d self.recreate_server(self.server_id)"},{"line_number":41,"context_line":"        self._tenant_network \u003d self.create_network()"},{"line_number":42,"context_line":"        self._tenant_subnet \u003d self.create_subnet("},{"line_number":43,"context_line":"            self._tenant_network[\u0027id\u0027], \u002710.10.0.0/24\u0027, 4)"},{"line_number":44,"context_line":"        self.default_networks \u003d [{\u0027uuid\u0027: self._tenant_network[\u0027id\u0027]}]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_7e7b237a","line":43,"updated":"2019-09-26 02:04:27.000000000","message":"This self._tenant_subunet is defined but I can\u0027t find usage of this. Why do we need this?","commit_id":"95ec7b7985fd0502bc2d39b49ef44c62571611d1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5dad42fdedba5af955ee2f282194e62f12546bef","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            self.__class__.server_id \u003d self.recreate_server(self.server_id)"},{"line_number":41,"context_line":"        self._tenant_network \u003d self.create_network()"},{"line_number":42,"context_line":"        self._tenant_subnet \u003d self.create_subnet("},{"line_number":43,"context_line":"            self._tenant_network[\u0027id\u0027], \u002710.10.0.0/24\u0027, 4)"},{"line_number":44,"context_line":"        self.default_networks \u003d [{\u0027uuid\u0027: self._tenant_network[\u0027id\u0027]}]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def tearDown(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_dbd7beed","line":43,"in_reply_to":"3fa7e38b_7e7b237a","updated":"2019-09-26 12:56:13.000000000","message":"We don\u0027t need now it but maybe in a future. I\u0027ll remove the assignation but IMO this should be keeped as a reference.","commit_id":"95ec7b7985fd0502bc2d39b49ef44c62571611d1"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"6a8dd9be6bb701a26dc6eba68709ad122d353047","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def setup_credentials(cls):"},{"line_number":55,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":56,"context_line":"        super(ServersNegativeTestJSON, cls).setup_credentials()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_9e805f48","line":55,"updated":"2019-09-26 02:04:27.000000000","message":"I feel this set_network_resources() call is a bit weird here. Why can\u0027t we move this to resource_setup()? Too early or late?","commit_id":"95ec7b7985fd0502bc2d39b49ef44c62571611d1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5dad42fdedba5af955ee2f282194e62f12546bef","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @classmethod"},{"line_number":54,"context_line":"    def setup_credentials(cls):"},{"line_number":55,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":56,"context_line":"        super(ServersNegativeTestJSON, cls).setup_credentials()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_fb1b9ac6","line":55,"in_reply_to":"3fa7e38b_9e805f48","updated":"2019-09-26 12:56:13.000000000","message":"This is the right moment to call this method with those input parameters. Here we are populating cls._network_resources. \n\nThen, when the super method is called and the same method is called again [1], cls._network_resources is not overwritten [2].\n\n[1]https://github.com/openstack/tempest/blob/158f6b4b06b1a31cd70c597b2e8c5bd7b85f7410/tempest/api/compute/base.py#L61\n[2]https://github.com/openstack/tempest/blob/158f6b4b06b1a31cd70c597b2e8c5bd7b85f7410/tempest/test.py#L861-L866","commit_id":"95ec7b7985fd0502bc2d39b49ef44c62571611d1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6134a968e52708baebe0681aa3fa0754b1019403","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @classmethod"},{"line_number":50,"context_line":"    def setup_credentials(cls):"},{"line_number":51,"context_line":"        cls.set_network_resources(network\u003dTrue, subnet\u003dTrue)"},{"line_number":52,"context_line":"        super(ServersNegativeTestJSON, cls).setup_credentials()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @classmethod"},{"line_number":55,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_c20e35e3","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":63},"updated":"2019-12-05 00:16:20.000000000","message":"this should solve the error. as this prepare the network and base class fetch that network for server.","commit_id":"7af2915331905742d7419133a39417652e759050"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6134a968e52708baebe0681aa3fa0754b1019403","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        waiters.wait_for_server_termination(cls.client, server[\u0027id\u0027])"},{"line_number":68,"context_line":"        cls.deleted_server_id \u003d server[\u0027id\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        tenant_network \u003d cls.get_tenant_network()"},{"line_number":71,"context_line":"        cls.default_networks \u003d [{\u0027uuid\u0027: tenant_network[\u0027id\u0027]}]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @decorators.attr(type\u003d[\u0027negative\u0027])"},{"line_number":74,"context_line":"    @decorators.idempotent_id(\u0027dbbfd247-c40c-449e-8f6c-d2aa7c7da7cf\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_226aa980","line":71,"range":{"start_line":70,"start_character":0,"end_line":71,"end_character":63},"updated":"2019-12-05 00:16:20.000000000","message":"this is what base class and common create_test_server method does\n- https://review.opendev.org/#/c/682964/15/tempest/api/compute/base.py@234\n- https://github.com/openstack/tempest/blob/5d9229b5216037586d4e8f6920d6e21bf11f41ae/tempest/common/compute.py#L115\n\n- https://github.com/openstack/tempest/blob/5d9229b5216037586d4e8f6920d6e21bf11f41ae/tempest/lib/common/fixed_network.py#L115","commit_id":"7af2915331905742d7419133a39417652e759050"}]}
