|
1 | | -# Copyright 2012 OpenStack LLC. |
2 | 1 | # All Rights Reserved |
3 | 2 | # |
4 | 3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may |
@@ -473,6 +472,72 @@ def test_delete_network(self): |
473 | 472 | args = [myid] |
474 | 473 | self._test_delete_resource(resource, cmd, myid, args) |
475 | 474 |
|
| 475 | + def _test_extend_list(self, mox_calls): |
| 476 | + data = [{'id': 'netid%d' % i, 'name': 'net%d' % i, |
| 477 | + 'subnets': ['mysubid%d' % i]} |
| 478 | + for i in range(0, 10)] |
| 479 | + self.mox.StubOutWithMock(self.client.httpclient, "request") |
| 480 | + path = getattr(self.client, 'subnets_path') |
| 481 | + cmd = ListNetwork(MyApp(sys.stdout), None) |
| 482 | + self.mox.StubOutWithMock(cmd, "get_client") |
| 483 | + cmd.get_client().MultipleTimes().AndReturn(self.client) |
| 484 | + mox_calls(path, data) |
| 485 | + self.mox.ReplayAll() |
| 486 | + known_args, _vs = cmd.get_parser('create_subnets').parse_known_args() |
| 487 | + cmd.extend_list(data, known_args) |
| 488 | + self.mox.VerifyAll() |
| 489 | + |
| 490 | + def _build_test_data(self, data): |
| 491 | + subnet_ids = [] |
| 492 | + response = [] |
| 493 | + filters = "" |
| 494 | + for n in data: |
| 495 | + if 'subnets' in n: |
| 496 | + subnet_ids.extend(n['subnets']) |
| 497 | + for subnet_id in n['subnets']: |
| 498 | + filters = "%s&id=%s" % (filters, subnet_id) |
| 499 | + response.append({'id': subnet_id, |
| 500 | + 'cidr': '192.168.0.0/16'}) |
| 501 | + resp_str = self.client.serialize({'subnets': response}) |
| 502 | + resp = (test_cli20.MyResp(200), resp_str) |
| 503 | + return filters, resp |
| 504 | + |
| 505 | + def test_extend_list(self): |
| 506 | + def mox_calls(path, data): |
| 507 | + filters, response = self._build_test_data(data) |
| 508 | + self.client.httpclient.request( |
| 509 | + test_cli20.end_url(path, 'fields=id&fields=cidr' + filters), |
| 510 | + 'GET', |
| 511 | + body=None, |
| 512 | + headers=ContainsKeyValue( |
| 513 | + 'X-Auth-Token', test_cli20.TOKEN)).AndReturn(response) |
| 514 | + |
| 515 | + self._test_extend_list(mox_calls) |
| 516 | + |
| 517 | + def test_extend_list_exceed_max_uri_len(self): |
| 518 | + def mox_calls(path, data): |
| 519 | + sub_data_lists = [data[:len(data) - 1], data[len(data) - 1:]] |
| 520 | + filters, response = self._build_test_data(data) |
| 521 | + # 1 char of extra URI len will cause a split in 2 requests |
| 522 | + self.client.httpclient.request( |
| 523 | + test_cli20.end_url(path, 'fields=id&fields=cidr%s' % filters), |
| 524 | + 'GET', |
| 525 | + body=None, |
| 526 | + headers=ContainsKeyValue( |
| 527 | + 'X-Auth-Token', test_cli20.TOKEN)).AndRaise( |
| 528 | + exceptions.RequestURITooLong(excess=1)) |
| 529 | + for data in sub_data_lists: |
| 530 | + filters, response = self._build_test_data(data) |
| 531 | + self.client.httpclient.request( |
| 532 | + test_cli20.end_url(path, |
| 533 | + 'fields=id&fields=cidr%s' % filters), |
| 534 | + 'GET', |
| 535 | + body=None, |
| 536 | + headers=ContainsKeyValue( |
| 537 | + 'X-Auth-Token', test_cli20.TOKEN)).AndReturn(response) |
| 538 | + |
| 539 | + self._test_extend_list(mox_calls) |
| 540 | + |
476 | 541 |
|
477 | 542 | class CLITestV20NetworkXML(CLITestV20NetworkJSON): |
478 | 543 | format = 'xml' |
0 commit comments