var req = new ActiveXObject ("MSXML2.ServerXMLHTTP"); var uri = WScript.Arguments(0); var user = null; var pwd = null; if (WScript.Arguments.length > 1) { user = WScript.Arguments(1); } if (WScript.Arguments.length > 2) { pwd = WScript.Arguments(2); } function dumpResponse(r) { WScript.Echo(r.status); WScript.Echo(r.getAllResponseHeaders()); WScript.Echo(r.responseText); } // delete target just in case WScript.Echo("DELETE " + uri); req.open("DELETE", uri, false, user, pwd); req.send(); dumpResponse(req); // create collection WScript.Echo("MKCOL " + uri); req.open("MKCOL", uri, false, user, pwd); req.send(); if ((req.status < 200 || req.status >= 300) && req.status != 405) { WScript.Echo("unexpected status upon MKCOL:" + req.status + " " + req.responseText); WScript.Quit(2); } dumpResponse(req); // put content WScript.Echo("PUT " + uri + "/a"); req.open("PUT", uri + "/a", false, user, pwd); req.send("foobar"); if (req.status < 200 || req.status >= 300) { WScript.Echo("unexpected status upon PUT: " + req.status + " " + req.responseText); WScript.Quit(2); } dumpResponse(req); WScript.Echo("LOCK " + uri); req.open("LOCK", uri, false, user, pwd); req.setRequestHeader("Depth", "infinity"); req.setRequestHeader("Timeout", "Second-60"); req.send(""); dumpResponse(req); var locktoken = null; try { locktoken = req.getResponseHeader("lock-token"); } catch (x) {} if (locktoken == null || locktoken == "") { WScript.Echo("server did not return lock token, trying response body"); WScript.Echo(req.responseText); req.responseXML.setProperty("SelectionLanguage", "XPath"); locktoken = req.responseXML.selectSingleNode("//*[local-name()='href']").text; } else { locktoken = locktoken.substring(1, locktoken.length - 1); } if (req.status == 200 || req.status == 201) { WScript.Echo("locktoken: " + locktoken); } else { WScript.Echo("resource not locked, status: " + req.status + " " + req.responseText); WScript.Quit(2); } // attempt LOCK refresh on indirectly locked resource /a with tag list on parent WScript.Echo("LOCK refresh " + uri + "/a tagged-list on /"); req.open("LOCK", uri + "/a", false, user, pwd); req.setRequestHeader("If", "<" + uri + "> (<" + locktoken + ">)"); req.send(); dumpResponse(req); // attempt LOCK refresh on indirectly locked resource /a WScript.Echo("LOCK refresh " + uri + "/a no-tag list"); req.open("LOCK", uri + "/a", false, user, pwd); req.setRequestHeader("If", "(<" + locktoken + ">)"); req.send(); dumpResponse(req); // attempt LOCK refresh on indirectly locked resource /a WScript.Echo("LOCK refresh " + uri + "/a tagged-list on /a"); req.open("LOCK", uri + "/a", false, user, pwd); req.setRequestHeader("If", "<" + uri + "/a> (<" + locktoken + ">)"); req.send(); dumpResponse(req);