diff --git a/app/models/runtime/droplet_model.rb b/app/models/runtime/droplet_model.rb index 1757aec6a2..9716d1c858 100644 --- a/app/models/runtime/droplet_model.rb +++ b/app/models/runtime/droplet_model.rb @@ -126,8 +126,6 @@ def docker_ports end def docker_user - return '' unless docker? - container_user = '' if execution_metadata.present? begin diff --git a/app/presenters/v3/process_presenter.rb b/app/presenters/v3/process_presenter.rb index 2ca3a399a4..089a17949d 100644 --- a/app/presenters/v3/process_presenter.rb +++ b/app/presenters/v3/process_presenter.rb @@ -8,6 +8,13 @@ module V3 class ProcessPresenter < BasePresenter include VCAP::CloudController::Presenters::Mixins::MetadataPresentationHelpers + class << self + # :labels and :annotations come from MetadataPresentationHelpers + def associated_resources + super + [{ app: %i[buildpack_lifecycle_data cnb_lifecycle_data] }] + end + end + def to_hash health_check_data = { timeout: process.health_check_timeout, invocation_timeout: process.health_check_invocation_timeout, interval: process.health_check_interval } health_check_data[:endpoint] = process.health_check_http_endpoint if process.health_check_type == HealthCheckTypes::HTTP diff --git a/spec/request/processes_spec.rb b/spec/request/processes_spec.rb index ddeae41a12..08670416b4 100644 --- a/spec/request/processes_spec.rb +++ b/spec/request/processes_spec.rb @@ -83,6 +83,23 @@ allow(instances_reporters).to receive(:instances_for_processes).and_return(instances_for_processes) end + context 'eager loading' do + let(:cnb_app) { VCAP::CloudController::AppModel.make(:cnb, space:) } + let!(:cnb_process_1) { VCAP::CloudController::ProcessModel.make(:cnb, app: cnb_app) } + let!(:cnb_process_2) { VCAP::CloudController::ProcessModel.make(:cnb, app: cnb_app) } + let(:get_processes) { -> { get '/v3/processes', nil, developer_headers } } + + it 'eager loads associated data needed to present processes' do + expect { get_processes.call }.to have_queried_db_times(/SELECT .* FROM .processes. /i, 1) + expect(last_response.status).to eq(200) + expect(parsed_response['resources'].count).to eq(4) + + expect { get_processes.call }.to have_queried_db_times(/SELECT .* FROM .apps. /i, 1) # instead of 4 w/o eager loading + expect { get_processes.call }.to have_queried_db_times(/SELECT .* FROM .buildpack_lifecycle_data. /i, 1) # instead of 4 w/o eager loading + expect { get_processes.call }.to have_queried_db_times(/SELECT .* FROM .cnb_lifecycle_data. /i, 1) # instead of 2 w/o eager loading + end + end + it_behaves_like 'list query endpoint' do let(:message) { VCAP::CloudController::ProcessesListMessage } let(:request) { '/v3/processes' } diff --git a/spec/unit/controllers/v3/processes_controller_spec.rb b/spec/unit/controllers/v3/processes_controller_spec.rb index 4ae9f35d71..00238cbf41 100644 --- a/spec/unit/controllers/v3/processes_controller_spec.rb +++ b/spec/unit/controllers/v3/processes_controller_spec.rb @@ -17,7 +17,7 @@ it 'eager loads associated resources that the presenter specifies' do expect(VCAP::CloudController::ProcessListFetcher).to receive(:fetch_for_app).with( an_instance_of(VCAP::CloudController::ProcessesListMessage), - hash_including(eager_loaded_associations: %i[labels annotations]) + hash_including(eager_loaded_associations: [:labels, :annotations, { app: %i[buildpack_lifecycle_data cnb_lifecycle_data] }]) ).and_call_original get :index, params: { app_guid: app.guid } @@ -103,7 +103,7 @@ it 'eager loads associated resources that the presenter specifies' do expect(VCAP::CloudController::ProcessListFetcher).to receive(:fetch_all).with( an_instance_of(VCAP::CloudController::ProcessesListMessage), - hash_including(eager_loaded_associations: %i[labels annotations]) + hash_including(eager_loaded_associations: [:labels, :annotations, { app: %i[buildpack_lifecycle_data cnb_lifecycle_data] }]) ).and_call_original get :index diff --git a/spec/unit/models/runtime/droplet_model_spec.rb b/spec/unit/models/runtime/droplet_model_spec.rb index 14264dbaf1..7da70f7f4a 100644 --- a/spec/unit/models/runtime/droplet_model_spec.rb +++ b/spec/unit/models/runtime/droplet_model_spec.rb @@ -349,12 +349,6 @@ module VCAP::CloudController describe '#docker_user' do let(:droplet_model) { DropletModel.make } - context 'when the droplet DOES NOT belong to a Docker lifecycle app' do - it 'returns an empty string' do - expect(droplet_model.docker_user).to eq('') - end - end - context 'when the droplet belongs to a Docker lifecycle app' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"cnb"}' } let(:droplet_model) { DropletModel.make(:docker, execution_metadata: droplet_execution_metadata) }