Skip to content

Commit 50b0ffe

Browse files
author
Himani Anil Deshpande
committed
[NVIDIA_IMEX] Adding Unit test for IMEX installation
1 parent dd83140 commit 50b0ffe

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
require 'spec_helper'
2+
3+
shared_dir = "SHARED_DIR"
4+
nvidia_version = "NVIDIA_VERSION"
5+
nvidia_imex_shared_dir = "#{shared_dir}/nvidia-imex"
6+
7+
class ConvergeNvidiaImex
8+
def self.install(chef_run)
9+
chef_run.converge_dsl('aws-parallelcluster-platform') do
10+
nvidia_imex 'install' do
11+
action :install
12+
end
13+
end
14+
end
15+
end
16+
17+
describe 'nvidia_imex:nvidia_enabled_or_installed?' do
18+
for_all_oses do |platform, version|
19+
context "on #{platform}#{version}" do
20+
cached(:chef_run) do
21+
runner(platform: platform, version: version, step_into: ['nvidia_imex'])
22+
end
23+
cached(:resource) do
24+
ConvergeNvidiaImex.install(chef_run)
25+
chef_run.find_resource('nvidia_imex', 'install')
26+
end
27+
28+
context "when nvidia not enabled and not installed" do
29+
before do
30+
allow_any_instance_of(Object).to receive(:nvidia_enabled?).and_return(false)
31+
allow_any_instance_of(Object).to receive(:nvidia_installed?).and_return(false)
32+
end
33+
34+
it 'is false' do
35+
expect(resource.nvidia_enabled_or_installed?).to eq(false)
36+
end
37+
end
38+
39+
context "when nvidia not enabled but its already installed" do
40+
before do
41+
allow_any_instance_of(Object).to receive(:nvidia_enabled?).and_return(false)
42+
allow_any_instance_of(Object).to receive(:nvidia_installed?).and_return(true)
43+
end
44+
45+
it 'is true' do
46+
expect(resource.nvidia_enabled_or_installed?).to eq(true)
47+
end
48+
end
49+
50+
context "when nvidia is enabled but its not installed" do
51+
before do
52+
allow_any_instance_of(Object).to receive(:nvidia_enabled?).and_return(true)
53+
allow_any_instance_of(Object).to receive(:nvidia_installed?).and_return(false)
54+
end
55+
56+
it 'is true' do
57+
expect(resource.nvidia_enabled_or_installed?).to eq(true)
58+
end
59+
end
60+
end
61+
end
62+
end
63+
64+
describe 'nvidia_imex:imex_installed' do
65+
for_all_oses do |platform, version|
66+
context "on #{platform}#{version}" do
67+
imex_binary = '/usr/bin/nvidia-imex'
68+
imex_ctl_binary = '/usr/bin/nvidia-imex-ctl'
69+
cached(:chef_run) do
70+
runner(platform: platform, version: version, step_into: ['nvidia_imex'])
71+
end
72+
cached(:resource) do
73+
ConvergeNvidiaImex.install(chef_run)
74+
chef_run.find_resource('nvidia_imex', 'install')
75+
end
76+
77+
context "when #{imex_binary} and #{imex_ctl_binary} does not exist" do
78+
before do
79+
allow(File).to receive(:exist?).with(imex_ctl_binary).and_return(false)
80+
allow(File).to receive(:exist?).with(imex_binary).and_return(false)
81+
end
82+
83+
it 'is false' do
84+
expect(resource.imex_installed).to eq(false)
85+
end
86+
end
87+
88+
context "when #{imex_binary} and #{imex_ctl_binary} exists" do
89+
before do
90+
allow(File).to receive(:exist?).with(imex_ctl_binary).and_return(true)
91+
allow(File).to receive(:exist?).with(imex_binary).and_return(true)
92+
end
93+
94+
it 'is true' do
95+
expect(resource.imex_installed).to eq(true)
96+
end
97+
end
98+
99+
context "when #{imex_binary} exists and #{imex_ctl_binary} does not exists" do
100+
before do
101+
allow(File).to receive(:exist?).with(imex_ctl_binary).and_return(false)
102+
allow(File).to receive(:exist?).with(imex_binary).and_return(true)
103+
end
104+
105+
it 'is true' do
106+
expect(resource.imex_installed).to eq(true)
107+
end
108+
end
109+
110+
context "when #{imex_binary} does not exists and #{imex_ctl_binary} exists" do
111+
before do
112+
allow(File).to receive(:exist?).with(imex_ctl_binary).and_return(true)
113+
allow(File).to receive(:exist?).with(imex_binary).and_return(false)
114+
end
115+
116+
it 'is true' do
117+
expect(resource.imex_installed).to eq(true)
118+
end
119+
end
120+
end
121+
end
122+
end
123+
124+
describe 'nvidia_imex:install' do
125+
for_all_oses do |platform, version|
126+
context "on #{platform}#{version}" do
127+
context 'when nvidia not enabled' do
128+
cached(:chef_run) do
129+
stubs_for_resource('nvidia_imex') do |res|
130+
allow(res).to receive(:nvidia_enabled_or_installed?).and_return(false)
131+
end
132+
runner = runner(platform: platform, version: version, step_into: ['nvidia_imex'])
133+
ConvergeNvidiaImex.install(runner)
134+
end
135+
cached(:node) { chef_run.node }
136+
137+
it 'does not install nvidia-imex' do
138+
is_expected.not_to install_package('nvidia-imex')
139+
end
140+
end
141+
142+
context 'when nvidia-imex binary already exists' do
143+
cached(:chef_run) do
144+
stubs_for_resource('nvidia_imex') do |res|
145+
allow(res).to receive(:imex_installed).and_return(true)
146+
end
147+
runner = runner(platform: platform, version: version, step_into: ['nvidia_imex'])
148+
ConvergeNvidiaImex.install(runner)
149+
end
150+
cached(:node) { chef_run.node }
151+
152+
it 'does not install nvidia-imex' do
153+
is_expected.not_to install_package('nvidia-imex')
154+
end
155+
end
156+
157+
context 'when nvidia is enabled' do
158+
cached(:chef_run) do
159+
stubs_for_resource('nvidia_imex') do |res|
160+
allow(res).to receive(:nvidia_enabled_or_installed?).and_return(true)
161+
allow(res).to receive(:imex_installed).and_return(false)
162+
end
163+
runner(platform: platform, version: version, step_into: ['nvidia_imex'])
164+
end
165+
166+
before do
167+
chef_run.node.override['cluster']['shared_dir'] = shared_dir
168+
chef_run.node.override['cluster']['nvidia']['driver_version'] = nvidia_version
169+
ConvergeNvidiaImex.install(chef_run)
170+
end
171+
172+
it 'installs nvidia-imex' do
173+
is_expected.to add_nvidia_repo('add nvidia repository')
174+
is_expected.to create_directory(nvidia_imex_shared_dir)
175+
176+
is_expected.to create_template("#{nvidia_imex_shared_dir}/config.cfg")
177+
.with(source: 'nvidia-imex/nvidia-imex-config.erb')
178+
.with(user: 'root')
179+
.with(group: 'root')
180+
.with(mode: '0755')
181+
is_expected.to create_template("#{nvidia_imex_shared_dir}/nodes_config.cfg")
182+
.with(source: 'nvidia-imex/nvidia-imex-nodes.erb')
183+
.with(user: 'root')
184+
.with(group: 'root')
185+
.with(mode: '0755')
186+
is_expected.to create_template("/etc/systemd/system/nvidia-imex.service")
187+
.with(source: 'nvidia-imex/nvidia-imex.service.erb')
188+
.with(user: 'root')
189+
.with(group: 'root')
190+
.with(mode: '0644')
191+
is_expected.to install_package('nvidia-imex')
192+
.with(retries: 3)
193+
.with(retry_delay: 5)
194+
.with(version: nvidia_version)
195+
end
196+
end
197+
end
198+
end
199+
end

0 commit comments

Comments
 (0)