Skip to content

Commit 5934307

Browse files
committed
fix
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 91a27df commit 5934307

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

plugins/hypervisors/kvm/src/main/java/org/apache/cloudstack/utils/qemu/QemuImg.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,17 @@ protected void addScriptOptionsFromMap(Map<String, String> options, Script s) {
717717
s.add(optionsStr);
718718
}
719719

720+
protected void addScriptResizeOptionsFromMap(Map<String, String> options, Script s) {
721+
if (MapUtils.isEmpty(options)) {
722+
return;
723+
}
724+
if (options.containsKey(PREALLOCATION)) {
725+
s.add(String.format("--%s=%s", PREALLOCATION, options.get(PREALLOCATION)));
726+
options.remove(PREALLOCATION);
727+
}
728+
addScriptOptionsFromMap(options, s);
729+
}
730+
720731
/**
721732
* Rebases the backing file of the image.
722733
*
@@ -792,7 +803,7 @@ public void resize(final QemuImgFile file, final long size, final boolean delta,
792803

793804
final Script s = new Script(_qemuImgPath);
794805
s.add("resize");
795-
addScriptOptionsFromMap(options, s);
806+
addScriptResizeOptionsFromMap(options, s);
796807
s.add(file.getFileName());
797808
s.add(newSize);
798809
s.execute();

plugins/hypervisors/kvm/src/test/java/org/apache/cloudstack/utils/qemu/QemuImgTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,4 +511,55 @@ public void getResizeOptionsFromConvertOptionsHandlesMixedOptions() throws Libvi
511511
assertEquals(1, result.size());
512512
assertEquals("full", result.get(QemuImg.PREALLOCATION));
513513
}
514+
515+
@Test
516+
public void addScriptResizeOptionsFromMapAddsPreallocationOption() throws LibvirtException, QemuImgException {
517+
Script script = Mockito.mock(Script.class);
518+
Map<String, String> options = new HashMap<>();
519+
options.put(QemuImg.PREALLOCATION, "metadata");
520+
521+
QemuImg qemuImg = new QemuImg(0);
522+
qemuImg.addScriptResizeOptionsFromMap(options, script);
523+
524+
Mockito.verify(script, Mockito.times(1)).add("--preallocation=metadata");
525+
Mockito.verify(script, Mockito.never()).add("-o");
526+
assertTrue(options.isEmpty());
527+
}
528+
529+
@Test
530+
public void addScriptResizeOptionsFromMapHandlesEmptyOptions() throws LibvirtException, QemuImgException {
531+
Script script = Mockito.mock(Script.class);
532+
Map<String, String> options = new HashMap<>();
533+
534+
QemuImg qemuImg = new QemuImg(0);
535+
qemuImg.addScriptResizeOptionsFromMap(options, script);
536+
537+
Mockito.verify(script, Mockito.never()).add(Mockito.anyString());
538+
}
539+
540+
@Test
541+
public void addScriptResizeOptionsFromMapHandlesNullOptions() throws LibvirtException, QemuImgException {
542+
Script script = Mockito.mock(Script.class);
543+
544+
QemuImg qemuImg = new QemuImg(0);
545+
qemuImg.addScriptResizeOptionsFromMap(null, script);
546+
547+
Mockito.verify(script, Mockito.never()).add(Mockito.anyString());
548+
}
549+
550+
@Test
551+
public void addScriptResizeOptionsFromMapHandlesMixedOptions() throws LibvirtException, QemuImgException {
552+
Script script = Mockito.mock(Script.class);
553+
Map<String, String> options = new HashMap<>();
554+
options.put(QemuImg.PREALLOCATION, "full");
555+
options.put("key", "value");
556+
557+
QemuImg qemuImg = new QemuImg(0);
558+
qemuImg.addScriptResizeOptionsFromMap(options, script);
559+
560+
Mockito.verify(script, Mockito.times(1)).add("--preallocation=full");
561+
Mockito.verify(script, Mockito.times(1)).add("-o");
562+
Mockito.verify(script, Mockito.times(1)).add("key=value");
563+
assertFalse(options.containsKey(QemuImg.PREALLOCATION));
564+
}
514565
}

0 commit comments

Comments
 (0)