@@ -1196,6 +1196,7 @@ func TestUpdateInitramfsForGrub_NoExtraModules(t *testing.T) {
11961196 originalExecutor := shell .Default
11971197 defer func () { shell .Default = originalExecutor }()
11981198 mockExpectedOutput := []shell.MockCommand {
1199+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
11991200 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "update-initramfs: Generating /boot/initrd.img-" + kernelVersion , Error : nil },
12001201 }
12011202 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
@@ -1222,6 +1223,7 @@ func TestUpdateInitramfsForGrub_WithSingleExtraModule(t *testing.T) {
12221223 defer func () { shell .Default = originalExecutor }()
12231224 mockExpectedOutput := []shell.MockCommand {
12241225 {Pattern : "echo 'intel_vpu' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
1226+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
12251227 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "update-initramfs: Generating /boot/initrd.img-" + kernelVersion , Error : nil },
12261228 }
12271229 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
@@ -1250,6 +1252,7 @@ func TestUpdateInitramfsForGrub_WithMultipleExtraModules(t *testing.T) {
12501252 {Pattern : "echo 'intel_vpu' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
12511253 {Pattern : "echo 'nvidia_drm' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
12521254 {Pattern : "echo 'i915' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
1255+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
12531256 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "update-initramfs: Generating /boot/initrd.img-" + kernelVersion , Error : nil },
12541257 }
12551258 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
@@ -1277,6 +1280,7 @@ func TestUpdateInitramfsForGrub_WithWhitespaceInModules(t *testing.T) {
12771280 mockExpectedOutput := []shell.MockCommand {
12781281 {Pattern : "echo 'intel_vpu' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
12791282 {Pattern : "echo 'nvidia_drm' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
1283+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
12801284 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "update-initramfs: Generating /boot/initrd.img-" + kernelVersion , Error : nil },
12811285 }
12821286 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
@@ -1302,19 +1306,49 @@ func TestUpdateInitramfsForGrub_UpdateInitramfsFails(t *testing.T) {
13021306 originalExecutor := shell .Default
13031307 defer func () { shell .Default = originalExecutor }()
13041308 mockExpectedOutput := []shell.MockCommand {
1309+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
13051310 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "" , Error : fmt .Errorf ("update-initramfs failed" )},
13061311 }
13071312 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
13081313
13091314 err := updateInitramfsForGrub (tmpDir , kernelVersion , template )
13101315 if err == nil {
13111316 t .Error ("Expected error when update-initramfs fails" )
1317+ return
13121318 }
13131319 if ! strings .Contains (err .Error (), "failed to update initramfs" ) {
13141320 t .Errorf ("Expected update initramfs error, got: %v" , err )
13151321 }
13161322}
13171323
1324+ func TestUpdateInitramfsForGrub_FallbackToDracut (t * testing.T ) {
1325+ tmpDir := t .TempDir ()
1326+ kernelVersion := "6.2.0-26-generic"
1327+
1328+ template := & config.ImageTemplate {
1329+ SystemConfig : config.SystemConfig {
1330+ Kernel : config.KernelConfig {
1331+ EnableExtraModules : "intel_vpu" ,
1332+ },
1333+ },
1334+ }
1335+
1336+ originalExecutor := shell .Default
1337+ defer func () { shell .Default = originalExecutor }()
1338+ mockExpectedOutput := []shell.MockCommand {
1339+ {Pattern : "echo 'intel_vpu' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
1340+ {Pattern : "command -v update-initramfs" , Output : "" , Error : nil },
1341+ {Pattern : "command -v dracut" , Output : "/usr/bin/dracut\n " , Error : nil },
1342+ {Pattern : "dracut --force --kver " + kernelVersion + " /boot/initrd.img-" + kernelVersion + " --add-drivers 'intel_vpu'" , Output : "" , Error : nil },
1343+ }
1344+ shell .Default = shell .NewMockExecutor (mockExpectedOutput )
1345+
1346+ err := updateInitramfsForGrub (tmpDir , kernelVersion , template )
1347+ if err != nil {
1348+ t .Errorf ("Expected no error when falling back to dracut, got: %v" , err )
1349+ }
1350+ }
1351+
13181352func TestUpdateInitramfsForGrub_ModuleAddFailsContinues (t * testing.T ) {
13191353 tmpDir := t .TempDir ()
13201354 kernelVersion := "5.15.0-73-generic"
@@ -1332,6 +1366,7 @@ func TestUpdateInitramfsForGrub_ModuleAddFailsContinues(t *testing.T) {
13321366 mockExpectedOutput := []shell.MockCommand {
13331367 {Pattern : "echo 'intel_vpu' >> /etc/initramfs-tools/modules" , Output : "" , Error : fmt .Errorf ("failed to add module" )},
13341368 {Pattern : "echo 'nvidia_drm' >> /etc/initramfs-tools/modules" , Output : "" , Error : nil },
1369+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
13351370 {Pattern : "update-initramfs -u -k " + kernelVersion , Output : "update-initramfs: Generating /boot/initrd.img-" + kernelVersion , Error : nil },
13361371 }
13371372 shell .Default = shell .NewMockExecutor (mockExpectedOutput )
@@ -1396,6 +1431,7 @@ func TestInstallImageBoot_GrubWithEnableExtraModules(t *testing.T) {
13961431 {Pattern : "blkid.*UUID" , Output : "UUID=test-uuid\n " , Error : nil },
13971432 {Pattern : "blkid.*PARTUUID" , Output : "PARTUUID=test-partuuid\n " , Error : nil },
13981433 {Pattern : "command -v grub2-mkconfig" , Output : "/usr/sbin/grub2-mkconfig" , Error : nil },
1434+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
13991435 {Pattern : "mkdir" , Output : "" , Error : nil },
14001436 {Pattern : "cp" , Output : "" , Error : nil },
14011437 {Pattern : "sed" , Output : "" , Error : nil },
@@ -1470,6 +1506,7 @@ func TestInstallImageBoot_GrubWithEnableExtraModulesUbuntu(t *testing.T) {
14701506 {Pattern : "blkid.*UUID" , Output : "UUID=ubuntu-uuid\n " , Error : nil },
14711507 {Pattern : "blkid.*PARTUUID" , Output : "PARTUUID=ubuntu-partuuid\n " , Error : nil },
14721508 {Pattern : "command -v grub2-mkconfig" , Output : "/usr/sbin/grub2-mkconfig" , Error : nil },
1509+ {Pattern : "command -v update-initramfs" , Output : "/usr/sbin/update-initramfs\n " , Error : nil },
14731510 {Pattern : "mkdir" , Output : "" , Error : nil },
14741511 {Pattern : "cp" , Output : "" , Error : nil },
14751512 {Pattern : "sed" , Output : "" , Error : nil },
0 commit comments