)]}'
{"tempest/api/network/admin/test_multiprovider_extension.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"40ee7297f1cd345bcf29b227c814ecad9ebe577c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                self.assertNotIn(\u0027provider:network_type\u0027, observed)"},{"line_number":112,"context_line":"                self.assertNotIn(\u0027provider:physical_network\u0027, observed)"},{"line_number":113,"context_line":"                self.assertNotIn(\u0027provider:segmentation_id\u0027, observed)"},{"line_number":114,"context_line":"                self.check_specs(specs, observed[\u0027segments\u0027])"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class MultiProviderExtensionTestXML(MultiProviderExtensionTestJSON):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d4e7edaa","line":114,"updated":"2014-07-09 11:32:29.000000000","message":"As far as I see checks\n\n        self.assertNotIn(\u0027provider:network_type\u0027, observed)\n        self.assertNotIn(\u0027provider:physical_network\u0027, observed)\n        self.assertNotIn(\u0027provider:segmentation_id\u0027, observed)\n\nduplicates in 4 tests. I think it is better to add them in self.check_specs()","commit_id":"34c10cb56ae751c436b56a069f74958a43b7b36e"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"e27930d3fe283e4f0eb304efb5f2da080050a79b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                self.assertNotIn(\u0027provider:network_type\u0027, observed)"},{"line_number":112,"context_line":"                self.assertNotIn(\u0027provider:physical_network\u0027, observed)"},{"line_number":113,"context_line":"                self.assertNotIn(\u0027provider:segmentation_id\u0027, observed)"},{"line_number":114,"context_line":"                self.check_specs(specs, observed[\u0027segments\u0027])"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"class MultiProviderExtensionTestXML(MultiProviderExtensionTestJSON):"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_efaa5e84","line":114,"in_reply_to":"baada198_d4e7edaa","updated":"2014-07-09 11:49:49.000000000","message":"Done","commit_id":"34c10cb56ae751c436b56a069f74958a43b7b36e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4f7393fd57ff8431b8167c3e3d9386fdb5a275d4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(expecteds_set, observeds_set)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def get_specs(cls):"},{"line_number":44,"context_line":"        if len(CONF.network.multiprovider_network_scenario) \u003c 2:"},{"line_number":45,"context_line":"            msg \u003d \"Not enough multi-provider segments provided.\""},{"line_number":46,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_6b2a1b92","line":43,"updated":"2014-08-04 10:39:00.000000000","message":"super class already has \"get_spec\" method. IMO this method should override/shadow that one.","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"2e9445dc5d32a68f3d326fbd5814a118bbb2472c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                for s in CONF.network.multiprovider_network_scenario]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def setUpClass(cls):"},{"line_number":52,"context_line":"        super(MultiProviderExtensionTestJSON, cls).setUpClass()"},{"line_number":53,"context_line":"        if not test.is_extension_enabled(\u0027provider\u0027, \u0027network\u0027):"},{"line_number":54,"context_line":"            msg \u003d \"multi-provider extension not enabled.\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_dcd84b54","line":51,"updated":"2014-08-04 10:49:56.000000000","message":"this is duplicated from previous patch. move it to the super class for code sharing","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"289eb6c4a0af738fec201ff3454a9269f4df4564","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                for s in CONF.network.multiprovider_network_scenario]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def setUpClass(cls):"},{"line_number":52,"context_line":"        super(MultiProviderExtensionTestJSON, cls).setUpClass()"},{"line_number":53,"context_line":"        if not test.is_extension_enabled(\u0027provider\u0027, \u0027network\u0027):"},{"line_number":54,"context_line":"            msg \u003d \"multi-provider extension not enabled.\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_64cf6fb3","line":51,"in_reply_to":"baada198_dcd84b54","updated":"2014-08-13 14:40:13.000000000","message":"nope, because the test should be:\n\n    test.is_extension_enabled(\u0027multi-provider\u0027, \u0027network\u0027)","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4f7393fd57ff8431b8167c3e3d9386fdb5a275d4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertNotIn(\u0027segments\u0027, observed)"},{"line_number":65,"context_line":"        self.assertDictContainsSubset(spec, observed)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_create_multi_segment_multiprovider_network(self):"},{"line_number":68,"context_line":"        specs \u003d self.get_specs()"},{"line_number":69,"context_line":"        observed \u003d self.safe_create_admin_network(segments\u003dspecs)"},{"line_number":70,"context_line":"        self.check_specs(specs, observed)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_91307c08","line":67,"updated":"2014-08-04 10:39:00.000000000","message":"I believe the common practice is to have a single test of Create_Udpate_List_Show_Delete instead of creating the network multiple times\n\nif you squash all these methods together, it would be easier to add them to the test_provider_extension.py module instead of creating a new one","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"289eb6c4a0af738fec201ff3454a9269f4df4564","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertNotIn(\u0027segments\u0027, observed)"},{"line_number":65,"context_line":"        self.assertDictContainsSubset(spec, observed)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_create_multi_segment_multiprovider_network(self):"},{"line_number":68,"context_line":"        specs \u003d self.get_specs()"},{"line_number":69,"context_line":"        observed \u003d self.safe_create_admin_network(segments\u003dspecs)"},{"line_number":70,"context_line":"        self.check_specs(specs, observed)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ca404509","line":67,"in_reply_to":"baada198_91307c08","updated":"2014-08-13 14:40:13.000000000","message":"Done","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4f7393fd57ff8431b8167c3e3d9386fdb5a275d4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        network \u003d self.safe_create_admin_network(segments\u003dspecs)"},{"line_number":75,"context_line":"        name \u003d data_utils.rand_name(\u0027network\u0027)"},{"line_number":76,"context_line":"        resp, body \u003d self.admin_client.update_network(network[\u0027id\u0027], name\u003dname)"},{"line_number":77,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":78,"context_line":"        observed \u003d body[\u0027network\u0027]"},{"line_number":79,"context_line":"        self.assertEqual(network[\u0027id\u0027], observed[\u0027id\u0027])"},{"line_number":80,"context_line":"        self.assertEqual(name, observed[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_318330aa","line":77,"updated":"2014-08-04 10:39:00.000000000","message":"return code should be verified in client","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"}],"tempest/api/network/admin/test_provider_extension.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"86e653f16954cdfc95d6da11c2075faeae7db38a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        observeds \u003d body[\u0027networks\u0027]"},{"line_number":168,"context_line":"        for observed in observeds:"},{"line_number":169,"context_line":"            if observed[\u0027id\u0027] \u003d\u003d network[\u0027id\u0027]:"},{"line_number":170,"context_line":"                self.check_multi_provider_network_specs(self.specs, observed)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # update"},{"line_number":173,"context_line":"        name \u003d data_utils.rand_name(\u0027new-network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_d032550f","line":170,"updated":"2014-09-02 13:25:43.000000000","message":"it\u0027s better to check if the network is actually listed.","commit_id":"fd125c083603f31a69c1bc197187ffe6aa05544c"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"bbb94fc72d2bf347b811ca1aafd9d3349f57bf25","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        observeds \u003d body[\u0027networks\u0027]"},{"line_number":168,"context_line":"        for observed in observeds:"},{"line_number":169,"context_line":"            if observed[\u0027id\u0027] \u003d\u003d network[\u0027id\u0027]:"},{"line_number":170,"context_line":"                self.check_multi_provider_network_specs(self.specs, observed)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # update"},{"line_number":173,"context_line":"        name \u003d data_utils.rand_name(\u0027new-network\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa98f980_c14525b4","line":170,"in_reply_to":"fa98f980_d032550f","updated":"2014-09-02 14:32:27.000000000","message":"Done","commit_id":"fd125c083603f31a69c1bc197187ffe6aa05544c"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"570a4c9966e5ba39f667a9553fe16f7d75cab9e7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Provider and multi-provider tests are in the same class to ensure we do"},{"line_number":31,"context_line":"    # not try to use the same segment in multiple networks at the same time."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def safe_create_admin_network(self, **spec):"},{"line_number":34,"context_line":"        \"\"\"Create network in admin tenant and ensure its cleanup after test.\"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c5127f61","line":31,"updated":"2014-09-10 23:48:29.000000000","message":"This isn\u0027t actually guaranteed by doing this because of the xml test class can run at the same time as the JSON.","commit_id":"439aa7348633d9cc6074d5c1766ad267e2f41a31"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"570a4c9966e5ba39f667a9553fe16f7d75cab9e7","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        self.assertEqual(expecteds_set, observeds_set)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_crud_multi_provider_network(self):"},{"line_number":192,"context_line":"        if not test.is_extension_enabled(\u0027multi-provider\u0027, \u0027network\u0027):"},{"line_number":193,"context_line":"            msg \u003d \"multi-provider extension not enabled.\""},{"line_number":194,"context_line":"            raise self.skipException(msg)"},{"line_number":195,"context_line":"        if len(self.specs) \u003c 2:"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_65f7135a","line":192,"updated":"2014-09-10 23:48:29.000000000","message":"This should be a requires_ext decorator instead of this","commit_id":"439aa7348633d9cc6074d5c1766ad267e2f41a31"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"570a4c9966e5ba39f667a9553fe16f7d75cab9e7","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.admin_client.delete_network(network[\u0027id\u0027])"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_create_mono_segment_multiprovider_network(self):"},{"line_number":231,"context_line":"        if not test.is_extension_enabled(\u0027multi-provider\u0027, \u0027network\u0027):"},{"line_number":232,"context_line":"            msg \u003d \"multi-provider extension not enabled.\""},{"line_number":233,"context_line":"            raise self.skipException(msg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_a5981b1c","line":231,"updated":"2014-09-10 23:48:29.000000000","message":"This should be a requires_ext decorator instead of this","commit_id":"439aa7348633d9cc6074d5c1766ad267e2f41a31"}],"tempest/config.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"4f7393fd57ff8431b8167c3e3d9386fdb5a275d4","unresolved":false,"context_lines":[{"line_number":437,"context_line":"             \"flat provider network: set something like \u0027flat:flatnet1\u0027, \""},{"line_number":438,"context_line":"             \"vlan provider network: set something like \u0027vlan:physnet1:1000\u0027, \""},{"line_number":439,"context_line":"             \"gre provider network: set something like \u0027gre:2000\u0027, \""},{"line_number":440,"context_line":"             \"vxlan provider network: set something like \u0027vxlan:3000\u0027.\"),"},{"line_number":441,"context_line":"    cfg.ListOpt("},{"line_number":442,"context_line":"        \u0027multiprovider_network_scenario\u0027,"},{"line_number":443,"context_line":"        default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e8047115","line":440,"updated":"2014-08-04 10:39:00.000000000","message":"the documentation of this config value is too vague. I\u0027m having hard time understanding it.\n\ntempest.conf is already over complicated as it is. Please consider if you really need to add multiple config values. If you decide that you do, Please take extra effort to document it so even non-neutron devs can understand it.\n\nAt the very least, if it\u0027s too complicate, you should include a link to the relevant doc\n\nAlso - I believe that this value could be merged with \"provider_network_scenario\" to one, instead of creating 2 values for the same purpose","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"289eb6c4a0af738fec201ff3454a9269f4df4564","unresolved":false,"context_lines":[{"line_number":437,"context_line":"             \"flat provider network: set something like \u0027flat:flatnet1\u0027, \""},{"line_number":438,"context_line":"             \"vlan provider network: set something like \u0027vlan:physnet1:1000\u0027, \""},{"line_number":439,"context_line":"             \"gre provider network: set something like \u0027gre:2000\u0027, \""},{"line_number":440,"context_line":"             \"vxlan provider network: set something like \u0027vxlan:3000\u0027.\"),"},{"line_number":441,"context_line":"    cfg.ListOpt("},{"line_number":442,"context_line":"        \u0027multiprovider_network_scenario\u0027,"},{"line_number":443,"context_line":"        default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_a411875e","line":440,"in_reply_to":"baada198_e8047115","updated":"2014-08-13 14:40:13.000000000","message":"It\u0027s not possible to reuse provider_network_scenario otherwise tempest can concurrently create a provider network and try to create a multi-provider network with the same specification (segment) \u003d\u003d\u003e neutron will return a 4XX because AFAIK multi-provider plugins (ML2 and NSX) refuses to use the same segment multiple times (except local segment for ML2). So a new \"scenario\" is required or a lock between provider test classes and multi-provider test classes.","commit_id":"25fb7aff1d5ff65e7265526f7577c1f25eb8aaa2"}]}
