|
119 | 119 |
|
120 | 120 | let(:params) do |
121 | 121 | { |
122 | | - page: '2', |
123 | | - per_page: '10', |
124 | | - order_by: 'updated_at', |
| 122 | + page: '2', |
| 123 | + per_page: '10', |
| 124 | + order_by: 'updated_at', |
125 | 125 | space_guids: ['foo', 'bar'], |
126 | 126 | organization_guids: ['foo', 'bar'], |
127 | 127 | domain_guids: ['foo', 'bar'], |
128 | 128 | app_guids: ['foo', 'bar'], |
129 | 129 | paths: ['foo', 'bar'], |
130 | 130 | hosts: 'foo', |
| 131 | + ports: 636, |
131 | 132 | include: 'domain', |
132 | | - label_selector: 'foo,bar', |
| 133 | + label_selector: 'foo,bar', |
133 | 134 | } |
134 | 135 | end |
135 | 136 | end |
|
522 | 523 | ).to eq([app_model.guid]) |
523 | 524 | end |
524 | 525 | end |
| 526 | + |
| 527 | + context 'ports filter' do |
| 528 | + # Don't even think of converting the following hash to symbols ('type' => 'tcp' NOT type: 'tcp'), and you need to set the GUID |
| 529 | + let(:router_group) { VCAP::CloudController::RoutingApi::RouterGroup.new({ 'type' => 'tcp', 'reservable_ports' => '7777,8888,9999', 'guid' => 'some-guid' }) } |
| 530 | + let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } |
| 531 | + |
| 532 | + before do |
| 533 | + allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) |
| 534 | + allow(routing_api_client).to receive(:enabled?).and_return(true) |
| 535 | + allow(routing_api_client).to receive(:router_group).and_return(router_group) |
| 536 | + end |
| 537 | + |
| 538 | + context 'when there are multiple TCP routes with different ports' do |
| 539 | + # The following `let`s depend on the above `before do` |
| 540 | + let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } |
| 541 | + let!(:route_with_ports_0) do |
| 542 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) |
| 543 | + end |
| 544 | + let!(:route_with_ports_1) do |
| 545 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) |
| 546 | + end |
| 547 | + let!(:route_with_ports_2) do |
| 548 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) |
| 549 | + end |
| 550 | + |
| 551 | + it 'returns routes filtered by ports' do |
| 552 | + get '/v3/routes?ports=7777,8888', nil, admin_header |
| 553 | + expect(last_response).to have_status_code(200) |
| 554 | + expect(parsed_response['resources'].size).to eq(2) |
| 555 | + expect(parsed_response['resources'].map { |resource| resource['port'] }).to contain_exactly(route_with_ports_0.port, route_with_ports_1.port) |
| 556 | + end |
| 557 | + end |
| 558 | + end |
525 | 559 | end |
526 | 560 |
|
527 | 561 | describe 'labels' do |
|
2448 | 2482 | it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS |
2449 | 2483 | end |
2450 | 2484 |
|
| 2485 | + context 'ports filter' do |
| 2486 | + # Don't even think of converting the following hash to symbols ('type' => 'tcp' NOT type: 'tcp'), and you need to set the GUID |
| 2487 | + let(:router_group) { VCAP::CloudController::RoutingApi::RouterGroup.new({ 'type' => 'tcp', 'reservable_ports' => '7777,8888,9999', 'guid' => 'some-guid' }) } |
| 2488 | + let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } |
| 2489 | + |
| 2490 | + before do |
| 2491 | + allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) |
| 2492 | + allow(routing_api_client).to receive(:enabled?).and_return(true) |
| 2493 | + allow(routing_api_client).to receive(:router_group).and_return(router_group) |
| 2494 | + end |
| 2495 | + |
| 2496 | + context 'when there are multiple TCP routes with different ports' do |
| 2497 | + # The following `let`s depend on the above `before do` |
| 2498 | + let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } |
| 2499 | + let!(:route_with_ports_0) do |
| 2500 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) |
| 2501 | + end |
| 2502 | + let!(:route_with_ports_1) do |
| 2503 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) |
| 2504 | + end |
| 2505 | + let!(:route_with_ports_2) do |
| 2506 | + VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) |
| 2507 | + end |
| 2508 | + let!(:route_mapping_1) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_with_ports_1, process_type: 'web') } |
| 2509 | + let!(:route_mapping_2) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_with_ports_2, process_type: 'web') } |
| 2510 | + |
| 2511 | + it 'returns routes filtered by ports' do |
| 2512 | + get "/v3/apps/#{app_model.guid}/routes?ports=7777,8888", nil, admin_header |
| 2513 | + expect(last_response).to have_status_code(200) |
| 2514 | + expect(parsed_response['resources'].size).to eq(1) |
| 2515 | + expect(parsed_response['resources'].first['port']).to eq(route_with_ports_1.port) |
| 2516 | + end |
| 2517 | + end |
| 2518 | + end |
| 2519 | + |
2451 | 2520 | describe 'eager loading' do |
2452 | 2521 | it 'eager loads associated resources that the presenter specifies' do |
2453 | 2522 | expect(VCAP::CloudController::RouteFetcher).to receive(:fetch).with( |
|
0 commit comments