1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# frozen_string_literal: true
RSpec.describe Bundler::Fetcher::CompactIndex do
let(:downloader) { double(:downloader) }
let(:display_uri) { Bundler::URI("http://sampleuri.com") }
let(:remote) { double(:remote, :cache_slug => "lsjdf", :uri => display_uri) }
let(:compact_index) { described_class.new(downloader, remote, display_uri) }
before do
allow(compact_index).to receive(:log_specs) {}
end
describe "#specs_for_names" do
let(:thread_list) { Thread.list.select {|thread| thread.status == "run" } }
let(:thread_inspection) { thread_list.map {|th| " * #{th}:\n #{th.backtrace_locations.join("\n ")}" }.join("\n") }
it "has only one thread open at the end of the run" do
compact_index.specs_for_names(["lskdjf"])
thread_count = thread_list.count
expect(thread_count).to eq(1), "Expected 1 active thread after `#specs_for_names`, but found #{thread_count}. In particular, found:\n#{thread_inspection}"
end
it "calls worker#stop during the run" do
expect_any_instance_of(Bundler::Worker).to receive(:stop).at_least(:once).and_call_original
compact_index.specs_for_names(["lskdjf"])
end
describe "#available?" do
before do
allow(compact_index).to receive(:compact_index_client).
and_return(double(:compact_index_client, :update_and_parse_checksums! => true))
end
it "returns true" do
expect(compact_index).to be_available
end
context "when OpenSSL is not available" do
before do
allow(compact_index).to receive(:require).with("openssl").and_raise(LoadError)
end
it "returns true" do
expect(compact_index).to be_available
end
end
context "when OpenSSL is FIPS-enabled" do
def remove_cached_md5_availability
return unless Bundler::SharedHelpers.instance_variable_defined?(:@md5_available)
Bundler::SharedHelpers.remove_instance_variable(:@md5_available)
end
before do
remove_cached_md5_availability
stub_const("OpenSSL::OPENSSL_FIPS", true)
end
after { remove_cached_md5_availability }
context "when FIPS-mode is active" do
before do
allow(OpenSSL::Digest::MD5).to receive(:digest).
and_raise(OpenSSL::Digest::DigestError)
end
it "returns false" do
expect(compact_index).to_not be_available
end
end
it "returns true" do
expect(compact_index).to be_available
end
end
end
context "logging" do
before { allow(compact_index).to receive(:log_specs).and_call_original }
context "with debug on" do
before do
allow(Bundler).to receive_message_chain(:ui, :debug?).and_return(true)
end
it "should log at info level" do
expect(Bundler).to receive_message_chain(:ui, :debug).with('Looking up gems ["lskdjf"]')
compact_index.specs_for_names(["lskdjf"])
end
end
context "with debug off" do
before do
allow(Bundler).to receive_message_chain(:ui, :debug?).and_return(false)
end
it "should log at info level" do
expect(Bundler).to receive_message_chain(:ui, :info).with(".", false)
compact_index.specs_for_names(["lskdjf"])
end
end
end
end
end
|