Skip to content

Commit 787ae10

Browse files
committed
address missed Copilot review
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 3daa913 commit 787ae10

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

core/src/main/java/org/apache/cloudstack/vm/bootgroup/readiness/InstanceReadinessCheckAnswer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ public InstanceReadinessCheckAnswer(InstanceReadinessCheckCommand cmd, boolean r
3737

3838
public Map<String, String> getExecutionDetails() {
3939
final Map<String, String> executionDetails = new HashMap<>();
40-
if (getResult() && StringUtils.isNotEmpty(getDetails())) {
41-
final String[] parts = getDetails().split("&&");
40+
final String details = getDetails();
41+
if (StringUtils.isNotEmpty(details) && details.contains("&&")) {
42+
final String[] parts = details.split("&&");
4243
if (parts.length >= 3) {
4344
executionDetails.put(STDOUT, parts[0].trim());
4445
executionDetails.put(STDERR, parts[1].trim());
@@ -48,7 +49,7 @@ public Map<String, String> getExecutionDetails() {
4849
}
4950
} else {
5051
executionDetails.put(STDOUT, "");
51-
executionDetails.put(STDERR, getDetails());
52+
executionDetails.put(STDERR, details);
5253
executionDetails.put(EXITCODE, "-1");
5354
}
5455
return executionDetails;

core/src/test/java/org/apache/cloudstack/vm/bootgroup/readiness/InstanceReadinessCheckAnswerTest.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,36 @@ public void malformedSuccessfulDetailsThrow() {
5656
new InstanceReadinessCheckAnswer(cmd(), true, "out&&err").getExecutionDetails();
5757
}
5858

59+
@Test(expected = CloudRuntimeException.class)
60+
public void malformedFailedDetailsThrow() {
61+
new InstanceReadinessCheckAnswer(cmd(), false, "out&&err").getExecutionDetails();
62+
}
63+
64+
@Test
65+
public void failedResultIsStillParsedWhenWellFormed() {
66+
// executeInVR (and the VR script) typically reports result=false whenever the underlying
67+
// check (ping unreachable, port closed) exits non-zero, even though it still printed a
68+
// well-formed "stdout&&stderr&&exitcode" triple. The non-zero exit code must not be
69+
// discarded in favor of a generic -1/raw-blob fallback.
70+
InstanceReadinessCheckAnswer answer = new InstanceReadinessCheckAnswer(cmd(), false, "out&&unreachable&&1");
71+
72+
Map<String, String> details = answer.getExecutionDetails();
73+
74+
Assert.assertEquals("out", details.get(InstanceReadinessCheckAnswer.STDOUT));
75+
Assert.assertEquals("unreachable", details.get(InstanceReadinessCheckAnswer.STDERR));
76+
Assert.assertEquals("1", details.get(InstanceReadinessCheckAnswer.EXITCODE));
77+
}
78+
5979
@Test
60-
public void failedResultIsNotParsedEvenIfWellFormed() {
61-
InstanceReadinessCheckAnswer answer = new InstanceReadinessCheckAnswer(cmd(), false, "out&&err&&0");
80+
public void failedResultWithoutDelimiterFallsBackToDefaults() {
81+
// A dispatch-level failure (e.g. an exception message) never contains the delimiter and
82+
// must still fall back to the raw-message/-1 defaults rather than throwing.
83+
InstanceReadinessCheckAnswer answer = new InstanceReadinessCheckAnswer(cmd(), false, "agent down");
6284

6385
Map<String, String> details = answer.getExecutionDetails();
6486

6587
Assert.assertEquals("", details.get(InstanceReadinessCheckAnswer.STDOUT));
66-
Assert.assertEquals("out&&err&&0", details.get(InstanceReadinessCheckAnswer.STDERR));
88+
Assert.assertEquals("agent down", details.get(InstanceReadinessCheckAnswer.STDERR));
6789
Assert.assertEquals("-1", details.get(InstanceReadinessCheckAnswer.EXITCODE));
6890
}
6991

0 commit comments

Comments
 (0)