1# frozen_string_literal: true 2 3require 'spec_helper' 4 5class FakeLogger 6end 7 8class LoggerA < Gitlab::Logger 9 def self.file_name_noext 10 'loggerA' 11 end 12end 13 14class LoggerB < Gitlab::JsonLogger 15 def self.file_name_noext 16 'loggerB' 17 end 18end 19 20class TestLogger < Gitlab::MultiDestinationLogger 21 LOGGERS = [LoggerA, LoggerB].freeze 22 23 def self.loggers 24 LOGGERS 25 end 26end 27 28class EmptyLogger < Gitlab::MultiDestinationLogger 29 def self.loggers 30 [] 31 end 32end 33 34RSpec.describe Gitlab::MultiDestinationLogger do 35 after(:all) do 36 TestLogger.loggers.each do |logger| 37 log_file_path = "#{Rails.root}/log/#{logger.file_name}" 38 File.delete(log_file_path) 39 end 40 end 41 42 context 'with no primary logger set' do 43 subject { EmptyLogger } 44 45 it 'primary_logger raises an error' do 46 expect { subject.primary_logger }.to raise_error(NotImplementedError) 47 end 48 end 49 50 context 'with 2 loggers set' do 51 subject { TestLogger } 52 53 it 'logs info to 2 loggers' do 54 expect(subject.loggers).to all(receive(:build).and_call_original) 55 56 subject.info('Hello World') 57 end 58 end 59end 60