)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a01bf14a48cf3335f405fb472f5b9a141ba4fa20","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With upcoming IPv6 support we need to test specific"},{"line_number":10,"context_line":"DHCPv6 features that don\u0027t exist on IPv4, like"},{"line_number":11,"context_line":"SLAAC, DAD, stateless, etc. RFC: 3315, etc."},{"line_number":12,"context_line":"BP for IPv6 test effort:"},{"line_number":13,"context_line":"https://github.com/openstack/qa-specs/blob/master/"},{"line_number":14,"context_line":"specs/ipv6-api-testing-parity.rst"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa98f980_0204c8c4","line":12,"updated":"2014-09-17 19:28:56.000000000","message":"This just needs to be \u0027bp\u0027 or \u0027blueprint\u0027 followed by the bp name. For examples see:\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"56726b5dc093748f4c83cf10f782ac883fca6921","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With upcoming IPv6 support we need to test specific"},{"line_number":10,"context_line":"DHCPv6 features that don\u0027t exist on IPv4, like"},{"line_number":11,"context_line":"SLAAC, DAD, stateless, etc. RFC: 3315, etc."},{"line_number":12,"context_line":"BP for IPv6 test effort:"},{"line_number":13,"context_line":"https://github.com/openstack/qa-specs/blob/master/"},{"line_number":14,"context_line":"specs/ipv6-api-testing-parity.rst"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"fa98f980_24b8e629","line":12,"in_reply_to":"fa98f980_0204c8c4","updated":"2014-09-18 12:53:34.000000000","message":"Done","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"628cd1e0a0396c24e2ea7b86762cd71a1126cdfe","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With upcoming IPv6 support we need to test specific"},{"line_number":10,"context_line":"DHCPv6 features that don\u0027t exist on IPv4, like"},{"line_number":11,"context_line":"SLAAC, DAD, stateless, etc. RFC: 3315, etc."},{"line_number":12,"context_line":"BP for IPv6 test effort: blueprint ipv6-api-testing-parity"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I0a063e543e320ea625a5411547bce7fa2ad66b7d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"da9df570_0cfdcf3a","line":12,"updated":"2014-09-23 12:33:11.000000000","message":"Always used \"Implement blueprint:\"","commit_id":"659226a22e5040631c79ff7d3bcbcd6116edbba0"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"232daaa395659a54e0a8131cf0d670a530749247","unresolved":false,"context_lines":[{"line_number":9,"context_line":"With upcoming IPv6 support we need to test specific"},{"line_number":10,"context_line":"DHCPv6 features that don\u0027t exist on IPv4, like"},{"line_number":11,"context_line":"SLAAC, DAD, stateless, etc. RFC: 3315, etc."},{"line_number":12,"context_line":"BP for IPv6 test effort: blueprint ipv6-api-testing-parity"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I0a063e543e320ea625a5411547bce7fa2ad66b7d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"da9df570_ec840bb3","line":12,"in_reply_to":"da9df570_0cfdcf3a","updated":"2014-09-23 12:37:43.000000000","message":"Done","commit_id":"659226a22e5040631c79ff7d3bcbcd6116edbba0"}],"tempest/api/network/test_dhcp_ipv6.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a01bf14a48cf3335f405fb472f5b9a141ba4fa20","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @test.skip_because(bug\u003d\"1358297\")"},{"line_number":95,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":96,"context_line":"    def test_dhcpv6_stateless_only_ra(self):"},{"line_number":97,"context_line":"        \"\"\"When subnets configured with RAs SLAAC (AOM\u003d100) and DHCP stateless"},{"line_number":98,"context_line":"        (AOM\u003d110) for radvd and dnsmasq is not configured, port shall receive"},{"line_number":99,"context_line":"        IP address calculated from its MAC and mask advertised from RAs"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_022be833","line":96,"updated":"2014-09-17 19:28:56.000000000","message":"If this test doesn\u0027t work because of a bug we can\u0027t add it pre-skipped. You need to hold off until the bug is fixed. All new tests need to be run somewhere as part of a ci system before they can be merged.","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"56726b5dc093748f4c83cf10f782ac883fca6921","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @test.skip_because(bug\u003d\"1358297\")"},{"line_number":95,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":96,"context_line":"    def test_dhcpv6_stateless_only_ra(self):"},{"line_number":97,"context_line":"        \"\"\"When subnets configured with RAs SLAAC (AOM\u003d100) and DHCP stateless"},{"line_number":98,"context_line":"        (AOM\u003d110) for radvd and dnsmasq is not configured, port shall receive"},{"line_number":99,"context_line":"        IP address calculated from its MAC and mask advertised from RAs"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_f9576b25","line":96,"in_reply_to":"fa98f980_022be833","updated":"2014-09-18 12:53:34.000000000","message":"Done","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a01bf14a48cf3335f405fb472f5b9a141ba4fa20","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @test.skip_because(bug\u003d\"1358709\")"},{"line_number":190,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":191,"context_line":"    def test_dhcpv6_stateless_two_subnets(self):"},{"line_number":192,"context_line":"        \"\"\"When 2 subnets configured with dnsmasq SLAAC and DHCP stateless"},{"line_number":193,"context_line":"        and there is radvd, port shall receive IP addresses calculated"},{"line_number":194,"context_line":"        from its MAC and mask of subnet from both subnets."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_c2ef20e8","line":191,"updated":"2014-09-17 19:28:56.000000000","message":"Same here, to be added this test has to run. You can always add it back once the bug is fixed.","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"56726b5dc093748f4c83cf10f782ac883fca6921","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @test.skip_because(bug\u003d\"1358709\")"},{"line_number":190,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":191,"context_line":"    def test_dhcpv6_stateless_two_subnets(self):"},{"line_number":192,"context_line":"        \"\"\"When 2 subnets configured with dnsmasq SLAAC and DHCP stateless"},{"line_number":193,"context_line":"        and there is radvd, port shall receive IP addresses calculated"},{"line_number":194,"context_line":"        from its MAC and mask of subnet from both subnets."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_3952d335","line":191,"in_reply_to":"fa98f980_c2ef20e8","updated":"2014-09-18 12:53:34.000000000","message":"Done","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a01bf14a48cf3335f405fb472f5b9a141ba4fa20","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @test.skip_because(bug\u003d\"1330826\")"},{"line_number":219,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":220,"context_line":"    def test_dhcpv6_two_subnets(self):"},{"line_number":221,"context_line":"        \"\"\"When one subnet configured with dnsmasq SLAAC or DHCP stateless"},{"line_number":222,"context_line":"        and other is with DHCP stateful, port shall receive EUI-64 IP"},{"line_number":223,"context_line":"        addresses from first subnet and DHCP address from second one."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_622af42d","line":220,"updated":"2014-09-17 19:28:56.000000000","message":"Same here, to be added this test has to run. You can always add it back once the bug is fixed.","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"56726b5dc093748f4c83cf10f782ac883fca6921","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @test.skip_because(bug\u003d\"1330826\")"},{"line_number":219,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":220,"context_line":"    def test_dhcpv6_two_subnets(self):"},{"line_number":221,"context_line":"        \"\"\"When one subnet configured with dnsmasq SLAAC or DHCP stateless"},{"line_number":222,"context_line":"        and other is with DHCP stateful, port shall receive EUI-64 IP"},{"line_number":223,"context_line":"        addresses from first subnet and DHCP address from second one."}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_59307707","line":220,"in_reply_to":"fa98f980_622af42d","updated":"2014-09-18 12:53:34.000000000","message":"Done","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"a01bf14a48cf3335f405fb472f5b9a141ba4fa20","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                                            \u0027ip_address\u0027: ip}])"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def tearDown(self):"},{"line_number":392,"context_line":"        self._clean_network()"},{"line_number":393,"context_line":"        super(NetworksTestDHCPv6JSON, self).tearDown()"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_22d70c25","line":392,"updated":"2014-09-17 19:28:56.000000000","message":"This should probably be called as an addCleanup in setUp(). If a test fails this won\u0027t get run which will leave all the created resources before the failure dangling.","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"56726b5dc093748f4c83cf10f782ac883fca6921","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                                            \u0027ip_address\u0027: ip}])"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"    def tearDown(self):"},{"line_number":392,"context_line":"        self._clean_network()"},{"line_number":393,"context_line":"        super(NetworksTestDHCPv6JSON, self).tearDown()"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_243386f7","line":392,"in_reply_to":"fa98f980_22d70c25","updated":"2014-09-18 12:53:34.000000000","message":"AFAIK, tearDown runs after each test anyway - either it fails or succeeds.","commit_id":"088ab89588310a83b3f1ae3dd173a6a868dbeb6f"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"15dc60bd292ad51e483748474e9ebb99b07a6441","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException(msg)"},{"line_number":43,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _clean_network(self):"},{"line_number":46,"context_line":"        resp, body \u003d self.client.list_ports()"},{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_3c03cab9","line":45,"updated":"2014-09-22 12:23:51.000000000","message":"I think you should delete network resource explicitly using their id. This method has a broader effect and can delete more resources  than expected.\n\nOn a related note, why don\"t you rely on the default cleanup mechanism set by tearDownClass() of BaseNetworkTest ?\n\nBaseNetworkTest::tearDownClass() is there so not every class has to reimplement a cleanup strategy.","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"bc948da787c452d828c8ac5f11be80df5b97d759","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException(msg)"},{"line_number":43,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _clean_network(self):"},{"line_number":46,"context_line":"        resp, body \u003d self.client.list_ports()"},{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_52c1572d","line":45,"in_reply_to":"da9df570_3c03cab9","updated":"2014-09-22 13:27:51.000000000","message":"I use this function every CYCLE, not every test, so tearDown doesn\u0027t fit here, believe me - I\u0027ve tried all variants, including addCleanup, etc :)) And I can (and should) remove *everything* in this network only, so I can not delete anything else.  \n\nDividing tests to smaller parts to avoid cycles doesn\u0027t make sense here, because it\u0027s the same condition with same result - just multiple same tests. Unfortunately it\u0027s impossible to use \"nosetests generators\" here, because you don\u0027t run it with nosetests.  \n\nIf you have a better solution, please suggest.","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"15dc60bd292ad51e483748474e9ebb99b07a6441","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                                       port_mac).format()"},{"line_number":113,"context_line":"            self._clean_network()"},{"line_number":114,"context_line":"            self.assertEqual(eui_ip, real_ip,"},{"line_number":115,"context_line":"                             (\u0027Real port IP %s equal to EUI-64 %s when \u0027"},{"line_number":116,"context_line":"                              \u0027ipv6_ra_mode\u003d%s and ipv6_address_mode\u003d%s\u0027) % ("},{"line_number":117,"context_line":"                                 real_ip, eui_ip,"},{"line_number":118,"context_line":"                                 ra_mode if ra_mode else \"Off\","}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_7cb632de","line":115,"updated":"2014-09-22 12:23:51.000000000","message":"I like that you set explicit error message. But here, it\u0027s not explicit. What is the expected value ? What is the actual value ? In line 90 you said \"XXX shall be XXX\" which made the thing clear.","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"bc948da787c452d828c8ac5f11be80df5b97d759","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                                       port_mac).format()"},{"line_number":113,"context_line":"            self._clean_network()"},{"line_number":114,"context_line":"            self.assertEqual(eui_ip, real_ip,"},{"line_number":115,"context_line":"                             (\u0027Real port IP %s equal to EUI-64 %s when \u0027"},{"line_number":116,"context_line":"                              \u0027ipv6_ra_mode\u003d%s and ipv6_address_mode\u003d%s\u0027) % ("},{"line_number":117,"context_line":"                                 real_ip, eui_ip,"},{"line_number":118,"context_line":"                                 ra_mode if ra_mode else \"Off\","}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_b28363cb","line":115,"in_reply_to":"da9df570_7cb632de","updated":"2014-09-22 13:27:51.000000000","message":"Done","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"15dc60bd292ad51e483748474e9ebb99b07a6441","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_bce7bae3","line":122,"updated":"2014-09-22 12:23:51.000000000","message":"This is a \"negative\" test in Tempest\u0027s world. But I don\u0027t know what the core devs thing about it : should this test be moved in another file ?","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"bc948da787c452d828c8ac5f11be80df5b97d759","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_324933d1","line":122,"in_reply_to":"da9df570_bce7bae3","updated":"2014-09-22 13:27:51.000000000","message":"No objections, but does it make sense for one test?","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"68862c5159b9899a327d2cb53b5bef46e0a21baf","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException(msg)"},{"line_number":43,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _clean_network(self):"},{"line_number":46,"context_line":"        resp, body \u003d self.client.list_ports()"},{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":14,"id":"da9df570_70ad7288","line":45,"updated":"2014-09-22 14:53:22.000000000","message":"What about creating a new network every cycle ? It would add a create_network in each cycle but would remove both the definition of _clean_network and its usage.","commit_id":"2b0f7b66a9d32789687f7636ab6cbea08917d0c3"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4a3be227054632fab54e327ae83f17154a336221","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException(msg)"},{"line_number":43,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _clean_network(self):"},{"line_number":46,"context_line":"        resp, body \u003d self.client.list_ports()"},{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":14,"id":"da9df570_93f2c598","line":45,"in_reply_to":"da9df570_70ad7288","updated":"2014-09-23 09:52:45.000000000","message":"thanks, great idea! I\u0027ve rewritten this.","commit_id":"2b0f7b66a9d32789687f7636ab6cbea08917d0c3"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"68862c5159b9899a327d2cb53b5bef46e0a21baf","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"da9df570_d0bb7ec2","line":122,"updated":"2014-09-22 14:53:22.000000000","message":"You\u0027re right, it\u0027s not worth adding a seperate file.","commit_id":"2b0f7b66a9d32789687f7636ab6cbea08917d0c3"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1fc4566d144c2aa90c7cc0a88c21de952ca56593","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        real_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"},{"line_number":148,"context_line":"        eui_ip \u003d data_utils.get_ipv6_addr_by_EUI64(subnet[\u0027cidr\u0027],"},{"line_number":149,"context_line":"                                                   port_mac).format()"},{"line_number":150,"context_line":"        self._clean_network()"},{"line_number":151,"context_line":"        self.assertNotEqual(eui_ip, real_ip,"},{"line_number":152,"context_line":"                            (\u0027Real port IP %s equal to EUI-64 %s when \u0027"},{"line_number":153,"context_line":"                             \u0027ipv6_ra_mode\u003dOff and ipv6_address_mode\u003dOff,\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_431f6808","line":150,"updated":"2014-10-03 13:07:15.000000000","message":"Lines 144-150 almost equal at least in test_dhcpv6_stateless_eui64, test_dhcpv6_stateless_no_ra and test_dhcpv6_invalid_options. I suggest to move them in a separate method.","commit_id":"ce2180e6ed529fc9fc9791c6f820fd859e87fd60"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"636eee0f32bcbd64d09ac64b575d0148ae6b1d07","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        real_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"},{"line_number":148,"context_line":"        eui_ip \u003d data_utils.get_ipv6_addr_by_EUI64(subnet[\u0027cidr\u0027],"},{"line_number":149,"context_line":"                                                   port_mac).format()"},{"line_number":150,"context_line":"        self._clean_network()"},{"line_number":151,"context_line":"        self.assertNotEqual(eui_ip, real_ip,"},{"line_number":152,"context_line":"                            (\u0027Real port IP %s equal to EUI-64 %s when \u0027"},{"line_number":153,"context_line":"                             \u0027ipv6_ra_mode\u003dOff and ipv6_address_mode\u003dOff,\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_2fdf37d7","line":150,"in_reply_to":"baa201ad_431f6808","updated":"2014-10-08 22:38:43.000000000","message":"Done","commit_id":"ce2180e6ed529fc9fc9791c6f820fd859e87fd60"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1fc4566d144c2aa90c7cc0a88c21de952ca56593","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                                self.create_port,"},{"line_number":310,"context_line":"                                self.network,"},{"line_number":311,"context_line":"                                fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":312,"context_line":"                                            \u0027ip_address\u0027: ip}])"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":315,"context_line":"    def test_dhcp_stateful_fixedips_duplicate(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_a3a3b4b0","line":312,"updated":"2014-10-03 13:07:15.000000000","message":"I\u0027m not sure, but some negative tests should be auto-generated http://docs.openstack.org/developer/tempest/HACKING.html#negative-tests","commit_id":"ce2180e6ed529fc9fc9791c6f820fd859e87fd60"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"636eee0f32bcbd64d09ac64b575d0148ae6b1d07","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                                self.create_port,"},{"line_number":310,"context_line":"                                self.network,"},{"line_number":311,"context_line":"                                fixed_ips\u003d[{\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":312,"context_line":"                                            \u0027ip_address\u0027: ip}])"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":315,"context_line":"    def test_dhcp_stateful_fixedips_duplicate(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_6fc21fea","line":312,"in_reply_to":"baa201ad_a3a3b4b0","updated":"2014-10-08 22:38:43.000000000","message":"I think it doesn\u0027t make sense to get into complicated negative scenarios with separate file when we have one test only. I\u0027d suggest to wait until it\u0027ll be more tests.\nThanks for review, Ann!","commit_id":"ce2180e6ed529fc9fc9791c6f820fd859e87fd60"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2b33e620fdf8a869b604c09fde1710ecedcb08fd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    subnet_slaac[\u0027cidr\u0027],"},{"line_number":177,"context_line":"                    port_mac"},{"line_number":178,"context_line":"                ).format()"},{"line_number":179,"context_line":"                # TODO(sergsh) remove this check when 1330826 is fixed"},{"line_number":180,"context_line":"                _, body \u003d self.client.list_ports()"},{"line_number":181,"context_line":"                for dport in body[\u0027ports\u0027]:"},{"line_number":182,"context_line":"                    if (dport[\u0027device_owner\u0027] \u003d\u003d \u0027network:dhcp\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"9aa7fdbe_842b8a81","line":179,"range":{"start_line":179,"start_character":54,"end_line":179,"end_character":61},"updated":"2014-10-20 07:32:35.000000000","message":"It is fixed in mester.","commit_id":"6e5d005007f484052a018c7699f9e6a548c2ba08"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"33e913935701bfec9337f9650ed9db9b5821a75e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                self.assertTrue("},{"line_number":199,"context_line":"                    real_dhcp_ip in dhcp_ip,"},{"line_number":200,"context_line":"                    \u0027Real IP is {0}, but shall be one from {1}\u0027.format("},{"line_number":201,"context_line":"                        str(dhcp_ip)))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":204,"context_line":"    def test_dhcpv6_64_subnets(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_df4b6b29","line":201,"updated":"2014-11-12 08:57:06.000000000","message":"This test fails, seems that there should be \n\n     .format(real_dhcp_ip, str(dhcp_ip))","commit_id":"912e09681789385fd3d337574c4a4153774e135c"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"8a5790d78074cc9ed6011b0c90622fb1414f16b5","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                self.assertTrue("},{"line_number":199,"context_line":"                    real_dhcp_ip in dhcp_ip,"},{"line_number":200,"context_line":"                    \u0027Real IP is {0}, but shall be one from {1}\u0027.format("},{"line_number":201,"context_line":"                        str(dhcp_ip)))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":204,"context_line":"    def test_dhcpv6_64_subnets(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a890539_1a1b411c","line":201,"in_reply_to":"5a890539_df4b6b29","updated":"2014-11-12 09:33:44.000000000","message":"Done","commit_id":"912e09681789385fd3d337574c4a4153774e135c"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"59c56a2f08fce2dd1edeff9982e0128a790b85b9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        for router in routers:"},{"line_number":65,"context_line":"            if self.routers:"},{"line_number":66,"context_line":"                self.routers.pop()"},{"line_number":67,"context_line":"            self.client.delete_router(router[\u0027id\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _get_ips_from_subnet(self, **kwargs):"},{"line_number":70,"context_line":"        subnet \u003d self.create_subnet(self.network, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a890539_dc21a6fd","line":67,"updated":"2014-11-12 17:29:43.000000000","message":"I *think* in the case of the ironic job, this is cleaning network resources that the later ironic job relies on.  The ironic devstack deployment has some special network requirements that sometimes need to be worked around here.  I need to take a closer look to see if there is a better fix, but skipping _clean_network() if CONF.baremetal.driver_enabled may work","commit_id":"d0b3ecb7a1f70b02da860a44f10435d90a38de67"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"3eab0c0403d9fc6be255e81eac641d0acd39b022","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        for router in routers:"},{"line_number":65,"context_line":"            if self.routers:"},{"line_number":66,"context_line":"                self.routers.pop()"},{"line_number":67,"context_line":"            self.client.delete_router(router[\u0027id\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _get_ips_from_subnet(self, **kwargs):"},{"line_number":70,"context_line":"        subnet \u003d self.create_subnet(self.network, **kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a890539_11721ae5","line":67,"in_reply_to":"5a890539_dc21a6fd","updated":"2014-11-13 14:26:54.000000000","message":"Actually it should remove only routers it creates by itself. I fixed in last patch so it could remove only routers with specific names (that is set when test creates router), so nothing from shared resources could be removed.   \n\nBut it doesn\u0027t help :(\n\n\nThe worst thing I can\u0027t reproduce and therefore debug it. Where can I see the configurations of installed devstack that run your jobs?","commit_id":"d0b3ecb7a1f70b02da860a44f10435d90a38de67"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"},{"line_number":49,"context_line":"            if self.ports:"},{"line_number":50,"context_line":"                self.ports.pop()"},{"line_number":51,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:router_interface\u0027:"},{"line_number":52,"context_line":"                self.client.remove_router_interface_with_port_id("},{"line_number":53,"context_line":"                    port[\u0027device_id\u0027], port[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_16cbeb53","line":50,"updated":"2014-11-13 15:55:12.000000000","message":"This should be self.ports.remove(port) otherwise you\u0027re not actually removing the port you are acting on, and test lower level cleanup will fail to properly cleanup everything if accounting is off.   Also, perhaps the removal of the deleted port should happen after the delete_port() call succeeds.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":48,"context_line":"        for port in ports:"},{"line_number":49,"context_line":"            if self.ports:"},{"line_number":50,"context_line":"                self.ports.pop()"},{"line_number":51,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:router_interface\u0027:"},{"line_number":52,"context_line":"                self.client.remove_router_interface_with_port_id("},{"line_number":53,"context_line":"                    port[\u0027device_id\u0027], port[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_ea3d672c","line":50,"in_reply_to":"5a890539_16cbeb53","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                )"},{"line_number":55,"context_line":"            else:"},{"line_number":56,"context_line":"                self.client.delete_port(port[\u0027id\u0027])"},{"line_number":57,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_d636c351","line":57,"updated":"2014-11-13 15:55:12.000000000","message":"The list of subnets here may include any subnets shared networks.  This is the issue for ironic, which relies on a shared network setup by devstack.  Subnets are being returned here and deleted from that shared network.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                )"},{"line_number":55,"context_line":"            else:"},{"line_number":56,"context_line":"                self.client.delete_port(port[\u0027id\u0027])"},{"line_number":57,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_2a44cfb5","line":57,"in_reply_to":"5a890539_d636c351","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                self.client.delete_port(port[\u0027id\u0027])"},{"line_number":57,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"},{"line_number":61,"context_line":"                self.subnets.pop()"},{"line_number":62,"context_line":"            self.client.delete_subnet(subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_d68403d6","line":59,"updated":"2014-11-13 15:55:12.000000000","message":"You can protect against that here with something similar to:\n\n  if subnet not in self.subnet:\n       continue","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                self.client.delete_port(port[\u0027id\u0027])"},{"line_number":57,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"},{"line_number":61,"context_line":"                self.subnets.pop()"},{"line_number":62,"context_line":"            self.client.delete_subnet(subnet[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_ca27cb10","line":59,"in_reply_to":"5a890539_d68403d6","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"},{"line_number":61,"context_line":"                self.subnets.pop()"},{"line_number":62,"context_line":"            self.client.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":63,"context_line":"        resp, body \u003d self.client.list_routers()"},{"line_number":64,"context_line":"        routers \u003d body[\u0027routers\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_96619b3b","line":61,"updated":"2014-11-13 15:55:12.000000000","message":"Ditto about pop vs remove here.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        subnets \u003d body[\u0027subnets\u0027]"},{"line_number":59,"context_line":"        for subnet in subnets:"},{"line_number":60,"context_line":"            if self.subnets:"},{"line_number":61,"context_line":"                self.subnets.pop()"},{"line_number":62,"context_line":"            self.client.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":63,"context_line":"        resp, body \u003d self.client.list_routers()"},{"line_number":64,"context_line":"        routers \u003d body[\u0027routers\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_ea24870e","line":61,"in_reply_to":"5a890539_96619b3b","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for router in routers:"},{"line_number":66,"context_line":"            if router[\u0027name\u0027] \u003d\u003d self.router_name:"},{"line_number":67,"context_line":"                if self.routers:"},{"line_number":68,"context_line":"                    self.routers.pop()"},{"line_number":69,"context_line":"                self.client.delete_router(router[\u0027id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_ips_from_subnet(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_569493e1","line":68,"updated":"2014-11-13 15:55:12.000000000","message":"Ditto about pop vs remove.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for router in routers:"},{"line_number":66,"context_line":"            if router[\u0027name\u0027] \u003d\u003d self.router_name:"},{"line_number":67,"context_line":"                if self.routers:"},{"line_number":68,"context_line":"                    self.routers.pop()"},{"line_number":69,"context_line":"                self.client.delete_router(router[\u0027id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_ips_from_subnet(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_0a1e33bb","line":68,"in_reply_to":"5a890539_569493e1","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"6a9b5f4d209aed9421eea2d95608fc14f94e2ff2","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_08d3d6d6","line":122,"updated":"2014-11-13 09:42:50.000000000","message":"negative tests should be in a separate file.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4a0cf03ba39a61e75fa9774a2f20ff8beabee535","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_a67aeaee","line":122,"in_reply_to":"5a890539_08d3d6d6","updated":"2014-11-13 14:26:41.000000000","message":"yes, we discussed it in patch 17 :) \nI don\u0027t think it\u0027s worth to add a separate file for only one negative test and now there is a moratorium to negative tests at all.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_8a330361","line":122,"in_reply_to":"5a890539_576d51cb","updated":"2014-11-14 15:23:36.000000000","message":"discussed","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b627080c86274b4f2911bfd6949431ef011e91cc","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":122,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":123,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":124,"context_line":"        for ra_mode, add_mode in ("},{"line_number":125,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_576d51cb","line":122,"in_reply_to":"5a890539_a67aeaee","updated":"2014-11-14 10:43:54.000000000","message":"I saw three negative tests:test_dhcpv6_invalid_options, test_dhcp_stateful_fixedips_outrange, test_dhcp_stateful_fixedips_duplicate.","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"6a9b5f4d209aed9421eea2d95608fc14f94e2ff2","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        ):"},{"line_number":266,"context_line":"            kwargs \u003d {\u0027ipv6_ra_mode\u0027: ra_mode,"},{"line_number":267,"context_line":"                      \u0027ipv6_address_mode\u0027: add_mode}"},{"line_number":268,"context_line":"            kwargs \u003d {k: v for k, v in kwargs.iteritems() if v}"},{"line_number":269,"context_line":"            subnet \u003d self.create_subnet(self.network, **kwargs)"},{"line_number":270,"context_line":"            port \u003d self.create_port(self.network)"},{"line_number":271,"context_line":"            port_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_0bb670fa","line":268,"updated":"2014-11-13 09:42:50.000000000","message":"I don\u0027t like this creation of kwargs twice here and further. What about usage itertools? It will be something this:\n\n    keys \u003d [\u0027ipv6_ra_mode\u0027, \u0027ipv6_address_mode\u0027]\n    for vals in itertools.product((True, False), repeat\u003d2):\n        kwargs \u003d {k: \u0027dhcpv6-stateful\u0027 for k, v in zip(keys, vals) if v}\n        if not kwargs:\n            continue","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4a0cf03ba39a61e75fa9774a2f20ff8beabee535","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        ):"},{"line_number":266,"context_line":"            kwargs \u003d {\u0027ipv6_ra_mode\u0027: ra_mode,"},{"line_number":267,"context_line":"                      \u0027ipv6_address_mode\u0027: add_mode}"},{"line_number":268,"context_line":"            kwargs \u003d {k: v for k, v in kwargs.iteritems() if v}"},{"line_number":269,"context_line":"            subnet \u003d self.create_subnet(self.network, **kwargs)"},{"line_number":270,"context_line":"            port \u003d self.create_port(self.network)"},{"line_number":271,"context_line":"            port_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_91ffeaa9","line":268,"in_reply_to":"5a890539_0bb670fa","updated":"2014-11-13 14:26:41.000000000","message":"I agree that it\u0027s not so beautiful way to do it, although using itertools makes it unreadable and doesn\u0027t save much lines.\n\nNow you can just look at test and see what options are used here (like CLI or Horizon arguments), and which are not used. I\u0027d leave it as is for readability. Later, when Neutron will accept ra_mode and add_mode as None, we could get this line off (see https://bugs.launchpad.net/neutron/+bug/1363064)","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"1ff3bacc2949af43ffbad3483bf577aa4fd26f3f","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        kwargs.update({\u0027network_id\u0027: self.network[\u0027id\u0027]})"},{"line_number":364,"context_line":"        kwargs.update({\u0027cidr\u0027: cidr})"},{"line_number":365,"context_line":"        resp, body \u003d self.client.create_subnet(**kwargs)"},{"line_number":366,"context_line":"        return body[\u0027subnet\u0027]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":369,"context_line":"    def test_dhcp_stateful_router(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_59f204d3","line":366,"updated":"2014-11-13 15:55:12.000000000","message":"With the fixes to _clean_network(), we need to account for the created subnet here /w a \u0027self.subnets.append(subnet)\u0027, to ensure its properly deleted in _clean_network().","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6bc4737b9c96a1b0fca3b64d0122f65845074e21","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        kwargs.update({\u0027network_id\u0027: self.network[\u0027id\u0027]})"},{"line_number":364,"context_line":"        kwargs.update({\u0027cidr\u0027: cidr})"},{"line_number":365,"context_line":"        resp, body \u003d self.client.create_subnet(**kwargs)"},{"line_number":366,"context_line":"        return body[\u0027subnet\u0027]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":369,"context_line":"    def test_dhcp_stateful_router(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"5a890539_4a067b87","line":366,"in_reply_to":"5a890539_59f204d3","updated":"2014-11-14 15:23:36.000000000","message":"Done","commit_id":"4503836381f42d6f71c3a74c4c25749028051544"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"fa6c7693f662c997fb0682007e92f7f73921fe90","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        for index, i in enumerate(things_list):"},{"line_number":47,"context_line":"            if i[\u0027id\u0027] \u003d\u003d elem[\u0027id\u0027]:"},{"line_number":48,"context_line":"                break"},{"line_number":49,"context_line":"        del things_list[index]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _clean_network(self):"},{"line_number":52,"context_line":"        resp, body \u003d self.client.list_ports()"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a890539_adb1b490","line":49,"updated":"2014-11-14 18:08:34.000000000","message":"Minor nit: this could be expressed in-line below simply:\n\n[thing_list.remove(i) for i in thing_list if i[\u0027id\u0027] \u003d\u003d elem[\u0027id\u0027]]","commit_id":"09ae040ee300eb45b0617498e4d84b7489d3f83f"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"23f435c7319ad0c5c4626f421b4b7c21773aa349","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        for index, i in enumerate(things_list):"},{"line_number":47,"context_line":"            if i[\u0027id\u0027] \u003d\u003d elem[\u0027id\u0027]:"},{"line_number":48,"context_line":"                break"},{"line_number":49,"context_line":"        del things_list[index]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _clean_network(self):"},{"line_number":52,"context_line":"        resp, body \u003d self.client.list_ports()"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a890539_3eb88cc7","line":49,"in_reply_to":"5a890539_adb1b490","updated":"2014-11-14 19:53:06.000000000","message":"There is problem with \"remove\", because ports could change their properties from creating time to listing moment (for example status from ACTIVE to DOWN), and then you can not remove it because it\u0027s different element. So I decided to switch to \"del\" here.\n\nAnd reinitializing self.ports will not work because it\u0027s not instance variable, but class (why so???) :)","commit_id":"09ae040ee300eb45b0617498e4d84b7489d3f83f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworksTestDHCPv6JSON(base.BaseNetworkTest):"},{"line_number":29,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":30,"context_line":"    _ip_version \u003d 6"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_fb79bb2f","line":28,"updated":"2014-11-24 12:12:15.000000000","message":"please remove the JSON moniker here, we\u0027re no longer adding xml tests, so we should get out of the habbit of naming tests with JSON in them.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":25,"context_line":"CONF \u003d config.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworksTestDHCPv6JSON(base.BaseNetworkTest):"},{"line_number":29,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":30,"context_line":"    _ip_version \u003d 6"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_b67e6a68","line":28,"in_reply_to":"5a890539_fb79bb2f","updated":"2014-11-24 13:42:55.000000000","message":"Done","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworksTestDHCPv6JSON(base.BaseNetworkTest):"},{"line_number":29,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":30,"context_line":"    _ip_version \u003d 6"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_5b900f43","line":29,"updated":"2014-11-24 12:12:15.000000000","message":"It would be really good to have a class level docstring about what this class is trying to do, what resources it needs to exist to run.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NetworksTestDHCPv6JSON(base.BaseNetworkTest):"},{"line_number":29,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":30,"context_line":"    _ip_version \u003d 6"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_6af092fd","line":29,"in_reply_to":"5a890539_5b900f43","updated":"2014-11-24 13:42:55.000000000","message":"Done","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for subnet in subnets:"},{"line_number":66,"context_line":"            if subnet[\u0027id\u0027] in [s[\u0027id\u0027] for s in self.subnets]:"},{"line_number":67,"context_line":"                self.client.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":68,"context_line":"                self._remove_from_list_by_index(self.subnets, subnet)"},{"line_number":69,"context_line":"        resp, body \u003d self.client.list_routers()"},{"line_number":70,"context_line":"        routers \u003d body[\u0027routers\u0027]"},{"line_number":71,"context_line":"        for router in routers:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_7b0a2b8b","line":68,"updated":"2014-11-24 12:12:15.000000000","message":"why are we pruning the list ourselves?","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        for subnet in subnets:"},{"line_number":66,"context_line":"            if subnet[\u0027id\u0027] in [s[\u0027id\u0027] for s in self.subnets]:"},{"line_number":67,"context_line":"                self.client.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":68,"context_line":"                self._remove_from_list_by_index(self.subnets, subnet)"},{"line_number":69,"context_line":"        resp, body \u003d self.client.list_routers()"},{"line_number":70,"context_line":"        routers \u003d body[\u0027routers\u0027]"},{"line_number":71,"context_line":"        for router in routers:"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_aadb5aeb","line":68,"in_reply_to":"5a890539_7b0a2b8b","updated":"2014-11-24 13:42:55.000000000","message":"I\u0027m not sure I understand, but if it\u0027s about removing subnets: we need to remove everything from the network after each cycle in the test and after I remove it - I should clean this from self.subnets (cleanup list). The same with ports and all other cleanup lists.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                                   port_mac).format()"},{"line_number":83,"context_line":"        return real_ip, eui_ip"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":86,"context_line":"    def test_dhcpv6_stateless_eui64(self):"},{"line_number":87,"context_line":"        \"\"\"When subnets configured with RAs SLAAC (AOM\u003d100) and DHCP stateless"},{"line_number":88,"context_line":"        (AOM\u003d110) both for radvd and dnsmasq, port shall receive IP address"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_9b099786","line":85,"updated":"2014-11-24 12:12:15.000000000","message":"nothing in this file qualifies as a smoke test","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                                   port_mac).format()"},{"line_number":83,"context_line":"        return real_ip, eui_ip"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":86,"context_line":"    def test_dhcpv6_stateless_eui64(self):"},{"line_number":87,"context_line":"        \"\"\"When subnets configured with RAs SLAAC (AOM\u003d100) and DHCP stateless"},{"line_number":88,"context_line":"        (AOM\u003d110) both for radvd and dnsmasq, port shall receive IP address"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_cada6677","line":85,"in_reply_to":"5a890539_9b099786","updated":"2014-11-24 13:42:55.000000000","message":"removed all tags","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":127,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":128,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":129,"context_line":"        for ra_mode, add_mode in ("},{"line_number":130,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_5b7acff1","line":127,"updated":"2014-11-24 12:12:15.000000000","message":"this doesn\u0027t feel like it should be a tempest test, this is pretty basic state checking that should live just in neutron.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                 add_mode if add_mode else \"Off\"))"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":127,"context_line":"    def test_dhcpv6_invalid_options(self):"},{"line_number":128,"context_line":"        \"\"\"Different configurations for radvd and dnsmasq are not allowed\"\"\""},{"line_number":129,"context_line":"        for ra_mode, add_mode in ("},{"line_number":130,"context_line":"                (\u0027dhcpv6-stateless\u0027, \u0027dhcpv6-stateful\u0027),"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_0ab8ee0f","line":127,"in_reply_to":"5a890539_5b7acff1","updated":"2014-11-24 13:42:55.000000000","message":"It\u0027s actually an API test, all of them will be in neutron in the near future. But we have such tests in test_networks, all of them are basic.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"304f8b3d02e792b2777f0ef473a8e9ee12e702b7","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    subnet_slaac[\u0027cidr\u0027],"},{"line_number":184,"context_line":"                    port_mac"},{"line_number":185,"context_line":"                ).format()"},{"line_number":186,"context_line":"                # TODO(sergsh): remove this when 1219795 is fixed"},{"line_number":187,"context_line":"                dhcp_ip \u003d [dhcp_ip, (netaddr.IPAddress(dhcp_ip) + 1).format()]"},{"line_number":188,"context_line":"                port \u003d self.create_port(self.network, mac_address\u003dport_mac)"},{"line_number":189,"context_line":"                real_ips \u003d dict([(k[\u0027subnet_id\u0027], k[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_76498fb6","line":186,"updated":"2014-11-21 13:59:08.000000000","message":"Which part are you planning to remove ?","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"31fad4f78e527c6baf57b279f538e09d20d43bae","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    subnet_slaac[\u0027cidr\u0027],"},{"line_number":184,"context_line":"                    port_mac"},{"line_number":185,"context_line":"                ).format()"},{"line_number":186,"context_line":"                # TODO(sergsh): remove this when 1219795 is fixed"},{"line_number":187,"context_line":"                dhcp_ip \u003d [dhcp_ip, (netaddr.IPAddress(dhcp_ip) + 1).format()]"},{"line_number":188,"context_line":"                port \u003d self.create_port(self.network, mac_address\u003dport_mac)"},{"line_number":189,"context_line":"                real_ips \u003d dict([(k[\u0027subnet_id\u0027], k[\u0027ip_address\u0027])"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_1df94380","line":186,"in_reply_to":"5a890539_76498fb6","updated":"2014-11-21 16:18:41.000000000","message":"the line below, if we know exactly which IP to expect, it\u0027ll be unnecessary to take 2 IPs, just dhcp_ip and assert will be Equal (real_dhcp_ip, dhcp_ip)","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                                 \u0027Real IP is {0}, but shall be {1}\u0027.format("},{"line_number":203,"context_line":"                                     real_eui_ip,"},{"line_number":204,"context_line":"                                     eui_ip))"},{"line_number":205,"context_line":"                self.assertTrue("},{"line_number":206,"context_line":"                    real_dhcp_ip in dhcp_ip,"},{"line_number":207,"context_line":"                    \u0027Real IP is {0}, but shall be one from {1}\u0027.format("},{"line_number":208,"context_line":"                        real_dhcp_ip,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_7b66ab52","line":205,"updated":"2014-11-24 12:12:15.000000000","message":"Please use AssertIn instead","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                                 \u0027Real IP is {0}, but shall be {1}\u0027.format("},{"line_number":203,"context_line":"                                     real_eui_ip,"},{"line_number":204,"context_line":"                                     eui_ip))"},{"line_number":205,"context_line":"                self.assertTrue("},{"line_number":206,"context_line":"                    real_dhcp_ip in dhcp_ip,"},{"line_number":207,"context_line":"                    \u0027Real IP is {0}, but shall be one from {1}\u0027.format("},{"line_number":208,"context_line":"                        real_dhcp_ip,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_d6ddb671","line":205,"in_reply_to":"5a890539_7b66ab52","updated":"2014-11-24 13:42:55.000000000","message":"Done","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        str(dhcp_ip)))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    def test_dhcpv6_64_subnets(self):"},{"line_number":213,"context_line":"        \"\"\"When one subnet configured with dnsmasq SLAAC or DHCP stateless"},{"line_number":214,"context_line":"        and other is with DHCP of IPv4, port shall receive EUI-64 IP"},{"line_number":215,"context_line":"        addresses from first subnet and IPv4 DHCP address from second one."}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_3bdfc3d7","line":212,"updated":"2014-11-24 12:12:15.000000000","message":"It\u0027s not exceptionally clear how this test is different from the test before it.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                        str(dhcp_ip)))"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":212,"context_line":"    def test_dhcpv6_64_subnets(self):"},{"line_number":213,"context_line":"        \"\"\"When one subnet configured with dnsmasq SLAAC or DHCP stateless"},{"line_number":214,"context_line":"        and other is with DHCP of IPv4, port shall receive EUI-64 IP"},{"line_number":215,"context_line":"        addresses from first subnet and IPv4 DHCP address from second one."}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_eac48261","line":212,"in_reply_to":"5a890539_3bdfc3d7","updated":"2014-11-24 13:42:55.000000000","message":"These test involve 2 subnets - one is IPv4 and other is IPv6. The previous although tests two IPv6 subnets. Changed the description a little to reflect this.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"304f8b3d02e792b2777f0ef473a8e9ee12e702b7","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            subnet \u003d self.create_subnet(self.network, **kwargs)"},{"line_number":275,"context_line":"            port \u003d self.create_port(self.network)"},{"line_number":276,"context_line":"            port_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"},{"line_number":277,"context_line":"            dhcp_ip \u003d subnet[\"allocation_pools\"][0][\"start\"]"},{"line_number":278,"context_line":"            # TODO(sergsh): remove this when 1219795 is fixed"},{"line_number":279,"context_line":"            dhcp_ip \u003d [dhcp_ip, (netaddr.IPAddress(dhcp_ip) + 1).format()]"},{"line_number":280,"context_line":"            self._clean_network()"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_56773302","line":277,"updated":"2014-11-21 13:59:08.000000000","message":"next(iter ? \nwhy not just [0] ?","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"31fad4f78e527c6baf57b279f538e09d20d43bae","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            subnet \u003d self.create_subnet(self.network, **kwargs)"},{"line_number":275,"context_line":"            port \u003d self.create_port(self.network)"},{"line_number":276,"context_line":"            port_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"},{"line_number":277,"context_line":"            dhcp_ip \u003d subnet[\"allocation_pools\"][0][\"start\"]"},{"line_number":278,"context_line":"            # TODO(sergsh): remove this when 1219795 is fixed"},{"line_number":279,"context_line":"            dhcp_ip \u003d [dhcp_ip, (netaddr.IPAddress(dhcp_ip) + 1).format()]"},{"line_number":280,"context_line":"            self._clean_network()"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_bd666f4f","line":277,"in_reply_to":"5a890539_56773302","updated":"2014-11-21 16:18:41.000000000","message":"I think it\u0027ll be ugly exception \"out of range\" in case of no IP address, but I don\u0027t insist. :)","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            subnet \u003d self.create_subnet(self.network, **kwargs)"},{"line_number":275,"context_line":"            port \u003d self.create_port(self.network)"},{"line_number":276,"context_line":"            port_ip \u003d next(iter(port[\u0027fixed_ips\u0027]))[\u0027ip_address\u0027]"},{"line_number":277,"context_line":"            dhcp_ip \u003d subnet[\"allocation_pools\"][0][\"start\"]"},{"line_number":278,"context_line":"            # TODO(sergsh): remove this when 1219795 is fixed"},{"line_number":279,"context_line":"            dhcp_ip \u003d [dhcp_ip, (netaddr.IPAddress(dhcp_ip) + 1).format()]"},{"line_number":280,"context_line":"            self._clean_network()"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_8aadbe9d","line":277,"in_reply_to":"5a890539_56773302","updated":"2014-11-24 13:42:55.000000000","message":"changed it to next((iter), None)","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"f094b6b52559a427e967cc529da58947d02974f5","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                         fixed_ips\u003d["},{"line_number":349,"context_line":"                             {\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":350,"context_line":"                              \u0027ip_address\u0027: ip}])"},{"line_number":351,"context_line":"        self.assertRaisesRegexp(exceptions.Conflict,"},{"line_number":352,"context_line":"                                \"object with that identifier already exists\","},{"line_number":353,"context_line":"                                self.create_port,"},{"line_number":354,"context_line":"                                self.network,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_9b9c3710","line":351,"updated":"2014-11-24 12:12:15.000000000","message":"Not really clear why this is a Tempest test, shouldn\u0027t this be checked directly in Neutron?","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"6b33c46b5633e0b8b668a45c3f128285a8ef1a80","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                         fixed_ips\u003d["},{"line_number":349,"context_line":"                             {\u0027subnet_id\u0027: subnet[\u0027id\u0027],"},{"line_number":350,"context_line":"                              \u0027ip_address\u0027: ip}])"},{"line_number":351,"context_line":"        self.assertRaisesRegexp(exceptions.Conflict,"},{"line_number":352,"context_line":"                                \"object with that identifier already exists\","},{"line_number":353,"context_line":"                                self.create_port,"},{"line_number":354,"context_line":"                                self.network,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_6aadf283","line":351,"in_reply_to":"5a890539_9b9c3710","updated":"2014-11-24 13:42:55.000000000","message":"I wrote comment above about this. I\u0027d like to consider it as basic API test here. It involves a few external processes as radvd, dnsmasq. I don\u0027t think it\u0027s possible to check it in Neutron now.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7b4b15da87471dd991e76da2e7cc87cc3b7ddaf4","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class NetworksTestDHCPv6(base.BaseNetworkTest):"},{"line_number":28,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":29,"context_line":"    _ip_version \u003d 6"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\" Test DHCPv6 specific features using SLAAC, stateless and"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a961159_0ef4e4cd","line":28,"updated":"2014-12-17 13:53:45.000000000","message":"You don\u0027t really need to specify this anymore since we removed all the xml testing.","commit_id":"f0ce225d7b17579d8c90050897196d9f706e68b0"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7b4b15da87471dd991e76da2e7cc87cc3b7ddaf4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def resource_setup(cls):"},{"line_number":43,"context_line":"        msg \u003d None"},{"line_number":44,"context_line":"        if not CONF.network_feature_enabled.ipv6:"},{"line_number":45,"context_line":"            msg \u003d \"IPv6 is not enabled\""},{"line_number":46,"context_line":"        elif not CONF.network_feature_enabled.ipv6_subnet_attributes:"},{"line_number":47,"context_line":"            msg \u003d \"DHCPv6 attributes are not enabled.\""}],"source_content_type":"text/x-python","patch_set":28,"id":"3a961159_aeb4b0f2","line":44,"updated":"2014-12-17 13:53:45.000000000","message":"This can be split up per:\n\nhttp://docs.openstack.org/developer/tempest/HACKING.html#test-fixtures-and-resources\n\nfor example moving the skip conditionals into a separate method skip_checks()","commit_id":"f0ce225d7b17579d8c90050897196d9f706e68b0"}],"tempest/common/utils/data_utils.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"15dc60bd292ad51e483748474e9ebb99b07a6441","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    if is_ipv4:"},{"line_number":89,"context_line":"        msg \u003d \"Unable to generate IP address by EUI64 for IPv4 prefix\""},{"line_number":90,"context_line":"        raise TypeError(msg)"},{"line_number":91,"context_line":"    try:"},{"line_number":92,"context_line":"        eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":93,"context_line":"        prefix \u003d netaddr.IPNetwork(cidr)"},{"line_number":94,"context_line":"        return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_fcdce276","line":91,"updated":"2014-09-22 12:23:51.000000000","message":"This block has 3 lines of code that could raise some exceptions. Maybe it would be better, for code maintainability, if you split these 3 lines in maybe 2 or 3 try/except blocks.\n\nI am saying this because the netaddr has several classes, some are not well known. It will be easier to debug if the stack trace shows the exact line that raise the exception.","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"bc948da787c452d828c8ac5f11be80df5b97d759","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    if is_ipv4:"},{"line_number":89,"context_line":"        msg \u003d \"Unable to generate IP address by EUI64 for IPv4 prefix\""},{"line_number":90,"context_line":"        raise TypeError(msg)"},{"line_number":91,"context_line":"    try:"},{"line_number":92,"context_line":"        eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":93,"context_line":"        prefix \u003d netaddr.IPNetwork(cidr)"},{"line_number":94,"context_line":"        return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9df570_b2dd2345","line":91,"in_reply_to":"da9df570_fcdce276","updated":"2014-09-22 13:27:51.000000000","message":"This code is from neutron, I don\u0027t want to touch it at all. I think it should be unified later with neutron (via oslo or any other \"common thing\") and it\u0027ll be one function. I\u0027d leave it as is for compatibility and standard.","commit_id":"2cf0010de9473fe32bcfb9306e4291b87f0f33e6"},{"author":{"_account_id":13753,"name":"Andrey Alekov","email":"aalekov@cisco.com","username":"aalekov"},"change_message_id":"a3fe7900b209c2690232fc52336e9b11f0931f72","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    # Check if the prefix is IPv4 address"},{"line_number":87,"context_line":"    is_ipv4 \u003d netaddr.valid_ipv4(cidr)"},{"line_number":88,"context_line":"    if is_ipv4:"},{"line_number":89,"context_line":"        msg \u003d \"Unable to generate IP address by EUI64 for IPv4 prefix\""},{"line_number":90,"context_line":"        raise TypeError(msg)"},{"line_number":91,"context_line":"    try:"},{"line_number":92,"context_line":"        eui64 \u003d int(netaddr.EUI(mac).eui64())"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_cc1b957e","line":89,"updated":"2014-11-21 12:32:33.000000000","message":"msg variable here is no needed.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"31fad4f78e527c6baf57b279f538e09d20d43bae","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    # Check if the prefix is IPv4 address"},{"line_number":87,"context_line":"    is_ipv4 \u003d netaddr.valid_ipv4(cidr)"},{"line_number":88,"context_line":"    if is_ipv4:"},{"line_number":89,"context_line":"        msg \u003d \"Unable to generate IP address by EUI64 for IPv4 prefix\""},{"line_number":90,"context_line":"        raise TypeError(msg)"},{"line_number":91,"context_line":"    try:"},{"line_number":92,"context_line":"        eui64 \u003d int(netaddr.EUI(mac).eui64())"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a890539_5d4bcbb0","line":89,"in_reply_to":"5a890539_cc1b957e","updated":"2014-11-21 16:18:41.000000000","message":"I\u0027d like to leave it untouched, as I it was copied from neutron.","commit_id":"3313cbf43938dd20e99b84288bfb607a0db4acbd"}]}
