Coverage for manila/tests/api/v2/test_share_networks.py: 99%

769 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2026-02-18 22:19 +0000

1# Copyright 2014 NetApp 

2# All Rights Reserved. 

3# 

4# Licensed under the Apache License, Version 2.0 (the "License"); you may 

5# not use this file except in compliance with the License. You may obtain 

6# a copy of the License at 

7# 

8# http://www.apache.org/licenses/LICENSE-2.0 

9# 

10# Unless required by applicable law or agreed to in writing, software 

11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 

12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 

13# License for the specific language governing permissions and limitations 

14# under the License. 

15 

16import copy 

17from unittest import mock 

18from urllib import parse 

19 

20import ddt 

21from oslo_db import exception as db_exception 

22from oslo_utils import timeutils 

23from webob import exc as webob_exc 

24 

25from manila.api import common 

26from manila.api.openstack import api_version_request as api_version 

27from manila.api.v2 import share_networks 

28from manila.db import api as db_api 

29from manila import exception 

30from manila import quota 

31from manila.share import api as share_api 

32from manila import test 

33from manila.tests.api import fakes 

34from manila.tests import db_utils 

35 

36 

37fake_share_network_subnet = { 

38 'id': 'fake subnet id', 

39 'neutron_net_id': 'fake net id', 

40 'neutron_subnet_id': 'fake subnet id', 

41 'network_type': 'vlan', 

42 'segmentation_id': 1000, 

43 'cidr': '10.0.0.0/24', 

44 'ip_version': 4, 

45 'share_network_id': 'fake network id', 

46 'availability_zone_id': None, 

47 'share_servers': [], 

48 'availability_zone': [] 

49} 

50 

51fake_share_network = { 

52 'id': 'fake network id', 

53 'project_id': 'fake project', 

54 'created_at': timeutils.parse_strtime('2002-02-02', fmt="%Y-%m-%d"), 

55 'updated_at': None, 

56 'name': 'fake name', 

57 'description': 'fake description', 

58 'security_services': [], 

59 'share_network_subnets': [], 

60 'security_service_update_support': True, 

61 'status': 'active' 

62} 

63 

64 

65fake_share_network_shortened = { 

66 'id': 'fake network id', 

67 'name': 'fake name', 

68} 

69 

70fake_share_network_with_ss = { 

71 'id': 'sn-id', 

72 'project_id': 'fake', 

73 'created_at': timeutils.parse_strtime('2001-01-01', fmt="%Y-%m-%d"), 

74 'updated_at': None, 

75 'name': 'test-sn', 

76 'description': 'fake description', 

77 'share_network_subnets': [], 

78 'security_services': [{'id': 'fake-ss-id'}] 

79} 

80 

81fake_sn_with_ss_shortened = { 

82 'id': 'sn-id', 

83 'name': 'test-sn', 

84} 

85 

86ADD_UPDATE_SEC_SERVICE_VERSION = '2.63' 

87 

88QUOTAS = quota.QUOTAS 

89 

90 

91@ddt.ddt 

92class ShareNetworkAPITest(test.TestCase): 

93 

94 def setUp(self): 

95 super(ShareNetworkAPITest, self).setUp() 

96 self.controller = share_networks.ShareNetworkController() 

97 self.req = fakes.HTTPRequest.blank('/share-networks') 

98 self.body = {share_networks.RESOURCE_NAME: {'name': 'fake name'}} 

99 self.context = self.req.environ['manila.context'] 

100 self.share_api = share_api.API() 

101 

102 def _check_share_network_view_shortened(self, view, share_nw): 

103 self.assertEqual(share_nw['id'], view['id']) 

104 self.assertEqual(share_nw['name'], view['name']) 

105 

106 def _check_share_network_view(self, view, share_nw): 

107 self.assertEqual(share_nw['id'], view['id']) 

108 self.assertEqual(share_nw['project_id'], view['project_id']) 

109 self.assertEqual(share_nw['created_at'], view['created_at']) 

110 self.assertEqual(share_nw['updated_at'], view['updated_at']) 

111 self.assertEqual(share_nw['name'], view['name']) 

112 self.assertEqual(share_nw['description'], view['description']) 

113 self.assertNotIn('shares', view) 

114 self.assertNotIn('network_allocations', view) 

115 self.assertNotIn('security_services', view) 

116 

117 def _setup_body_for_create_test(self, data): 

118 data.update({'user_id': 'fake_user_id'}) 

119 body = {share_networks.RESOURCE_NAME: data} 

120 return body 

121 

122 @ddt.data( 

123 {'neutron_net_id': 'fake', 'neutron_subnet_id': 'fake'}) 

124 def test_create_valid_cases(self, data): 

125 body = self._setup_body_for_create_test(data) 

126 result = self.controller.create(self.req, body) 

127 data.pop('user_id', None) 

128 for k, v in data.items(): 

129 self.assertIn(data[k], result['share_network'][k]) 

130 

131 @ddt.data( 

132 {'neutron_net_id': 'fake', 'neutron_subnet_id': 'fake', 

133 'availability_zone': 'fake'}) 

134 def test_create_valid_cases_upper_2_50(self, data): 

135 req = fakes.HTTPRequest.blank('/share-networks', version="2.51") 

136 context = req.environ['manila.context'] 

137 body = self._setup_body_for_create_test(data) 

138 fake_az = { 

139 'name': 'fake', 

140 'id': 'fake_id' 

141 } 

142 self.mock_object(db_api, 'availability_zone_get', 

143 mock.Mock(return_value=fake_az)) 

144 

145 result = self.controller.create(req, body) 

146 result_subnet = result['share_network']['share_network_subnets'][0] 

147 data.pop('user_id', None) 

148 data.pop('project_id', None) 

149 data.pop('availability_zone_id', None) 

150 data.pop('id', None) 

151 data['availability_zone'] = result_subnet['availability_zone'] 

152 

153 for k, v in data.items(): 

154 self.assertIn(k, result_subnet.keys()) 

155 

156 db_api.availability_zone_get.assert_called_once_with( 

157 context, fake_az['name'] 

158 ) 

159 

160 @ddt.data( 

161 {'nova_net_id': 'foo', 'neutron_net_id': 'bar'}, 

162 {'nova_net_id': 'foo', 'neutron_subnet_id': 'quuz'}, 

163 {'nova_net_id': 'foo', 'neutron_net_id': 'bar', 

164 'neutron_subnet_id': 'quuz'}, 

165 {'nova_net_id': 'fake_nova_net_id'}, 

166 {'neutron_net_id': 'bar'}, 

167 {'neutron_subnet_id': 'quuz'}) 

168 def test_create_invalid_cases(self, data): 

169 data.update({'user_id': 'fake_user_id'}) 

170 body = {share_networks.RESOURCE_NAME: data} 

171 self.assertRaises( 

172 webob_exc.HTTPBadRequest, self.controller.create, self.req, body) 

173 

174 @ddt.data( 

175 {'name': 'new fake name'}, 

176 {'description': 'new fake description'}, 

177 {'name': 'new fake name', 'description': 'new fake description'}) 

178 def test_update_valid_cases(self, data): 

179 body = {share_networks.RESOURCE_NAME: {'user_id': 'fake_user'}} 

180 created = self.controller.create(self.req, body) 

181 

182 body = {share_networks.RESOURCE_NAME: data} 

183 result = self.controller.update( 

184 self.req, created['share_network']['id'], body) 

185 

186 for k, v in data.items(): 

187 self.assertIn(data[k], result['share_network'][k]) 

188 

189 self._check_share_network_view( 

190 result[share_networks.RESOURCE_NAME], 

191 result['share_network']) 

192 

193 @ddt.data( 

194 {'nova_net_id': 'foo', 'neutron_net_id': 'bar'}, 

195 {'nova_net_id': 'foo', 'neutron_subnet_id': 'quuz'}, 

196 {'nova_net_id': 'foo', 'neutron_net_id': 'bar', 

197 'neutron_subnet_id': 'quuz'}, 

198 {'nova_net_id': 'fake_nova_net_id'}, 

199 ) 

200 def test_update_invalid_cases(self, data): 

201 body = {share_networks.RESOURCE_NAME: {'user_id': 'fake_user'}} 

202 created = self.controller.create(self.req, body) 

203 body = {share_networks.RESOURCE_NAME: data} 

204 self.assertRaises( 

205 webob_exc.HTTPBadRequest, 

206 self.controller.update, 

207 self.req, created['share_network']['id'], body) 

208 

209 @ddt.data( 

210 ({'share_network_subnets': [ 

211 {'share_network_id': fake_share_network['id']}]}, True), 

212 ({'share_network_subnets': []}, False)) 

213 @ddt.unpack 

214 def test__subnet_has_search_opt(self, network, has_search_opt): 

215 search_opts = { 

216 'share_network_id': fake_share_network['id'] 

217 } 

218 

219 result = None 

220 

221 for key, value in search_opts.items(): 

222 result = self.controller._subnet_has_search_opt( 

223 key, value, network) 

224 

225 self.assertEqual(has_search_opt, result) 

226 

227 def test_create_nominal(self): 

228 self.mock_object(db_api, 'share_network_subnet_create') 

229 self.mock_object(db_api, 'share_network_get', 

230 mock.Mock(return_value=fake_share_network)) 

231 self.mock_object(common, 'check_net_id_and_subnet_id') 

232 with mock.patch.object(db_api, 

233 'share_network_create', 

234 mock.Mock(return_value=fake_share_network)): 

235 

236 result = self.controller.create(self.req, self.body) 

237 

238 db_api.share_network_create.assert_called_once_with( 

239 self.req.environ['manila.context'], 

240 self.body[share_networks.RESOURCE_NAME]) 

241 

242 self._check_share_network_view( 

243 result[share_networks.RESOURCE_NAME], 

244 fake_share_network) 

245 

246 def test_create_db_api_exception(self): 

247 with mock.patch.object(db_api, 

248 'share_network_create', 

249 mock.Mock(side_effect=db_exception.DBError)): 

250 self.assertRaises(webob_exc.HTTPInternalServerError, 

251 self.controller.create, 

252 self.req, 

253 self.body) 

254 

255 def test_create_wrong_body(self): 

256 body = None 

257 self.assertRaises(webob_exc.HTTPUnprocessableEntity, 

258 self.controller.create, 

259 self.req, 

260 body) 

261 

262 @ddt.data( 

263 {'availability_zone': 'fake-zone'}) 

264 def test_create_az_not_found(self, data): 

265 req = fakes.HTTPRequest.blank('/share-networks', version="2.51") 

266 

267 self.mock_object( 

268 db_api, 'availability_zone_get', 

269 mock.Mock( 

270 side_effect=exception.AvailabilityZoneNotFound(id='fake'))) 

271 

272 body = {share_networks.RESOURCE_NAME: data} 

273 

274 self.assertRaises(webob_exc.HTTPBadRequest, 

275 self.controller.create, 

276 req, 

277 body) 

278 

279 def test_create_error_on_network_creation(self): 

280 self.mock_object(share_networks.QUOTAS, 'reserve', 

281 mock.Mock(return_value='fake_reservation')) 

282 self.mock_object(share_networks.QUOTAS, 'rollback') 

283 self.mock_object(db_api, 'share_network_create', 

284 mock.Mock(side_effect=db_exception.DBError())) 

285 

286 self.assertRaises(webob_exc.HTTPInternalServerError, 

287 self.controller.create, 

288 self.req, 

289 self.body) 

290 self.assertTrue(share_networks.QUOTAS.rollback.called) 

291 

292 def test_create_error_on_subnet_creation(self): 

293 data = { 

294 'neutron_net_id': 'fake', 

295 'neutron_subnet_id': 'fake', 

296 'id': fake_share_network['id'] 

297 } 

298 subnet_data = copy.deepcopy(data) 

299 self.mock_object(share_networks.QUOTAS, 'reserve', 

300 mock.Mock(return_value='fake_reservation')) 

301 self.mock_object(share_networks.QUOTAS, 'rollback') 

302 self.mock_object(db_api, 'share_network_create', 

303 mock.Mock(return_value=fake_share_network)) 

304 self.mock_object(db_api, 'share_network_subnet_create', 

305 mock.Mock(side_effect=db_exception.DBError())) 

306 self.mock_object(db_api, 'share_network_delete') 

307 body = {share_networks.RESOURCE_NAME: data} 

308 

309 self.assertRaises(webob_exc.HTTPInternalServerError, 

310 self.controller.create, 

311 self.req, 

312 body) 

313 

314 db_api.share_network_create.assert_called_once_with(self.context, data) 

315 subnet_data['share_network_id'] = data['id'] 

316 subnet_data.pop('id') 

317 db_api.share_network_subnet_create.assert_called_once_with( 

318 self.context, subnet_data) 

319 db_api.share_network_delete.assert_called_once_with( 

320 self.context, fake_share_network['id']) 

321 self.assertTrue(share_networks.QUOTAS.rollback.called) 

322 

323 def test_delete_nominal(self): 

324 share_nw = fake_share_network.copy() 

325 subnet = fake_share_network_subnet.copy() 

326 subnet['share_servers'] = ['foo', 'bar'] 

327 share_nw['share_network_subnets'] = [subnet] 

328 self.mock_object(db_api, 'share_network_get', 

329 mock.Mock(return_value=share_nw)) 

330 self.mock_object(db_api, 'share_instance_get_all_by_share_network', 

331 mock.Mock(return_value=[])) 

332 self.mock_object(self.controller.share_rpcapi, 'delete_share_server') 

333 self.mock_object(self.controller, 

334 '_all_share_servers_are_auto_deletable', 

335 mock.Mock(return_value=True)) 

336 self.mock_object(db_api, 'share_network_delete') 

337 

338 self.controller.delete(self.req, share_nw['id']) 

339 

340 db_api.share_network_get.assert_called_once_with( 

341 self.req.environ['manila.context'], share_nw['id']) 

342 (db_api.share_instance_get_all_by_share_network. 

343 assert_called_once_with(self.req.environ['manila.context'], 

344 share_nw['id'])) 

345 self.controller.share_rpcapi.delete_share_server.assert_has_calls([ 

346 mock.call(self.req.environ['manila.context'], 'foo'), 

347 mock.call(self.req.environ['manila.context'], 'bar')]) 

348 db_api.share_network_delete.assert_called_once_with( 

349 self.req.environ['manila.context'], share_nw['id']) 

350 

351 def test_delete_not_found(self): 

352 share_nw = 'fake network id' 

353 self.mock_object(db_api, 'share_network_get', 

354 mock.Mock(side_effect=exception.ShareNetworkNotFound( 

355 share_network_id=share_nw))) 

356 

357 self.assertRaises(webob_exc.HTTPNotFound, 

358 self.controller.delete, 

359 self.req, 

360 share_nw) 

361 

362 def test_quota_delete_reservation_failed(self): 

363 share_nw = fake_share_network.copy() 

364 subnet = fake_share_network_subnet.copy() 

365 subnet['share_servers'] = ['foo', 'bar'] 

366 share_nw['share_network_subnets'] = [subnet] 

367 share_nw['user_id'] = 'fake_user_id' 

368 

369 self.mock_object(db_api, 'share_network_get', 

370 mock.Mock(return_value=share_nw)) 

371 self.mock_object(db_api, 'share_instance_get_all_by_share_network', 

372 mock.Mock(return_value=[])) 

373 self.mock_object(self.controller, 

374 '_all_share_servers_are_auto_deletable', 

375 mock.Mock(return_value=True)) 

376 self.mock_object(self.controller.share_rpcapi, 'delete_share_server') 

377 self.mock_object(db_api, 'share_network_delete') 

378 self.mock_object(share_networks.QUOTAS, 'reserve', 

379 mock.Mock(side_effect=Exception)) 

380 self.mock_object(share_networks.QUOTAS, 'commit') 

381 

382 self.controller.delete(self.req, share_nw['id']) 

383 

384 db_api.share_network_get.assert_called_once_with( 

385 self.req.environ['manila.context'], share_nw['id']) 

386 

387 (db_api.share_instance_get_all_by_share_network. 

388 assert_called_once_with(self.req.environ['manila.context'], 

389 share_nw['id'])) 

390 

391 self.controller.share_rpcapi.delete_share_server.assert_has_calls([ 

392 mock.call(self.req.environ['manila.context'], 'foo'), 

393 mock.call(self.req.environ['manila.context'], 'bar')]) 

394 db_api.share_network_delete.assert_called_once_with( 

395 self.req.environ['manila.context'], share_nw['id']) 

396 share_networks.QUOTAS.reserve.assert_called_once_with( 

397 self.req.environ['manila.context'], 

398 project_id=share_nw['project_id'], 

399 share_networks=-1, 

400 user_id=share_nw['user_id'] 

401 ) 

402 self.assertFalse(share_networks.QUOTAS.commit.called) 

403 

404 def test_delete_in_use_by_share(self): 

405 share_nw = fake_share_network.copy() 

406 self.mock_object(db_api, 'share_network_get', 

407 mock.Mock(return_value=share_nw)) 

408 self.mock_object(db_api, 'share_instance_get_all_by_share_network', 

409 mock.Mock(return_value=['foo', 'bar'])) 

410 

411 self.assertRaises(webob_exc.HTTPConflict, 

412 self.controller.delete, 

413 self.req, 

414 share_nw['id']) 

415 

416 db_api.share_network_get.assert_called_once_with( 

417 self.req.environ['manila.context'], share_nw['id']) 

418 (db_api.share_instance_get_all_by_share_network. 

419 assert_called_once_with(self.req.environ['manila.context'], 

420 share_nw['id'])) 

421 

422 def test_delete_in_use_by_share_group(self): 

423 share_nw = fake_share_network.copy() 

424 self.mock_object(db_api, 'share_network_get', 

425 mock.Mock(return_value=share_nw)) 

426 self.mock_object(db_api, 'count_share_groups_in_share_network', 

427 mock.Mock(return_value=2)) 

428 

429 self.assertRaises(webob_exc.HTTPConflict, 

430 self.controller.delete, 

431 self.req, 

432 share_nw['id']) 

433 

434 db_api.share_network_get.assert_called_once_with( 

435 self.req.environ['manila.context'], share_nw['id']) 

436 

437 def test_delete_contains_is_auto_deletable_false_servers(self): 

438 share_nw = fake_share_network.copy() 

439 self.mock_object(db_api, 'share_network_get', 

440 mock.Mock(return_value=share_nw)) 

441 self.mock_object(db_api, 'count_share_groups_in_share_network') 

442 self.mock_object(share_networks.ShareNetworkController, 

443 '_all_share_servers_are_auto_deletable', 

444 mock.Mock(return_value=False)) 

445 

446 self.assertRaises(webob_exc.HTTPConflict, 

447 self.controller.delete, 

448 self.req, 

449 share_nw['id']) 

450 

451 db_api.share_network_get.assert_called_once_with( 

452 self.req.environ['manila.context'], share_nw['id']) 

453 

454 def test_delete_contains_more_than_one_subnet(self): 

455 share_nw = fake_share_network.copy() 

456 self.mock_object(db_api, 'share_network_get', 

457 mock.Mock(return_value=share_nw)) 

458 self.mock_object(db_api, 'share_instance_get_all_by_share_network', 

459 mock.Mock(return_value=None)) 

460 self.mock_object(db_api, 'count_share_groups_in_share_network', 

461 mock.Mock(return_value=None)) 

462 self.mock_object(self.controller, '_share_network_contains_subnets', 

463 mock.Mock(return_value=True)) 

464 

465 self.assertRaises(webob_exc.HTTPConflict, 

466 self.controller.delete, 

467 self.req, 

468 share_nw['id']) 

469 

470 db_api.share_network_get.assert_called_once_with( 

471 self.context, share_nw['id']) 

472 (db_api.share_instance_get_all_by_share_network 

473 .assert_called_once_with(self.context, share_nw['id'])) 

474 db_api.count_share_groups_in_share_network.assert_called_once_with( 

475 self.context, share_nw['id'] 

476 ) 

477 (self.controller._share_network_contains_subnets 

478 .assert_called_once_with(share_nw)) 

479 

480 def test_delete_subnet_contains_share_server(self): 

481 share_nw = fake_share_network.copy() 

482 share_nw['share_network_subnets'].append({ 

483 'id': 'fake_sns_id', 

484 'share_servers': [{'id': 'fake_share_server_id'}] 

485 }) 

486 self.mock_object(db_api, 'share_network_get', 

487 mock.Mock(return_value=share_nw)) 

488 self.mock_object(db_api, 'count_share_groups_in_share_network', 

489 mock.Mock(return_value=0)) 

490 self.mock_object(self.controller, '_share_network_contains_subnets', 

491 mock.Mock(return_value=False)) 

492 self.mock_object( 

493 self.controller, '_all_share_servers_are_auto_deletable', 

494 mock.Mock(return_value=False)) 

495 

496 self.assertRaises(webob_exc.HTTPConflict, 

497 self.controller.delete, 

498 self.req, 

499 share_nw['id']) 

500 

501 @ddt.data( 

502 ({'share_servers': [{'is_auto_deletable': True}, 

503 {'is_auto_deletable': True}]}, True), 

504 ({'share_servers': [{'is_auto_deletable': True}, 

505 {'is_auto_deletable': False}]}, False), 

506 ) 

507 @ddt.unpack 

508 def test__share_servers_are_auto_deletable(self, fake_share_network, 

509 expected_result): 

510 self.assertEqual( 

511 expected_result, 

512 self.controller._all_share_servers_are_auto_deletable( 

513 fake_share_network)) 

514 

515 @ddt.data( 

516 ({'share_network_subnets': [{'share_servers': [{}, {}]}]}, True), 

517 ({'share_network_subnets': [{'share_servers': []}]}, False), 

518 ) 

519 @ddt.unpack 

520 def test__share_network_subnets_contain_share_servers(self, share_network, 

521 expected_result): 

522 self.assertEqual( 

523 expected_result, 

524 self.controller._share_network_subnets_contain_share_servers( 

525 share_network)) 

526 

527 def test_show_nominal(self): 

528 share_nw = 'fake network id' 

529 with mock.patch.object(db_api, 

530 'share_network_get', 

531 mock.Mock(return_value=fake_share_network)): 

532 result = self.controller.show(self.req, share_nw) 

533 

534 db_api.share_network_get.assert_called_once_with( 

535 self.req.environ['manila.context'], 

536 share_nw) 

537 

538 self._check_share_network_view( 

539 result[share_networks.RESOURCE_NAME], 

540 fake_share_network) 

541 

542 def test_show_not_found(self): 

543 share_nw = 'fake network id' 

544 test_exception = exception.ShareNetworkNotFound( 

545 share_network_id=share_nw) 

546 with mock.patch.object(db_api, 

547 'share_network_get', 

548 mock.Mock(side_effect=test_exception)): 

549 self.assertRaises(webob_exc.HTTPNotFound, 

550 self.controller.show, 

551 self.req, 

552 share_nw) 

553 

554 def test_index_no_filters(self): 

555 networks = [fake_share_network] 

556 with mock.patch.object(db_api, 

557 'share_network_get_all_by_filter', 

558 mock.Mock(return_value=networks)): 

559 

560 result = self.controller.index(self.req) 

561 

562 db_api.share_network_get_all_by_filter.assert_called_once_with( 

563 self.context, filters={}) 

564 

565 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

566 self._check_share_network_view_shortened( 

567 result[share_networks.RESOURCES_NAME][0], 

568 fake_share_network_shortened) 

569 

570 def test_index_detailed(self): 

571 networks = [fake_share_network] 

572 with mock.patch.object(db_api, 

573 'share_network_get_all_by_filter', 

574 mock.Mock(return_value=networks)): 

575 

576 result = self.controller.detail(self.req) 

577 

578 db_api.share_network_get_all_by_filter.assert_called_once_with( 

579 self.context, filters={}) 

580 

581 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

582 self._check_share_network_view( 

583 result[share_networks.RESOURCES_NAME][0], 

584 fake_share_network) 

585 

586 @mock.patch.object(db_api, 'share_network_get_all_by_filter', 

587 mock.Mock()) 

588 def test_index_filter_by_security_service(self): 

589 db_api.share_network_get_all_by_filter.return_value = [ 

590 fake_share_network_with_ss] 

591 req = fakes.HTTPRequest.blank( 

592 '/share_networks?security_service_id=fake-ss-id') 

593 result = self.controller.index(req) 

594 filters = {'security_service_id': 'fake-ss-id'} 

595 (db_api.share_network_get_all_by_filter. 

596 assert_called_once_with(req.environ['manila.context'], 

597 filters=filters)) 

598 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

599 self._check_share_network_view_shortened( 

600 result[share_networks.RESOURCES_NAME][0], 

601 fake_sn_with_ss_shortened) 

602 

603 @mock.patch.object(db_api, 'share_network_get_all_by_filter', mock.Mock()) 

604 def test_index_all_tenants_non_admin_context(self): 

605 req = fakes.HTTPRequest.blank( 

606 '/share_networks?all_tenants=1') 

607 fake_context = req.environ['manila.context'] 

608 db_api.share_network_get_all_by_filter.return_value = [] 

609 self.controller.index(req) 

610 db_api.share_network_get_all_by_filter.assert_called_with( 

611 fake_context, filters={}) 

612 

613 @mock.patch.object(db_api, 'share_network_get_all_by_filter', mock.Mock()) 

614 def test_index_all_tenants_admin_context(self): 

615 db_api.share_network_get_all_by_filter.return_value = [ 

616 fake_share_network] 

617 req = fakes.HTTPRequest.blank( 

618 '/share_networks?all_tenants=1', 

619 use_admin_context=True) 

620 result = self.controller.index(req) 

621 db_api.share_network_get_all_by_filter.assert_called_once_with( 

622 req.environ['manila.context'], filters={}) 

623 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

624 self._check_share_network_view_shortened( 

625 result[share_networks.RESOURCES_NAME][0], 

626 fake_share_network_shortened) 

627 

628 @mock.patch.object(db_api, 'share_network_get_all', mock.Mock()) 

629 def test_index_all_tenants_with_invaild_value(self): 

630 req = fakes.HTTPRequest.blank( 

631 '/share_networks?all_tenants=wonk', 

632 use_admin_context=True) 

633 

634 self.assertRaises(exception.InvalidInput, self.controller.index, req) 

635 

636 @mock.patch.object(db_api, 'share_network_get_all_by_filter', mock.Mock()) 

637 def test_index_all_tenants_with_value_zero(self): 

638 db_api.share_network_get_all_by_filter.return_value = [ 

639 fake_share_network] 

640 req = fakes.HTTPRequest.blank( 

641 '/share_networks?all_tenants=0', 

642 use_admin_context=True) 

643 

644 result = self.controller.index(req) 

645 

646 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

647 self._check_share_network_view_shortened( 

648 result[share_networks.RESOURCES_NAME][0], 

649 fake_share_network_shortened) 

650 filters = {'project_id': 'fake'} 

651 db_api.share_network_get_all_by_filter.assert_called_once_with( 

652 req.environ['manila.context'], filters=filters) 

653 

654 @mock.patch.object(db_api, 'share_network_get_all_by_filter', mock.Mock()) 

655 def test_index_filter_by_project_id_non_admin_context(self): 

656 req = fakes.HTTPRequest.blank( 

657 '/share_networks?project_id=fake project') 

658 fake_context = req.environ['manila.context'] 

659 db_api.share_network_get_all_by_filter.return_value = [] 

660 self.controller.index(req) 

661 db_api.share_network_get_all_by_filter.assert_called_with( 

662 fake_context, filters={}) 

663 

664 @mock.patch.object(db_api, 'share_network_get_all_by_filter', mock.Mock()) 

665 def test_index_filter_by_project_id_admin_context(self): 

666 db_api.share_network_get_all_by_filter.return_value = [ 

667 fake_share_network_with_ss 

668 ] 

669 req = fakes.HTTPRequest.blank( 

670 '/share_networks?project_id=fake', 

671 use_admin_context=True) 

672 result = self.controller.index(req) 

673 filters = {'project_id': 'fake'} 

674 db_api.share_network_get_all_by_filter.assert_called_once_with( 

675 req.environ['manila.context'], filters=filters) 

676 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

677 self._check_share_network_view_shortened( 

678 result[share_networks.RESOURCES_NAME][0], 

679 fake_sn_with_ss_shortened) 

680 

681 @mock.patch.object(db_api, 'share_network_get_all_by_filter', 

682 mock.Mock()) 

683 def test_index_filter_by_ss_and_project_id_admin_context(self): 

684 db_api.share_network_get_all_by_filter.return_value = [ 

685 fake_share_network_with_ss 

686 ] 

687 req = fakes.HTTPRequest.blank( 

688 '/share_networks?security_service_id=fake-ss-id&project_id=fake', 

689 use_admin_context=True) 

690 result = self.controller.index(req) 

691 filters = {'project_id': 'fake', 

692 'security_service_id': 'fake-ss-id'} 

693 db_api.share_network_get_all_by_filter.assert_called_once_with( 

694 req.environ['manila.context'], filters=filters) 

695 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

696 self._check_share_network_view_shortened( 

697 result[share_networks.RESOURCES_NAME][0], 

698 fake_sn_with_ss_shortened) 

699 

700 @ddt.data(('name=fo', 0), ('description=d', 0), 

701 ('name=foo&description=d', 0), 

702 ('name=foo', 1), ('description=ds', 1), 

703 ('name~=foo&description~=ds', 2), 

704 ('name=foo&description~=ds', 1), 

705 ('name~=foo&description=ds', 1)) 

706 @ddt.unpack 

707 @mock.patch.object(db_api, 'share_network_get_all_by_filter', 

708 mock.Mock()) 

709 def test_index_filter_by_name_and_description( 

710 self, filter, share_network_number): 

711 fake_objs = [{'name': 'fo2', 'description': 'd2', 'id': 'fake1'}, 

712 {'name': 'foo', 'description': 'ds', 'id': 'fake2'}, 

713 {'name': 'foo1', 'description': 'ds1', 'id': 'fake3'}] 

714 db_api.share_network_get_all_by_filter.return_value = fake_objs 

715 req = fakes.HTTPRequest.blank( 

716 '/share_networks?' + filter, 

717 use_admin_context=True, version='2.36') 

718 result = self.controller.index(req) 

719 filters = {'project_id': self.context.project_id} 

720 db_api.share_network_get_all_by_filter.assert_called_with( 

721 req.environ['manila.context'], filters=filters) 

722 self.assertEqual(share_network_number, 

723 len(result[share_networks.RESOURCES_NAME])) 

724 if share_network_number > 0: 

725 self._check_share_network_view_shortened( 

726 result[share_networks.RESOURCES_NAME][0], fake_objs[1]) 

727 if share_network_number > 1: 

728 self._check_share_network_view_shortened( 

729 result[share_networks.RESOURCES_NAME][1], fake_objs[2]) 

730 

731 @mock.patch.object(db_api, 'share_network_get_all_by_filter', 

732 mock.Mock()) 

733 def test_index_all_filter_opts(self): 

734 valid_filter_opts = { 

735 'created_before': '2001-02-02', 

736 'created_since': '1999-01-01', 

737 'name': 'test-sn' 

738 } 

739 db_api.share_network_get_all_by_filter.return_value = [ 

740 fake_share_network_with_ss] 

741 

742 query_string = '/share-networks?' + parse.urlencode(sorted( 

743 [(k, v) for (k, v) in list(valid_filter_opts.items())])) 

744 for use_admin_context in [True, False]: 

745 req = fakes.HTTPRequest.blank(query_string, 

746 use_admin_context=use_admin_context) 

747 result = self.controller.index(req) 

748 parsed_created_before = timeutils.parse_strtime( 

749 valid_filter_opts['created_before'], fmt="%Y-%m-%d") 

750 parsed_created_since = timeutils.parse_strtime( 

751 valid_filter_opts['created_since'], fmt="%Y-%m-%d") 

752 filters = {'created_before': parsed_created_before, 

753 'created_since': parsed_created_since} 

754 if use_admin_context: 

755 filters['project_id'] = 'fake' 

756 db_api.share_network_get_all_by_filter.assert_called_with( 

757 req.environ['manila.context'], filters=filters) 

758 self.assertEqual(1, len(result[share_networks.RESOURCES_NAME])) 

759 self._check_share_network_view_shortened( 

760 result[share_networks.RESOURCES_NAME][0], 

761 fake_sn_with_ss_shortened) 

762 

763 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

764 def test_update_nominal(self): 

765 share_nw = 'fake network id' 

766 db_api.share_network_get.return_value = fake_share_network 

767 

768 body = {share_networks.RESOURCE_NAME: {'name': 'new name'}} 

769 

770 with mock.patch.object(db_api, 

771 'share_network_update', 

772 mock.Mock(return_value=fake_share_network)): 

773 result = self.controller.update(self.req, share_nw, body) 

774 

775 db_api.share_network_update.assert_called_once_with( 

776 self.req.environ['manila.context'], 

777 share_nw, 

778 body[share_networks.RESOURCE_NAME]) 

779 

780 self._check_share_network_view( 

781 result[share_networks.RESOURCE_NAME], 

782 fake_share_network) 

783 

784 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

785 def test_update_not_found(self): 

786 share_nw = 'fake network id' 

787 db_api.share_network_get.side_effect = exception.ShareNetworkNotFound( 

788 share_network_id=share_nw) 

789 

790 self.assertRaises(webob_exc.HTTPNotFound, 

791 self.controller.update, 

792 self.req, 

793 share_nw, 

794 self.body) 

795 

796 def test_update_invalid_body(self): 

797 self.assertRaises(webob_exc.HTTPUnprocessableEntity, 

798 self.controller.update, 

799 self.req, 

800 'fake_sn_id', 

801 None) 

802 

803 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

804 def test_update_invalid_key_in_use(self): 

805 share_nw = fake_share_network.copy() 

806 subnet = fake_share_network_subnet.copy() 

807 subnet['share_servers'] = [{'id': 1}] 

808 share_nw['share_network_subnets'] = [subnet] 

809 

810 db_api.share_network_get.return_value = share_nw 

811 body = { 

812 share_networks.RESOURCE_NAME: { 

813 'name': 'new name', 

814 'user_id': 'new id', 

815 }, 

816 } 

817 self.assertRaises(webob_exc.HTTPForbidden, 

818 self.controller.update, 

819 self.req, 

820 share_nw['id'], 

821 body) 

822 

823 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

824 @mock.patch.object(db_api, 'share_network_update', mock.Mock()) 

825 def test_update_valid_keys_in_use(self): 

826 share_nw = fake_share_network.copy() 

827 subnet = fake_share_network_subnet.copy() 

828 subnet['share_servers'] = [{'id': 1}] 

829 share_nw['share_network_subnets'] = [subnet] 

830 updated_share_nw = share_nw.copy() 

831 updated_share_nw['name'] = 'new name' 

832 updated_share_nw['description'] = 'new description' 

833 

834 db_api.share_network_get.return_value = share_nw 

835 db_api.share_network_update.return_value = updated_share_nw 

836 body = { 

837 share_networks.RESOURCE_NAME: { 

838 'name': updated_share_nw['name'], 

839 'description': updated_share_nw['description'], 

840 }, 

841 } 

842 self.controller.update(self.req, share_nw['id'], body) 

843 db_api.share_network_get.assert_called_once_with(self.context, 

844 share_nw['id']) 

845 db_api.share_network_update.assert_called_once_with( 

846 self.context, share_nw['id'], body['share_network']) 

847 

848 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

849 def test_update_db_api_exception(self): 

850 share_nw = 'fake network id' 

851 db_api.share_network_get.return_value = fake_share_network 

852 

853 self.mock_object( 

854 self.controller, '_share_network_subnets_contain_share_servers', 

855 mock.Mock(return_value=False)) 

856 self.mock_object(db_api, 'share_network_subnet_get_default_subnets', 

857 mock.Mock(return_value=[fake_share_network_subnet])) 

858 self.mock_object(db_api, 'share_network_subnet_update') 

859 

860 body = {share_networks.RESOURCE_NAME: {'neutron_subnet_id': 

861 'new subnet'}} 

862 

863 with mock.patch.object(db_api, 

864 'share_network_update', 

865 mock.Mock(side_effect=db_exception.DBError)): 

866 self.assertRaises(webob_exc.HTTPBadRequest, 

867 self.controller.update, 

868 self.req, 

869 share_nw, 

870 body) 

871 (db_api.share_network_subnet_get_default_subnets. 

872 assert_called_once_with(self.context, share_nw)) 

873 db_api.share_network_subnet_update.assert_called_once_with( 

874 self.context, fake_share_network_subnet['id'], 

875 body['share_network']) 

876 

877 @ddt.data((webob_exc.HTTPBadRequest, 1, None, 

878 'new subnet'), 

879 (webob_exc.HTTPBadRequest, 2, None, 

880 'new subnet'), 

881 (webob_exc.HTTPBadRequest, None, 'neutron net', None)) 

882 @ddt.unpack 

883 def test_update_default_subnet_errors(self, exception_to_raise, 

884 get_default_subnet_return_length, 

885 neutron_net_id, neutron_subnet_id): 

886 share_nw = 'fake network id' 

887 self.mock_object(db_api, 'share_network_get', 

888 mock.Mock(return_value=fake_share_network)) 

889 self.mock_object( 

890 self.controller, '_share_network_subnets_contain_share_servers', 

891 mock.Mock(return_value=False)) 

892 self.mock_object(db_api, 'share_network_subnet_get_default_subnets', 

893 mock.Mock(return_value=None)) 

894 

895 if get_default_subnet_return_length: 

896 fake_subnet = copy.deepcopy(fake_share_network_subnet) 

897 fake_subnet['neutron_net_id'] = None 

898 fake_subnet['neutron_subnet_id'] = None 

899 

900 if get_default_subnet_return_length == 1: 

901 (db_api.share_network_subnet_get_default_subnets. 

902 return_value) = [fake_subnet] 

903 elif get_default_subnet_return_length == 2: 903 ↛ 907line 903 didn't jump to line 907 because the condition on line 903 was always true

904 (db_api.share_network_subnet_get_default_subnets. 

905 return_value) = [fake_subnet, fake_subnet] 

906 

907 body = { 

908 share_networks.RESOURCE_NAME: { 

909 'neutron_net_id': neutron_net_id, 

910 'neutron_subnet_id': neutron_subnet_id 

911 } 

912 } 

913 

914 self.assertRaises(exception_to_raise, 

915 self.controller.update, 

916 self.req, 

917 share_nw, 

918 body) 

919 

920 (db_api.share_network_subnet_get_default_subnets. 

921 assert_called_once_with(self.context, share_nw)) 

922 

923 @ddt.data(*set(("1.0", "2.25", "2.26", api_version._MAX_API_VERSION))) 

924 def test_add_security_service(self, microversion): 

925 share_network_id = 'fake network id' 

926 security_service_id = 'fake ss id' 

927 self.mock_object( 

928 self.controller, '_share_network_subnets_contain_share_servers') 

929 

930 body = {'add_security_service': {'security_service_id': 

931 security_service_id}} 

932 

933 req = fakes.HTTPRequest.blank('/share-networks', version=microversion) 

934 with mock.patch.object(self.controller, 'add_security_service', 

935 mock.Mock()): 

936 self.controller.add_security_service(req, share_network_id, body) 

937 self.controller.add_security_service.assert_called_once_with( 

938 req, share_network_id, body) 

939 

940 def _setup_add_sec_services_with_servers_tests( 

941 self, share_network, security_service, network_is_active=True, 

942 version=ADD_UPDATE_SEC_SERVICE_VERSION, 

943 share_api_update_services_action=mock.Mock()): 

944 self.mock_object( 

945 db_api, 'share_network_get', mock.Mock(return_value=share_network)) 

946 self.mock_object( 

947 db_api, 'security_service_get', 

948 mock.Mock(return_value=security_service)) 

949 self.mock_object( 

950 self.controller, '_share_network_subnets_contain_share_servers', 

951 mock.Mock(return_value=True)) 

952 self.mock_object( 

953 self.controller.share_api, 'update_share_network_security_service', 

954 share_api_update_services_action) 

955 self.mock_object( 

956 common, 'check_share_network_is_active', 

957 mock.Mock(return_value=network_is_active)) 

958 self.mock_object(db_api, 'share_network_add_security_service') 

959 self.mock_object(self.controller._view_builder, 'build_share_network') 

960 

961 body = { 

962 'add_security_service': { 

963 'security_service_id': security_service['id'] 

964 } 

965 } 

966 req = fakes.HTTPRequest.blank( 

967 '/add_security_service', version=version, use_admin_context=True) 

968 context = req.environ['manila.context'] 

969 

970 return req, context, body 

971 

972 def test_add_security_service_with_servers(self): 

973 security_service = db_utils.create_security_service() 

974 security_service_id = security_service['id'] 

975 share_network = db_utils.create_share_network() 

976 share_network_id = share_network['id'] 

977 req, context, body = self._setup_add_sec_services_with_servers_tests( 

978 share_network, security_service) 

979 

980 self.controller.add_security_service(req, share_network_id, body) 

981 

982 db_api.security_service_get.assert_called_once_with( 

983 context, security_service_id) 

984 (self.controller._share_network_subnets_contain_share_servers. 

985 assert_called_once_with(share_network)) 

986 db_api.share_network_get.assert_called_once_with( 

987 context, share_network_id) 

988 (self.controller.share_api.update_share_network_security_service. 

989 assert_called_once_with(context, share_network, security_service)) 

990 

991 def test_add_security_service_with_server_invalid_version(self): 

992 security_service = db_utils.create_security_service() 

993 security_service_id = security_service['id'] 

994 share_network = db_utils.create_share_network() 

995 share_network_id = share_network['id'] 

996 req, context, body = self._setup_add_sec_services_with_servers_tests( 

997 share_network, security_service, version='2.59') 

998 

999 self.assertRaises( 

1000 webob_exc.HTTPForbidden, 

1001 self.controller.add_security_service, 

1002 req, share_network_id, body 

1003 ) 

1004 

1005 db_api.security_service_get.assert_called_once_with( 

1006 context, security_service_id) 

1007 (self.controller._share_network_subnets_contain_share_servers. 

1008 assert_called_once_with(share_network)) 

1009 db_api.share_network_get.assert_called_once_with( 

1010 context, share_network_id) 

1011 

1012 @ddt.data( 

1013 (exception.ServiceIsDown(message='fake'), webob_exc.HTTPConflict), 

1014 (exception.InvalidShareNetwork(message='fake'), 

1015 webob_exc.HTTPBadRequest) 

1016 ) 

1017 @ddt.unpack 

1018 def test_add_security_service_with_server_update_failed( 

1019 self, side_effect, exception_to_raise): 

1020 security_service = db_utils.create_security_service() 

1021 security_service_id = security_service['id'] 

1022 share_network_id = fake_share_network['id'] 

1023 fake_share_network['security_service_update_support'] = True 

1024 action = mock.Mock(side_effect=side_effect) 

1025 

1026 req, context, body = self._setup_add_sec_services_with_servers_tests( 

1027 fake_share_network, security_service, 

1028 share_api_update_services_action=action) 

1029 

1030 self.assertRaises( 

1031 exception_to_raise, 

1032 self.controller.add_security_service, 

1033 req, share_network_id, body 

1034 ) 

1035 

1036 db_api.security_service_get.assert_called_once_with( 

1037 context, security_service_id) 

1038 db_api.share_network_get.assert_called_once_with( 

1039 context, share_network_id) 

1040 (self.controller.share_api.update_share_network_security_service. 

1041 assert_called_once_with(context, fake_share_network, 

1042 security_service)) 

1043 

1044 @ddt.data( 

1045 (exception.NotFound(message='fake'), webob_exc.HTTPNotFound), 

1046 (exception.ShareNetworkSecurityServiceAssociationError(message='fake'), 

1047 webob_exc.HTTPBadRequest)) 

1048 @ddt.unpack 

1049 def test_action_add_security_service_conflict(self, captured_exception, 

1050 expected_raised_exception): 

1051 share_network = fake_share_network.copy() 

1052 share_network['security_services'] = [{'id': 'security_service_1', 

1053 'type': 'ldap'}] 

1054 security_service = {'id': ' security_service_2', 

1055 'type': 'ldap'} 

1056 body = {'add_security_service': {'security_service_id': 

1057 security_service['id']}} 

1058 request = fakes.HTTPRequest.blank( 

1059 '/share-networks', use_admin_context=True) 

1060 self.mock_object( 

1061 self.controller, '_share_network_subnets_contain_share_servers', 

1062 mock.Mock(return_value=False)) 

1063 update_sec_serv_mock = self.mock_object( 

1064 self.controller.share_api, 'update_share_network_security_service') 

1065 self.mock_object(db_api, 'share_network_get', 

1066 mock.Mock(return_value=share_network)) 

1067 self.mock_object(db_api, 'security_service_get', 

1068 mock.Mock(return_value=security_service)) 

1069 self.mock_object(share_networks.policy, 'check_policy') 

1070 self.mock_object( 

1071 db_api, 'share_network_add_security_service', 

1072 mock.Mock(side_effect=captured_exception)) 

1073 

1074 db_api.security_service_get.return_value = security_service 

1075 db_api.share_network_get.return_value = share_network 

1076 self.assertRaises(expected_raised_exception, 

1077 self.controller.add_security_service, 

1078 request, 

1079 share_network['id'], 

1080 body) 

1081 

1082 db_api.share_network_get.assert_called_once_with( 

1083 request.environ['manila.context'], share_network['id']) 

1084 db_api.security_service_get.assert_called_once_with( 

1085 request.environ['manila.context'], security_service['id']) 

1086 share_networks.policy.check_policy.assert_called_once_with( 

1087 request.environ['manila.context'], 

1088 share_networks.RESOURCE_NAME, 

1089 'add_security_service', target_obj=share_network) 

1090 update_sec_serv_mock.assert_called_once_with( 

1091 request.environ['manila.context'], share_network, 

1092 security_service) 

1093 

1094 def _setup_update_sec_services_with_servers_tests( 

1095 self, share_network, security_services, 

1096 version=ADD_UPDATE_SEC_SERVICE_VERSION, 

1097 share_api_update_services_action=mock.Mock()): 

1098 

1099 self.mock_object( 

1100 db_api, 'share_network_get', mock.Mock(return_value=share_network)) 

1101 self.mock_object( 

1102 db_api, 'security_service_get', 

1103 mock.Mock(side_effect=security_services)) 

1104 self.mock_object( 

1105 self.controller.share_api, 'update_share_network_security_service', 

1106 share_api_update_services_action) 

1107 self.mock_object(self.controller._view_builder, 'build_share_network') 

1108 self.mock_object(db_api, 'share_network_update_security_service') 

1109 

1110 body = { 

1111 'update_security_service': { 

1112 'current_service_id': security_services[0]['id'], 

1113 'new_service_id': security_services[1]['id'] 

1114 } 

1115 } 

1116 req = fakes.HTTPRequest.blank( 

1117 '/add_security_service', version=version, use_admin_context=True) 

1118 context = req.environ['manila.context'] 

1119 

1120 return req, context, body 

1121 

1122 def test_update_security_service_service_not_found(self): 

1123 security_services = [ 

1124 db_utils.create_security_service() for i in range(2)] 

1125 share_network = copy.deepcopy(fake_share_network) 

1126 share_network['security_service_update_support'] = True 

1127 

1128 req, context, body = ( 

1129 self._setup_update_sec_services_with_servers_tests( 

1130 share_network, security_services)) 

1131 

1132 db_api.security_service_get.side_effect = exception.NotFound('fake') 

1133 

1134 self.assertRaises( 

1135 webob_exc.HTTPBadRequest, 

1136 self.controller.update_security_service, 

1137 req, share_network['id'], body) 

1138 

1139 db_api.share_network_get.assert_called_once_with( 

1140 context, share_network['id']) 

1141 db_api.security_service_get.assert_has_calls( 

1142 [mock.call(context, security_services[0]['id'])] 

1143 ) 

1144 

1145 @ddt.data( 

1146 (exception.ServiceIsDown(message='fake'), webob_exc.HTTPConflict), 

1147 (exception.InvalidShareNetwork(message='fake'), 

1148 webob_exc.HTTPBadRequest)) 

1149 @ddt.unpack 

1150 def test_update_security_service_share_api_failure(self, side_effect, exc): 

1151 security_services = [ 

1152 db_utils.create_security_service() for i in range(2)] 

1153 share_network = copy.deepcopy(fake_share_network) 

1154 share_network['security_service_update_support'] = True 

1155 

1156 req, context, body = ( 

1157 self._setup_update_sec_services_with_servers_tests( 

1158 share_network, security_services, 

1159 share_api_update_services_action=mock.Mock( 

1160 side_effect=side_effect))) 

1161 

1162 self.assertRaises( 

1163 exc, 

1164 self.controller.update_security_service, 

1165 req, share_network['id'], body) 

1166 

1167 db_api.share_network_get.assert_called_once_with( 

1168 context, share_network['id']) 

1169 db_api.security_service_get.assert_has_calls( 

1170 [mock.call(context, security_services[0]['id']), 

1171 mock.call(context, security_services[1]['id'])] 

1172 ) 

1173 

1174 def test_update_security_service(self): 

1175 security_services = [ 

1176 db_utils.create_security_service() for i in range(2)] 

1177 share_network = copy.copy(fake_share_network) 

1178 share_network['security_service_update_support'] = True 

1179 

1180 req, context, body = ( 

1181 self._setup_update_sec_services_with_servers_tests( 

1182 share_network, security_services)) 

1183 

1184 self.controller.update_security_service( 

1185 req, share_network['id'], body) 

1186 

1187 db_api.share_network_get.assert_called_once_with( 

1188 context, share_network['id']) 

1189 db_api.security_service_get.assert_has_calls( 

1190 [mock.call(context, security_services[0]['id']), 

1191 mock.call(context, security_services[1]['id'])] 

1192 ) 

1193 (self.controller.share_api.update_share_network_security_service. 

1194 assert_called_once_with( 

1195 context, share_network, security_services[1], 

1196 current_security_service=security_services[0])) 

1197 db_api.share_network_update_security_service.assert_called_once_with( 

1198 context, share_network['id'], security_services[0]['id'], 

1199 security_services[1]['id']) 

1200 

1201 @ddt.data(*set(("1.0", "2.25", "2.26", api_version._MAX_API_VERSION))) 

1202 def test_action_remove_security_service(self, microversion): 

1203 share_network_id = 'fake network id' 

1204 security_service_id = 'fake ss id' 

1205 self.mock_object( 

1206 self.controller, '_share_network_subnets_contain_share_servers') 

1207 body = {'remove_security_service': {'security_service_id': 

1208 security_service_id}} 

1209 

1210 req = fakes.HTTPRequest.blank('/share-networks', version=microversion) 

1211 with mock.patch.object(self.controller, 'remove_security_service', 

1212 mock.Mock()): 

1213 self.controller.remove_security_service( 

1214 req, share_network_id, body) 

1215 self.controller.remove_security_service.assert_called_once_with( 

1216 req, share_network_id, body) 

1217 

1218 @mock.patch.object(db_api, 'share_network_get', mock.Mock()) 

1219 @mock.patch.object(share_networks.policy, 'check_policy', mock.Mock()) 

1220 def test_action_remove_security_service_forbidden(self): 

1221 share_network = fake_share_network.copy() 

1222 subnet = fake_share_network_subnet.copy() 

1223 subnet['share_servers'] = ['foo'] 

1224 share_network['share_network_subnets'] = [subnet] 

1225 db_api.share_network_get.return_value = share_network 

1226 self.mock_object( 

1227 self.controller, '_share_network_subnets_contain_share_servers', 

1228 mock.Mock(return_value=True)) 

1229 body = { 

1230 'remove_security_service': { 

1231 'security_service_id': 'fake id', 

1232 }, 

1233 } 

1234 self.assertRaises(webob_exc.HTTPForbidden, 

1235 self.controller.remove_security_service, 

1236 self.req, 

1237 share_network['id'], 

1238 body) 

1239 db_api.share_network_get.assert_called_once_with( 

1240 self.req.environ['manila.context'], share_network['id']) 

1241 share_networks.policy.check_policy.assert_called_once_with( 

1242 self.req.environ['manila.context'], 

1243 share_networks.RESOURCE_NAME, 

1244 'remove_security_service', target_obj=share_network) 

1245 

1246 @mock.patch.object(share_networks.policy, 'check_policy', mock.Mock()) 

1247 def test_action_remove_security_service_share_no_share_servers(self): 

1248 share_network = fake_share_network.copy() 

1249 subnet = fake_share_network_subnet.copy() 

1250 share_network['share_network_subnets'] = [subnet] 

1251 mock_share_net_get = self.mock_object( 

1252 db_api, 'share_network_get', mock.Mock(return_value=share_network)) 

1253 mock_contains_servers = self.mock_object( 

1254 self.controller, '_share_network_subnets_contain_share_servers', 

1255 mock.Mock(return_value=False)) 

1256 mock_api_remove = self.mock_object( 

1257 db_api, 'share_network_remove_security_service', 

1258 mock.Mock(return_value=share_network)) 

1259 mock_view = self.mock_object( 

1260 self.controller._view_builder, 'build_share_network', 

1261 mock.Mock(return_value='fake_view')) 

1262 body = { 

1263 'remove_security_service': { 

1264 'security_service_id': 'fake_ss_id', 

1265 }, 

1266 } 

1267 

1268 view = self.controller.remove_security_service( 

1269 self.req, share_network['id'], body) 

1270 

1271 self.assertEqual('fake_view', view) 

1272 mock_share_net_get.assert_called_once_with( 

1273 self.req.environ['manila.context'], share_network['id']) 

1274 share_networks.policy.check_policy.assert_called_once_with( 

1275 self.req.environ['manila.context'], 

1276 share_networks.RESOURCE_NAME, 

1277 'remove_security_service', target_obj=share_network) 

1278 mock_contains_servers.assert_called_once_with(share_network) 

1279 mock_api_remove.assert_called_once_with( 

1280 self.req.environ['manila.context'], share_network['id'], 

1281 'fake_ss_id') 

1282 mock_view.assert_called_once_with(self.req, share_network) 

1283 

1284 @ddt.data( 

1285 (KeyError, webob_exc.HTTPBadRequest), 

1286 (exception.NotFound(message='fake'), webob_exc.HTTPNotFound), 

1287 (exception.ShareNetworkSecurityServiceDissociationError( 

1288 message='fake'), webob_exc.HTTPBadRequest)) 

1289 @ddt.unpack 

1290 def test_action_remove_security_service_share_api_exception(self, api_exp, 

1291 expect_exp): 

1292 share_network = fake_share_network.copy() 

1293 subnet = fake_share_network_subnet.copy() 

1294 share_network['share_network_subnets'] = [subnet] 

1295 mock_policy = self.mock_object( 

1296 share_networks.policy, 'check_policy', mock.Mock()) 

1297 mock_share_net_get = self.mock_object( 

1298 db_api, 'share_network_get', 

1299 mock.Mock(return_value=share_network)) 

1300 mock_contains_servers = self.mock_object( 

1301 self.controller, '_share_network_subnets_contain_share_servers', 

1302 mock.Mock(return_value=False)) 

1303 mock_api_remove = self.mock_object( 

1304 db_api, 'share_network_remove_security_service', 

1305 mock.Mock(side_effect=api_exp)) 

1306 body = { 

1307 'remove_security_service': { 

1308 'security_service_id': 'fake_ss_id', 

1309 }, 

1310 } 

1311 

1312 self.assertRaises(expect_exp, 

1313 self.controller.remove_security_service, 

1314 self.req, 

1315 share_network['id'], 

1316 body) 

1317 

1318 mock_share_net_get.assert_called_once_with( 

1319 self.req.environ['manila.context'], share_network['id']) 

1320 db_api.share_network_get.assert_called_once_with( 

1321 self.req.environ['manila.context'], share_network['id']) 

1322 mock_policy.assert_called_once_with( 

1323 self.req.environ['manila.context'], 

1324 share_networks.RESOURCE_NAME, 

1325 'remove_security_service', target_obj=share_network) 

1326 mock_contains_servers.assert_called_once_with(share_network) 

1327 mock_api_remove.assert_called_once_with( 

1328 self.req.environ['manila.context'], share_network['id'], 

1329 'fake_ss_id') 

1330 

1331 @ddt.data('add_security_service', 'remove_security_service') 

1332 def test_action_security_service_contains_share_servers(self, action): 

1333 share_network = fake_share_network.copy() 

1334 security_service = {'id': ' security_service_2', 

1335 'type': 'ldap'} 

1336 method_to_call = ( 

1337 self.controller.add_security_service 

1338 if action == 'add_security_service' 

1339 else self.controller.remove_security_service) 

1340 body = { 

1341 action: { 

1342 'security_service_id': security_service['id'] 

1343 } 

1344 } 

1345 self.mock_object(share_networks.policy, 'check_policy') 

1346 self.mock_object(db_api, 'share_network_get', 

1347 mock.Mock(return_value=share_network)) 

1348 self.mock_object(db_api, 'security_service_get', 

1349 mock.Mock(return_value=security_service)) 

1350 self.mock_object( 

1351 self.controller, '_share_network_subnets_contain_share_servers', 

1352 mock.Mock(return_value=True)) 

1353 

1354 self.assertRaises(webob_exc.HTTPForbidden, 

1355 method_to_call, 

1356 self.req, 

1357 share_network['id'], 

1358 body) 

1359 db_api.share_network_get.assert_called_once_with( 

1360 self.req.environ['manila.context'], share_network['id']) 

1361 share_networks.policy.check_policy.assert_called_once_with( 

1362 self.req.environ['manila.context'], 

1363 share_networks.RESOURCE_NAME, action, target_obj=share_network) 

1364 

1365 def _setup_data_for_update_tests(self, is_check=False): 

1366 security_services = [ 

1367 db_utils.create_security_service() for i in range(2)] 

1368 share_network = db_utils.create_share_network() 

1369 action = ('update_security_service_check' if is_check 

1370 else 'update_security_service') 

1371 body = { 

1372 action: { 

1373 'current_service_id': security_services[0]['id'], 

1374 'new_service_id': security_services[1]['id'], 

1375 } 

1376 } 

1377 if is_check: 

1378 body[action]['reset_operation'] = False 

1379 request = fakes.HTTPRequest.blank( 

1380 '/v2/fake/share-networks/%s/action' % share_network['id'], 

1381 use_admin_context=True, version='2.63') 

1382 return security_services, share_network, body, request 

1383 

1384 def test_check_update_security_service_not_found(self): 

1385 security_services, share_network, body, request = ( 

1386 self._setup_data_for_update_tests(is_check=True)) 

1387 

1388 context = request.environ['manila.context'] 

1389 

1390 self.mock_object(share_networks.policy, 'check_policy') 

1391 self.mock_object(db_api, 'share_network_get', 

1392 mock.Mock(return_value=share_network)) 

1393 self.mock_object(db_api, 'security_service_get', 

1394 mock.Mock(side_effect=exception.NotFound())) 

1395 

1396 self.assertRaises( 

1397 webob_exc.HTTPBadRequest, 

1398 self.controller.check_update_security_service, 

1399 request, 

1400 share_network['id'], 

1401 body) 

1402 

1403 db_api.share_network_get.assert_called_once_with( 

1404 context, share_network['id'] 

1405 ) 

1406 db_api.security_service_get.assert_called_once_with( 

1407 context, security_services[0]['id']) 

1408 

1409 def test_check_update_security_service(self): 

1410 security_services, share_network, body, request = ( 

1411 self._setup_data_for_update_tests(is_check=True)) 

1412 context = request.environ['manila.context'] 

1413 share_api_return = {'fake_key': 'fake_value'} 

1414 

1415 self.mock_object(share_networks.policy, 'check_policy') 

1416 self.mock_object(db_api, 'share_network_get', 

1417 mock.Mock(return_value=share_network)) 

1418 self.mock_object( 

1419 db_api, 'security_service_get', 

1420 mock.Mock( 

1421 side_effect=[security_services[0], security_services[1]])) 

1422 self.mock_object( 

1423 self.controller.share_api, 

1424 'check_share_network_security_service_update', 

1425 mock.Mock(return_vale=share_api_return)) 

1426 self.mock_object( 

1427 self.controller._view_builder, 

1428 'build_security_service_update_check') 

1429 

1430 self.controller.check_update_security_service( 

1431 request, share_network['id'], body) 

1432 

1433 db_api.share_network_get.assert_called_once_with( 

1434 context, share_network['id']) 

1435 db_api.security_service_get.assert_has_calls( 

1436 [mock.call(context, security_services[0]['id']), 

1437 mock.call(context, security_services[1]['id'])]) 

1438 (self.controller.share_api.check_share_network_security_service_update. 

1439 assert_called_once_with( 

1440 context, share_network, security_services[1], 

1441 current_security_service=security_services[0], 

1442 reset_operation=False)) 

1443 

1444 @ddt.data( 

1445 (exception.ServiceIsDown(message='fake'), webob_exc.HTTPConflict), 

1446 (exception.InvalidShareNetwork(message='fake'), 

1447 webob_exc.HTTPBadRequest), 

1448 (exception.InvalidSecurityService(message='fake'), 

1449 webob_exc.HTTPConflict)) 

1450 @ddt.unpack 

1451 def test_check_update_security_service_share_api_failed( 

1452 self, captured_exception, exception_to_be_raised): 

1453 security_services, share_network, body, request = ( 

1454 self._setup_data_for_update_tests(is_check=True)) 

1455 context = request.environ['manila.context'] 

1456 

1457 self.mock_object(share_networks.policy, 'check_policy') 

1458 self.mock_object(db_api, 'share_network_get', 

1459 mock.Mock(return_value=share_network)) 

1460 self.mock_object( 

1461 db_api, 'security_service_get', 

1462 mock.Mock( 

1463 side_effect=[security_services[0], security_services[1]])) 

1464 self.mock_object( 

1465 self.controller.share_api, 

1466 'check_share_network_security_service_update', 

1467 mock.Mock(side_effect=captured_exception)) 

1468 

1469 self.assertRaises( 

1470 exception_to_be_raised, 

1471 self.controller.check_update_security_service, 

1472 request, 

1473 share_network['id'], 

1474 body) 

1475 

1476 db_api.share_network_get.assert_called_once_with( 

1477 context, share_network['id']) 

1478 db_api.security_service_get.assert_has_calls( 

1479 [mock.call(context, security_services[0]['id']), 

1480 mock.call(context, security_services[1]['id'])]) 

1481 (self.controller.share_api.check_share_network_security_service_update. 

1482 assert_called_once_with( 

1483 context, share_network, security_services[1], 

1484 current_security_service=security_services[0], 

1485 reset_operation=False)) 

1486 

1487 def _setup_data_for_check_add_tests(self): 

1488 security_service = db_utils.create_security_service() 

1489 share_network = db_utils.create_share_network() 

1490 body = { 

1491 'add_security_service_check': { 

1492 'reset_operation': False, 

1493 'security_service_id': security_service['id'], 

1494 } 

1495 } 

1496 request = fakes.HTTPRequest.blank( 

1497 '/share-networks', use_admin_context=True, version='2.63') 

1498 return security_service, share_network, body, request 

1499 

1500 def test_check_add_security_service_not_found(self): 

1501 security_service, share_network, body, request = ( 

1502 self._setup_data_for_check_add_tests()) 

1503 

1504 context = request.environ['manila.context'] 

1505 

1506 self.mock_object(share_networks.policy, 'check_policy') 

1507 self.mock_object(db_api, 'share_network_get', 

1508 mock.Mock(return_value=share_network)) 

1509 self.mock_object(db_api, 'security_service_get', 

1510 mock.Mock(side_effect=exception.NotFound())) 

1511 

1512 self.assertRaises( 

1513 webob_exc.HTTPBadRequest, 

1514 self.controller.check_add_security_service, 

1515 request, 

1516 share_network['id'], 

1517 body) 

1518 

1519 db_api.share_network_get.assert_called_once_with( 

1520 context, share_network['id'] 

1521 ) 

1522 db_api.security_service_get.assert_called_once_with( 

1523 context, security_service['id'], project_only=True) 

1524 

1525 def test_check_add_security_service(self): 

1526 security_service, share_network, body, request = ( 

1527 self._setup_data_for_check_add_tests()) 

1528 context = request.environ['manila.context'] 

1529 share_api_return = {'fake_key': 'fake_value'} 

1530 

1531 self.mock_object(share_networks.policy, 'check_policy') 

1532 self.mock_object(db_api, 'share_network_get', 

1533 mock.Mock(return_value=share_network)) 

1534 self.mock_object( 

1535 db_api, 'security_service_get', 

1536 mock.Mock(return_value=security_service)) 

1537 self.mock_object( 

1538 self.controller.share_api, 

1539 'check_share_network_security_service_update', 

1540 mock.Mock(return_vale=share_api_return)) 

1541 self.mock_object( 

1542 self.controller._view_builder, 

1543 'build_security_service_update_check') 

1544 

1545 self.controller.check_add_security_service( 

1546 request, share_network['id'], body) 

1547 

1548 db_api.share_network_get.assert_called_once_with( 

1549 context, share_network['id']) 

1550 db_api.security_service_get.assert_called_once_with( 

1551 context, security_service['id'], project_only=True) 

1552 (self.controller.share_api.check_share_network_security_service_update. 

1553 assert_called_once_with( 

1554 context, share_network, security_service, 

1555 reset_operation=False)) 

1556 

1557 @ddt.data( 

1558 (exception.ServiceIsDown(message='fake'), webob_exc.HTTPConflict), 

1559 (exception.InvalidShareNetwork(message='fake'), 

1560 webob_exc.HTTPBadRequest), 

1561 (exception.InvalidSecurityService(message='fake'), 

1562 webob_exc.HTTPConflict)) 

1563 @ddt.unpack 

1564 def test_check_add_security_service_share_api_failed( 

1565 self, captured_exception, exception_to_be_raised): 

1566 security_service, share_network, body, request = ( 

1567 self._setup_data_for_check_add_tests()) 

1568 context = request.environ['manila.context'] 

1569 

1570 self.mock_object(share_networks.policy, 'check_policy') 

1571 self.mock_object(db_api, 'share_network_get', 

1572 mock.Mock(return_value=share_network)) 

1573 self.mock_object( 

1574 db_api, 'security_service_get', 

1575 mock.Mock(return_value=security_service)) 

1576 self.mock_object( 

1577 self.controller.share_api, 

1578 'check_share_network_security_service_update', 

1579 mock.Mock(side_effect=captured_exception)) 

1580 

1581 self.assertRaises( 

1582 exception_to_be_raised, 

1583 self.controller.check_add_security_service, 

1584 request, 

1585 share_network['id'], 

1586 body) 

1587 

1588 db_api.share_network_get.assert_called_once_with( 

1589 context, share_network['id']) 

1590 db_api.security_service_get.assert_called_once_with( 

1591 context, security_service['id'], project_only=True) 

1592 (self.controller.share_api.check_share_network_security_service_update. 

1593 assert_called_once_with( 

1594 context, share_network, security_service, 

1595 reset_operation=False)) 

1596 

1597 @ddt.data( 

1598 (exception.NotFound(message='fake'), 

1599 webob_exc.HTTPBadRequest)) 

1600 @ddt.unpack 

1601 def test_check_add_security_service_failed_project_id( 

1602 self, captured_exception, exception_to_be_raised): 

1603 security_service, share_network, body, request = ( 

1604 self._setup_data_for_check_add_tests()) 

1605 share_network = fake_share_network 

1606 context = request.environ['manila.context'] 

1607 share_api_return = {'fake_key': 'fake_value'} 

1608 

1609 self.mock_object(share_networks.policy, 'check_policy') 

1610 self.mock_object(db_api, 'share_network_get', 

1611 mock.Mock(return_value=share_network)) 

1612 self.mock_object( 

1613 db_api, 'security_service_get', 

1614 mock.Mock(side_effect=captured_exception)) 

1615 self.mock_object( 

1616 self.controller.share_api, 

1617 'check_share_network_security_service_update', 

1618 mock.Mock(return_vale=share_api_return)) 

1619 self.mock_object( 

1620 self.controller._view_builder, 

1621 'build_security_service_update_check') 

1622 

1623 self.assertRaises( 

1624 exception_to_be_raised, 

1625 self.controller.check_add_security_service, 

1626 request, 

1627 share_network['id'], 

1628 body) 

1629 

1630 db_api.share_network_get.assert_called_once_with( 

1631 context, share_network['id']) 

1632 db_api.security_service_get.assert_called_once_with( 

1633 context, security_service['id'], project_only=True) 

1634 

1635 @ddt.data( 

1636 (exception.ServiceIsDown(message='fake'), webob_exc.HTTPConflict), 

1637 (exception.InvalidShareNetwork(message='fake'), 

1638 webob_exc.HTTPBadRequest), 

1639 (exception.InvalidSecurityService(message='fake'), 

1640 webob_exc.HTTPConflict)) 

1641 @ddt.unpack 

1642 def test_update_security_service_share_api_failed( 

1643 self, captured_exception, exception_to_be_raised): 

1644 security_services, share_network, body, request = ( 

1645 self._setup_data_for_update_tests()) 

1646 context = request.environ['manila.context'] 

1647 

1648 self.mock_object(share_networks.policy, 'check_policy') 

1649 self.mock_object(db_api, 'share_network_get', 

1650 mock.Mock(return_value=share_network)) 

1651 self.mock_object( 

1652 db_api, 'security_service_get', 

1653 mock.Mock( 

1654 side_effect=[security_services[0], security_services[1]])) 

1655 self.mock_object( 

1656 self.controller.share_api, 

1657 'update_share_network_security_service', 

1658 mock.Mock(side_effect=captured_exception)) 

1659 

1660 self.assertRaises(exception_to_be_raised, 

1661 self.controller.update_security_service, 

1662 request, 

1663 share_network['id'], 

1664 body) 

1665 

1666 db_api.share_network_get.assert_called_once_with( 

1667 context, share_network['id']) 

1668 db_api.security_service_get.assert_has_calls( 

1669 [mock.call(context, security_services[0]['id']), 

1670 mock.call(context, security_services[1]['id'])]) 

1671 (self.controller.share_api.update_share_network_security_service. 

1672 assert_called_once_with( 

1673 context, share_network, security_services[1], 

1674 current_security_service=security_services[0])) 

1675 

1676 def test_reset_status(self): 

1677 share_network = db_utils.create_share_network() 

1678 request = fakes.HTTPRequest.blank( 

1679 '/v2/fake/share-networks/%s/action' % share_network['id'], 

1680 use_admin_context=True, version='2.63') 

1681 self.mock_object(db_api, 'share_network_update') 

1682 

1683 status = {'status': 'active'} 

1684 body = {'reset_status': status} 

1685 

1686 response = self.controller.reset_status(request, 

1687 share_network['id'], body) 

1688 

1689 self.assertEqual(202, response.status_int) 

1690 db_api.share_network_update.assert_called_once_with( 

1691 request.environ['manila.context'], 

1692 share_network['id'], {'status': 'active'}) 

1693 

1694 @ddt.data([], ['fake_server']) 

1695 def test_share_network_subnet_create_check(self, servers): 

1696 body = { 

1697 'share_network_subnet_create_check': { 

1698 'reset_operation': False, 

1699 'availability_zone': 'fake_az', 

1700 } 

1701 } 

1702 request = fakes.HTTPRequest.blank( 

1703 '/share-networks', use_admin_context=True, version='2.70') 

1704 context = request.environ['manila.context'] 

1705 

1706 share_net = 'fake_net' 

1707 subnet = {'share_servers': servers} 

1708 existing_subnets = [subnet] 

1709 mock_validate_subnet = self.mock_object( 

1710 common, 'validate_subnet_create', 

1711 mock.Mock(return_value=(share_net, existing_subnets))) 

1712 share_api_return = { 

1713 'compatible': not bool(servers), 

1714 'hosts_check_result': {} 

1715 } 

1716 mock_check_update = self.mock_object( 

1717 self.controller.share_api, 

1718 'check_update_share_server_network_allocations', 

1719 mock.Mock(return_value=share_api_return)) 

1720 subnet_view = 'fake_subnet' 

1721 mock_view = self.mock_object( 

1722 self.controller._view_builder, 

1723 'build_share_network_subnet_create_check', 

1724 mock.Mock(return_value=subnet_view)) 

1725 

1726 net_id = 'fake_net_id' 

1727 response = self.controller.share_network_subnet_create_check( 

1728 request, net_id, body) 

1729 

1730 self.assertEqual(subnet_view, response) 

1731 data = body['share_network_subnet_create_check'] 

1732 mock_validate_subnet.assert_called_once_with( 

1733 context, net_id, data, True) 

1734 if servers: 

1735 data['share_servers'] = servers 

1736 mock_check_update.assert_called_once_with( 

1737 context, share_net, data, False) 

1738 else: 

1739 mock_check_update.assert_not_called() 

1740 mock_view.assert_called_once_with(request, share_api_return) 

1741 

1742 @ddt.data( 

1743 (exception.ServiceIsDown(message='fake'), 

1744 webob_exc.HTTPInternalServerError), 

1745 (exception.InvalidShareNetwork(message='fake'), 

1746 webob_exc.HTTPBadRequest)) 

1747 @ddt.unpack 

1748 def test_share_network_subnet_create_check_api_failed( 

1749 self, captured_exception, exception_to_be_raised): 

1750 body = { 

1751 'share_network_subnet_create_check': { 

1752 'reset_operation': False, 

1753 'availability_zone': 'fake_az', 

1754 } 

1755 } 

1756 request = fakes.HTTPRequest.blank( 

1757 '/share-networks', use_admin_context=True, version='2.70') 

1758 share_net = 'fake_net' 

1759 subnet = {'share_servers': 'fake_server'} 

1760 existing_subnets = [subnet] 

1761 self.mock_object( 

1762 common, 'validate_subnet_create', 

1763 mock.Mock(return_value=(share_net, existing_subnets))) 

1764 self.mock_object( 

1765 self.controller.share_api, 

1766 'check_update_share_server_network_allocations', 

1767 mock.Mock(side_effect=captured_exception)) 

1768 

1769 self.assertRaises(exception_to_be_raised, 

1770 self.controller.share_network_subnet_create_check, 

1771 request, 'fake_net_id', body) 

1772 

1773 def test_share_network_sec_service_delete(self): 

1774 self.mock_object(db_api, 'share_network_get', 

1775 mock.Mock(return_value=fake_share_network_with_ss)) 

1776 self.mock_object(db_api, 'share_network_delete') 

1777 self.mock_object(db_api, 'share_network_remove_security_service') 

1778 self.controller.delete(self.req, fake_share_network_with_ss['id']) 

1779 db_api.share_network_get.assert_called_once_with( 

1780 self.req.environ['manila.context'], 

1781 fake_share_network_with_ss['id']) 

1782 db_api.share_network_remove_security_service.assert_called_once_with( 

1783 self.req.environ['manila.context'], 

1784 fake_share_network_with_ss['id'], 

1785 fake_share_network_with_ss['security_services'][0]['id']) 

1786 db_api.share_network_delete.assert_called_once_with( 

1787 self.req.environ['manila.context'], 

1788 fake_share_network_with_ss['id'])