Skip to content

Commit

Permalink
Fixed ResponseExtractor to return the exit code of the CommandState t…
Browse files Browse the repository at this point in the history
…hat is Done instead the first one. Fixes #79.
  • Loading branch information
Vincent Partington committed Jul 17, 2013
1 parent 72c4573 commit 0e1693a
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/java/com/xebialabs/overthere/cifs/winrm/ResponseExtractor.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
public enum ResponseExtractor {

COMMAND_ID("CommandId"),
EXIT_CODE("ExitCode"),
EXIT_CODE("CommandState[@State='http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done']/rsp:ExitCode", Namespaces.NS_WIN_SHELL),
SHELL_ID("Selector[@Name='ShellId']", Namespaces.NS_WSMAN_DMTF),
STDOUT("Stream[@Name='stdout']"),
STDERR("Stream[@Name='stderr']"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.xebialabs.overthere.cifs.winrm;

import java.io.IOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.junit.Test;

import com.google.common.base.Joiner;
import com.google.common.io.Resources;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

public class ResponseExtractorTest {


@Test
public void checkReturnExitCodeWinRmV1() throws IOException, DocumentException {
Document doc = getRequestDocument("winrm/winrm-exitcode-test_10.xml");
String exitCode = getFirstElement(doc,ResponseExtractor.EXIT_CODE.getXPath());
assertThat(exitCode, equalTo("12"));
}

@Test
public void checkReturnExitCodeWinRmV2() throws IOException, DocumentException {
Document doc = getRequestDocument("winrm/winrm-exitcode-test_20.xml");
String exitCode = getFirstElement(doc,ResponseExtractor.EXIT_CODE.getXPath());
assertThat(exitCode, equalTo("16"));
}

@SuppressWarnings("unchecked")
private static String getFirstElement(Document doc, XPath xpath) {
final List<Element> nodes = xpath.selectNodes(doc);
assertThat(nodes.isEmpty(),equalTo(false));
assertThat(nodes.size(),equalTo(1));
final Element next = nodes.iterator().next();
return next.getText();
}

private Document getRequestDocument(String path) throws DocumentException, IOException {
URL resource = Resources.getResource(path);
List<String> list = Resources.readLines(resource, Charset.defaultCharset());
Document responseDocument = DocumentHelper.parseText(Joiner.on("\n|").join(list));
return responseDocument;
}
}
57 changes: 57 additions & 0 deletions src/test/resources/winrm/winrm-exitcode-test_10.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<s:Envelope xml:lang="en-US" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><s:Header><a:Action >http://schemas.microsoft.com/wbem/wsman/1/windows/shell/ReceiveResponse</a:Action><a:MessageID >uuid:8CB35363-8B76-4B7D-A3B7-44BD33798181</a:MessageID><a:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:To><a:RelatesTo >uuid:796FAB7C-166C-4936-A126-4185697AA457</a:RelatesTo></s:Header><s:Body><rsp:ReceiveResponse xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell"><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stdout" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488">DQo=
</rsp:Stream><rsp:CommandState xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Running" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488"><rsp:ExitCode>0</rsp:ExitCode></rsp:CommandState><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stderr" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488">RmlsZSBub3QgZm91bmQgLSAqLioNCg==
</rsp:Stream><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stdout" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488">QzpcV0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1w
XGdlbmVyaWNfcGx1Z2luLnRtcD5zZXQgVkVSU0lPTj1DTi02LjIuOS4wMjIgDQo=
</rsp:Stream><rsp:CommandState xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Pending" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488"><rsp:ExitCode>12</rsp:ExitCode></rsp:CommandState><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stderr" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488" End="true"></rsp:Stream><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stdout" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488">DQpDOlxXSU5ET1dTXFRlbXBcb3ZlcnRoZXJlLTIwMTMwNzE3VDE1NDkyNTQ0Ni50
bXBcZ2VuZXJpY19wbHVnaW4udG1wPnNldCBDT05GSUdVUkU9dHJ1ZSANCg0KQzpc
V0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdl
bmVyaWNfcGx1Z2luLnRtcD5zZXQgREVQTE9ZX05JTD1mYWxzZSANCg0KQzpcV0lO
RE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdlbmVy
aWNfcGx1Z2luLnRtcD5zZXQgREVQTE9ZX0lOVF9TRVJWRVI9ZmFsc2UgDQoNCkM6
XFdJTkRPV1NcVGVtcFxvdmVydGhlcmUtMjAxMzA3MTdUMTU0OTI1NDQ2LnRtcFxn
ZW5lcmljX3BsdWdpbi50bXA+c2V0IERFUExPWV9FWFRfU0VSVkVSPWZhbHNlIA0K
DQpDOlxXSU5ET1dTXFRlbXBcb3ZlcnRoZXJlLTIwMTMwNzE3VDE1NDkyNTQ0Ni50
bXBcZ2VuZXJpY19wbHVnaW4udG1wPnNldCBERVBMT1lfV1NHVz1mYWxzZSANCg0K
QzpcV0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1w
XGdlbmVyaWNfcGx1Z2luLnRtcD5zZXQgTElTVEFQUFM9ZmFsc2UgDQoNCkM6XFdJ
TkRPV1NcVGVtcFxvdmVydGhlcmUtMjAxMzA3MTdUMTU0OTI1NDQ2LnRtcFxnZW5l
cmljX3BsdWdpbi50bXA+c2V0IEFETUlOPWNjLWktZDE2MC1jMDAtYTAxLmNyLnJv
b3Q0Lm5ldCANCg0KQzpcV0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1Qx
NTQ5MjU0NDYudG1wXGdlbmVyaWNfcGx1Z2luLnRtcD5zZXQgRU5WPVNJVEUyIA0K
DQpDOlxXSU5ET1dTXFRlbXBcb3ZlcnRoZXJlLTIwMTMwNzE3VDE1NDkyNTQ0Ni50
bXBcZ2VuZXJpY19wbHVnaW4udG1wPnNldCBKQVZBX0hPTUU9ZDpcamF2YVxqcm9j
a2l0LWpkazEuNi4wXzI5LVIyOC4yLjItNC4xLjAtMzJiaXQgDQoNCkM6XFdJTkRP
V1NcVGVtcFxvdmVydGhlcmUtMjAxMzA3MTdUMTU0OTI1NDQ2LnRtcFxnZW5lcmlj
X3BsdWdpbi50bXA+c2V0IE1BVkVOX0hPTUU9RDpcbWF2ZW5cYXBhY2hlLW1hdmVu
LTIuMi4xXGJpbiANCg0KQzpcV0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcx
N1QxNTQ5MjU0NDYudG1wXGdlbmVyaWNfcGx1Z2luLnRtcD5zZXQgREVMSVZFUllI
T01FPWQ6XGRlbGl2ZXJpZXNcdXBsb2FkXENvcnBvcmF0ZU5ldGJhbmsgDQoNCkM6
XFdJTkRPV1NcVGVtcFxvdmVydGhlcmUtMjAxMzA3MTdUMTU0OTI1NDQ2LnRtcFxn
ZW5lcmljX3BsdWdpbi50bXA+c2V0IElNUE9SVEhPTUU9ZDpcZGVsaXZlcmllc1xp
bXBvcnRcQ29ycG9yYXRlTmV0YmFua1wgDQoNCkM6XFdJTkRPV1NcVGVtcFxvdmVy
dGhlcmUtMjAxMzA3MTdUMTU0OTI1NDQ2LnRtcFxnZW5lcmljX3BsdWdpbi50bXA+
c2V0IERJU1RSSUJVVElPTkhPTUU9ZDpcZGVsaXZlcmllc1xpbXBvcnRcQ29ycG9y
YXRlTmV0YmFua1xDTi02LjIuOS4wMjJcZGlzdHJpYnV0aW9uIA0KDQpDOlxXSU5E
T1dTXFRlbXBcb3ZlcnRoZXJlLTIwMTMwNzE3VDE1NDkyNTQ0Ni50bXBcZ2VuZXJp
Y19wbHVnaW4udG1wPnNldCBDTl9ESVNUUklCVVRJT05fUEFUSD1kOi9kZWxpdmVy
aWVzL2ltcG9ydC9Db3Jwb3JhdGVOZXRiYW5rL0NOLTYuMi45LjAyMi9kaXN0cmli
dXRpb24gDQoNCkM6XFdJTkRPV1NcVGVtcFxvdmVydGhlcmUtMjAxMzA3MTdUMTU0
OTI1NDQ2LnRtcFxnZW5lcmljX3BsdWdpbi50bXA+c2V0IEFQUENPTkZJRz1EOlxz
bmFwc2hvdHNcTWlkYXNJbmZyYXN0cnVjdHVyZS0zXE1pZGFzSW5mcmFzdHJ1Y3R1
cmVcQXBwQ29uZmlnXENvcnBvcmF0ZW5ldGJhbmtfMDFcY2MtaSANCg0KQzpcV0lO
RE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdlbmVy
aWNfcGx1Z2luLnRtcD5zZXQgU1VTRVI9Ym9vdCANCg0KQzpcV0lORE9XU1xUZW1w
XG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdlbmVyaWNfcGx1Z2lu
LnRtcD5zZXQgU1BBU1NXT1JEPXFhenhzdzIxIA0KDQpDOlxXSU5ET1dTXFRlbXBc
b3ZlcnRoZXJlLTIwMTMwNzE3VDE1NDkyNTQ0Ni50bXBcZ2VuZXJpY19wbHVnaW4u
dG1wPnNldCBOSUxTRVJWRVI9TklMX1NFUlZFUiANCg0KQzpcV0lORE9XU1xUZW1w
XG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdlbmVyaWNfcGx1Z2lu
LnRtcD5zZXQgSU5UU0VSVkVSPUlOVEVSTkFMX1NFUlZFUiANCg0KQzpcV0lORE9X
U1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdlbmVyaWNf
cGx1Z2luLnRtcD5zZXQgRVhUU0VSVkVSPUVYVEVSTkFMX1NFUlZFUiANCg0KQzpc
V0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1wXGdl
bmVyaWNfcGx1Z2luLnRtcD5zZXQgV1NHV1NFUlZFUj1XU0dXX1NFUlZFUiANCg0K
QzpcV0lORE9XU1xUZW1wXG92ZXJ0aGVyZS0yMDEzMDcxN1QxNTQ5MjU0NDYudG1w
XGdlbmVyaWNfcGx1Z2luLnRtcD5lY2hvIG9mZiANCjAgRmlsZShzKSBjb3BpZWQN
Cg==
</rsp:Stream><rsp:Stream xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" Name="stdout" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488" End="true"></rsp:Stream><rsp:CommandState xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done" CommandId="bc7e8420-01eb-48f4-b06e-51478b956488"><rsp:ExitCode>12</rsp:ExitCode></rsp:CommandState></rsp:ReceiveResponse></s:Body></s:Envelope>
1 change: 1 addition & 0 deletions src/test/resources/winrm/winrm-exitcode-test_20.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<s:Envelope xml:lang="en-US" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns:rsp="http://schemas.microsoft.com/wbem/wsman/1/windows/shell" xmlns:p="http://schemas.microsoft.com/wbem/wsman/1/wsman.xsd"><s:Header><a:Action>http://schemas.microsoft.com/wbem/wsman/1/windows/shell/ReceiveResponse</a:Action><a:MessageID>uuid:72712A7D-425C-47FE-A35D-DA7BF1864B1D</a:MessageID><a:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:To><a:RelatesTo>uuid:2DA65A4C-2FCC-46EF-BCDB-F6BC02E4CD57</a:RelatesTo></s:Header><s:Body><rsp:ReceiveResponse><rsp:Stream Name="stdout" CommandId="6FE4F045-D1DA-45F1-AD04-2B9499C3CA68">DQo=</rsp:Stream><rsp:Stream Name="stdout" CommandId="6FE4F045-D1DA-45F1-AD04-2B9499C3CA68">QzpcVEVNUD5lY2hvIEV4aXRpbmcgd2l0aCAxNiANCkV4aXRpbmcgd2l0aCAxNg0KDQpDOlxURU1QPmV4aXQgMTYgDQo=</rsp:Stream><rsp:Stream Name="stdout" CommandId="6FE4F045-D1DA-45F1-AD04-2B9499C3CA68" End="true"></rsp:Stream><rsp:Stream Name="stderr" CommandId="6FE4F045-D1DA-45F1-AD04-2B9499C3CA68" End="true"></rsp:Stream><rsp:CommandState CommandId="6FE4F045-D1DA-45F1-AD04-2B9499C3CA68" State="http://schemas.microsoft.com/wbem/wsman/1/windows/shell/CommandState/Done"><rsp:ExitCode>16</rsp:ExitCode></rsp:CommandState></rsp:ReceiveResponse></s:Body></s:Envelope>

0 comments on commit 0e1693a

Please sign in to comment.