54 lines
1.7 KiB
Ruby
54 lines
1.7 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Peek::Views::Memory, :request_store do
|
||
|
subject! { described_class.new }
|
||
|
|
||
|
before do
|
||
|
stub_memory_instrumentation
|
||
|
end
|
||
|
|
||
|
context 'with process_action.action_controller notification' do
|
||
|
it 'returns empty results when it has not yet fired' do
|
||
|
expect(subject.results).to eq({})
|
||
|
end
|
||
|
|
||
|
it 'returns memory instrumentation data when it has fired' do
|
||
|
publish_notification
|
||
|
|
||
|
expect(subject.results[:calls]).to eq('2 MB')
|
||
|
expect(subject.results[:details]).to all(have_key(:item_header))
|
||
|
expect(subject.results[:details]).to all(have_key(:item_content))
|
||
|
expect(subject.results[:summary]).to include('Objects allocated' => '200 k')
|
||
|
expect(subject.results[:summary]).to include('Allocator calls' => '500')
|
||
|
expect(subject.results[:summary]).to include('Large allocations' => '1 KB')
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def stub_memory_instrumentation
|
||
|
start_memory = {
|
||
|
total_malloc_bytes: 1,
|
||
|
total_mallocs: 2,
|
||
|
total_allocated_objects: 3
|
||
|
}
|
||
|
allow(Gitlab::Memory::Instrumentation).to receive(:start_thread_memory_allocations).and_return(start_memory)
|
||
|
allow(Gitlab::Memory::Instrumentation).to receive(:measure_thread_memory_allocations).with(start_memory).and_return({
|
||
|
mem_total_bytes: 2_097_152,
|
||
|
mem_bytes: 1024,
|
||
|
mem_mallocs: 500,
|
||
|
mem_objects: 200_000
|
||
|
})
|
||
|
Gitlab::InstrumentationHelper.init_instrumentation_data
|
||
|
end
|
||
|
|
||
|
def publish_notification
|
||
|
headers = double
|
||
|
allow(headers).to receive(:env).and_return('action_dispatch.request_id': 'req-42')
|
||
|
|
||
|
ActiveSupport::Notifications.publish(
|
||
|
'process_action.action_controller', Time.current - 1.second, Time.current, 'id', headers: headers
|
||
|
)
|
||
|
end
|
||
|
end
|