From 5ce03abad676039574c10f1b8a0f1312652464bd Mon Sep 17 00:00:00 2001 From: R Hirner Date: Sat, 20 Dec 2014 22:10:40 +0100 Subject: [PATCH] Re-enable tests again --- app/build.gradle | 3 - app/src/androidTest/assets/all-day-0sec.ics | 11 + app/src/androidTest/assets/all-day-10days.ics | 11 + app/src/androidTest/assets/all-day-1day.ics | 11 + .../androidTest/assets/event-on-that-day.ics | 11 + app/src/androidTest/assets/impp.vcf | 9 + .../assets/invalid-unknown-properties.vcf | 5 + app/src/androidTest/assets/reference.vcf | 16 + app/src/androidTest/assets/test.random | Bin 0 -> 1000 bytes app/src/androidTest/assets/vcard3-sample1.vcf | 16 + .../androidTest/assets/vienna-evolution.ics | 33 +++ .../davdroid/{test => }/ArrayUtilsTest.java | 2 +- .../davdroid/{test => }/ContactTest.java | 2 +- .../Constants.java => TestConstants.java} | 4 +- .../davdroid/{test => }/URLUtilsTest.java | 2 +- .../resource/{test => }/ContactTest.java | 0 .../resource/{test => }/EventTest.java | 0 .../{test => }/LocalCalendarTest.java | 0 .../syncadapter/DavResourceFinderTest.java | 10 +- .../webdav/DavRedirectStrategyTest.java | 28 +- .../davdroid/webdav/WebDavResourceTest.java | 14 +- app/src/androidTest/robohydra/.gitignore | 1 + app/src/androidTest/robohydra/davdroid.conf | 6 + .../robohydra/plugins/assets/index.js | 12 + .../robohydra/plugins/dav-invalid/index.js | 36 +++ .../robohydra/plugins/dav/index.js | 278 ++++++++++++++++++ .../androidTest/robohydra/plugins/headdav.js | 57 ++++ .../robohydra/plugins/redirect/index.js | 57 ++++ .../androidTest/robohydra/plugins/simple.js | 28 ++ app/src/androidTest/robohydra/run.sh | 2 + 30 files changed, 631 insertions(+), 34 deletions(-) create mode 100644 app/src/androidTest/assets/all-day-0sec.ics create mode 100644 app/src/androidTest/assets/all-day-10days.ics create mode 100644 app/src/androidTest/assets/all-day-1day.ics create mode 100644 app/src/androidTest/assets/event-on-that-day.ics create mode 100644 app/src/androidTest/assets/impp.vcf create mode 100644 app/src/androidTest/assets/invalid-unknown-properties.vcf create mode 100644 app/src/androidTest/assets/reference.vcf create mode 100644 app/src/androidTest/assets/test.random create mode 100644 app/src/androidTest/assets/vcard3-sample1.vcf create mode 100644 app/src/androidTest/assets/vienna-evolution.ics rename app/src/androidTest/java/at/bitfire/davdroid/{test => }/ArrayUtilsTest.java (97%) rename app/src/androidTest/java/at/bitfire/davdroid/{test => }/ContactTest.java (98%) rename app/src/androidTest/java/at/bitfire/davdroid/{test/Constants.java => TestConstants.java} (85%) rename app/src/androidTest/java/at/bitfire/davdroid/{test => }/URLUtilsTest.java (98%) rename app/src/androidTest/java/at/bitfire/davdroid/resource/{test => }/ContactTest.java (100%) rename app/src/androidTest/java/at/bitfire/davdroid/resource/{test => }/EventTest.java (100%) rename app/src/androidTest/java/at/bitfire/davdroid/resource/{test => }/LocalCalendarTest.java (100%) create mode 100644 app/src/androidTest/robohydra/.gitignore create mode 100644 app/src/androidTest/robohydra/davdroid.conf create mode 100644 app/src/androidTest/robohydra/plugins/assets/index.js create mode 100644 app/src/androidTest/robohydra/plugins/dav-invalid/index.js create mode 100644 app/src/androidTest/robohydra/plugins/dav/index.js create mode 100644 app/src/androidTest/robohydra/plugins/headdav.js create mode 100644 app/src/androidTest/robohydra/plugins/redirect/index.js create mode 100644 app/src/androidTest/robohydra/plugins/simple.js create mode 100755 app/src/androidTest/robohydra/run.sh diff --git a/app/build.gradle b/app/build.gradle index 6b2cd06a..97e1bc60 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,9 +8,6 @@ android { applicationId "at.bitfire.davdroid" minSdkVersion 14 targetSdkVersion 21 - - testApplicationId "at.bitfire.davdroid.test" - testInstrumentationRunner "android.test.InstrumentationTestRunner" } buildTypes { diff --git a/app/src/androidTest/assets/all-day-0sec.ics b/app/src/androidTest/assets/all-day-0sec.ics new file mode 100644 index 00000000..07679f29 --- /dev/null +++ b/app/src/androidTest/assets/all-day-0sec.ics @@ -0,0 +1,11 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +UID:all-day-0sec@example.com +DTSTAMP:20140101T000000Z +DTSTART;VALUE=DATE:19970714 +DTEND;VALUE=DATE:19970714 +SUMMARY:0 Sec Event +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/all-day-10days.ics b/app/src/androidTest/assets/all-day-10days.ics new file mode 100644 index 00000000..52e6dbdf --- /dev/null +++ b/app/src/androidTest/assets/all-day-10days.ics @@ -0,0 +1,11 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +UID:all-day-10days@example.com +DTSTAMP:20140101T000000Z +DTSTART;VALUE=DATE:19970714 +DTEND;VALUE=DATE:19970724 +SUMMARY:All-Day 10 Days +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/all-day-1day.ics b/app/src/androidTest/assets/all-day-1day.ics new file mode 100644 index 00000000..ead04361 --- /dev/null +++ b/app/src/androidTest/assets/all-day-1day.ics @@ -0,0 +1,11 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +UID:all-day-1day@example.com +DTSTAMP:20140101T000000Z +DTSTART;VALUE=DATE:19970714 +DTEND;VALUE=DATE:19970714 +SUMMARY:All-Day 1 Day +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/event-on-that-day.ics b/app/src/androidTest/assets/event-on-that-day.ics new file mode 100644 index 00000000..0ccbd4f3 --- /dev/null +++ b/app/src/androidTest/assets/event-on-that-day.ics @@ -0,0 +1,11 @@ +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//hacksw/handcal//NONSGML v1.0//EN +BEGIN:VEVENT +UID:event-on-that-day@example.com +DTSTAMP:19970714T170000Z +ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com +DTSTART;VALUE=DATE:19970714 +SUMMARY:Bastille Day Party +END:VEVENT +END:VCALENDAR \ No newline at end of file diff --git a/app/src/androidTest/assets/impp.vcf b/app/src/androidTest/assets/impp.vcf new file mode 100644 index 00000000..c08f9029 --- /dev/null +++ b/app/src/androidTest/assets/impp.vcf @@ -0,0 +1,9 @@ +BEGIN:VCARD +VERSION:3.0 +UID:2de59c6cc9 +PRODID:-//ownCloud//NONSGML Contacts 0.2.5//EN +REV:2013-12-08T00:04:30+00:00 +FN:test mctest +N:mctest;test;;; +IMPP;TYPE=WORK;X-SERVICE-TYPE=jabber:test-without-valid-scheme@test.tld +END:VCARD diff --git a/app/src/androidTest/assets/invalid-unknown-properties.vcf b/app/src/androidTest/assets/invalid-unknown-properties.vcf new file mode 100644 index 00000000..3fd77fce --- /dev/null +++ b/app/src/androidTest/assets/invalid-unknown-properties.vcf @@ -0,0 +1,5 @@ +BEGIN:VCARD +VERSION:3.0 +FN:VCard with invalid unknown properties +X-UNKNOWN@PROPERTY:MUST-NOT_CONTAIN?OTHER*LETTERS; +END:VCARD \ No newline at end of file diff --git a/app/src/androidTest/assets/reference.vcf b/app/src/androidTest/assets/reference.vcf new file mode 100644 index 00000000..ba6a6b4d --- /dev/null +++ b/app/src/androidTest/assets/reference.vcf @@ -0,0 +1,16 @@ +BEGIN:VCARD +VERSION:3.0 +N:Gump;Forrest;Mr. +FN:Forrest Gump +ORG:Bubba Gump Shrimp Co. +TITLE:Shrimp Man +PHOTO;VALUE=URL;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif +TEL;TYPE=WORK,VOICE:(111) 555-1212 +TEL;TYPE=HOME,VOICE:(404) 555-1212 +ADR;TYPE=WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America +LABEL;TYPE=WORK:100 Waters Edge\nBaytown, LA 30314\nUnited States of America +ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America +LABEL;TYPE=HOME:42 Plantation St.\nBaytown, LA 30314\nUnited States of America +EMAIL;TYPE=PREF,INTERNET:forrestgump@example.com +REV:2008-04-24T19:52:43Z +END:VCARD \ No newline at end of file diff --git a/app/src/androidTest/assets/test.random b/app/src/androidTest/assets/test.random new file mode 100644 index 0000000000000000000000000000000000000000..eb3e5b0275b56f60b7820e828dfc4dae6e8ea2ea GIT binary patch literal 1000 zcmVpnR9djcT(V>eFz)r&<+stfDeB^VE%|mc@LAXtZ>Ds=v`$7)e-Hjvr~oR zNZWkh5AUnJf~97{EDZo!h%*%W2EI;g6pY8GCqDBnxh7Ly`>%^2d^RKPYoax(-wya( zY*6U%c+b9M>rj7E5N8kanXC9BSS2W9^@x~N)xj$Cy(9tM^`p^yv+k{t1#>V|4!Hli z*41Du$rTc{u>k$JGyN$Pw0ay8s`C^wr`2FzzUwkD6GT|Kd$Nd~2UWNorqqW}O{fjwFSeA8Ap;o3>R5bpk zRjTtX7VI2;1vTGE4-d+gjA4AEYC8>%;u!)pw|U?xunQ=8SRRHqCKS%vNO~?{T;LXz zTc*+LSi$N9e1nY|Hh(2CjmoYg)6C$olzOtX;z!LZfGGu?7*<+iwVrmL6Db*Zz2)ns z&jIUCqjFqu&#jn9@@e7LJNgENFi(K}yxUg5H7YV*s*XxpE|&h4s;VSe#o5YYm17v5 zng}yS7UN~304fR1J8%;0IolUVSK^ekJwn_ZIO>?yWBb9XrEX_bWlY~bXr_Lu%|PK}bBR@Wx#^=tQp)E?N5gQe^JkgDqMDZKy0dO9;M2uuVUgxu=llp9SpEOjGW`RpaLf6m0(9@%o%uB`Y)_-W> z8q|+0Sv6b_sLxpXSK@B&6qKRO?~=iulU9`}8+h1;G%DgOv~>4c+C5(r`d8F;+?kzH zoP?-aI^+g$L!?8JXBNFez|XD0Hp@o>UWs^Y1~OE(fRQ3Vz+`KE1mlO=>3th!5wD)P z-pVIO-F7MEcOpXiDZcH(TK0WVr(eg6`W+zyJX8zY*a_qd8OSO;U85T@gxIGqFemCM zgT$#fnb5M2oYfEq`ih` members = dav.getMembers(); assertEquals(1, members.size()); - assertEquals(Constants.ROBOHYDRA_BASE + "dav-invalid/addressbooks/~user1/My%20Contacts:1.vcf/", members.get(0).getLocation().toASCIIString()); + assertEquals(TestConstants.ROBOHYDRA_BASE + "dav-invalid/addressbooks/~user1/My%20Contacts:1.vcf/", members.get(0).getLocation().toASCIIString()); } } diff --git a/app/src/androidTest/robohydra/.gitignore b/app/src/androidTest/robohydra/.gitignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/app/src/androidTest/robohydra/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/app/src/androidTest/robohydra/davdroid.conf b/app/src/androidTest/robohydra/davdroid.conf new file mode 100644 index 00000000..37807fd7 --- /dev/null +++ b/app/src/androidTest/robohydra/davdroid.conf @@ -0,0 +1,6 @@ +{"plugins":[ + "assets", + "redirect", + "dav", + "dav-invalid" +]} diff --git a/app/src/androidTest/robohydra/plugins/assets/index.js b/app/src/androidTest/robohydra/plugins/assets/index.js new file mode 100644 index 00000000..2a254b9a --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/assets/index.js @@ -0,0 +1,12 @@ +var RoboHydraHeadFilesystem = require("robohydra").heads.RoboHydraHeadFilesystem; + +exports.getBodyParts = function(conf) { + return { + heads: [ + new RoboHydraHeadFilesystem({ + mountPath: '/assets/', + documentRoot: '../assets' + }) + ] + }; +}; diff --git a/app/src/androidTest/robohydra/plugins/dav-invalid/index.js b/app/src/androidTest/robohydra/plugins/dav-invalid/index.js new file mode 100644 index 00000000..5fd1c3fc --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/dav-invalid/index.js @@ -0,0 +1,36 @@ +var roboHydraHeadDAV = require("../headdav"); + +exports.getBodyParts = function(conf) { + return { + heads: [ + /* address-book home set */ + new RoboHydraHeadDAV({ + path: "/dav-invalid/addressbooks/~user1/", + handler: function(req,res,next) { + if (req.method == "PROPFIND" && req.rawBody.toString().match(/addressbook-description/)) { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav-invalid/addressbooks/~user1/My%20Contacts:1.vcf/\ + \ + \ + \ + \ + \ + \ + \ + Address Book with dubious characters in path\ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }) + ] + }; +}; diff --git a/app/src/androidTest/robohydra/plugins/dav/index.js b/app/src/androidTest/robohydra/plugins/dav/index.js new file mode 100644 index 00000000..68f84f38 --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/dav/index.js @@ -0,0 +1,278 @@ +var roboHydraHeadDAV = require("../headdav"); + +exports.getBodyParts = function(conf) { + return { + heads: [ + /* base URL, provide default DAV here */ + new RoboHydraHeadDAV({ path: "/dav/" }), + + /* multistatus parsing */ + new RoboHydraHeadDAV({ + path: "/dav/collection-response-with-trailing-slash", + handler: function(req,res,next) { + if (req.method == "PROPFIND") { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/collection-response-with-trailing-slash/ \ + \ + \ + \ + /principals/ok\ + \ + \ + \ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + new RoboHydraHeadDAV({ + path: "/dav/collection-response-without-trailing-slash", + handler: function(req,res,next) { + if (req.method == "PROPFIND") { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/collection-response-without-trailing-slash \ + \ + \ + \ + /principals/ok\ + \ + \ + \ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + + /* principal URL */ + new RoboHydraHeadDAV({ + path: "/dav/principals/users/test", + handler: function(req,res,next) { + if (req.method == "PROPFIND" && req.rawBody.toString().match(/home-?set/)) { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/principals/users/t%65st \ + \ + \ + \ + /dav/addressbooks/test\ + \ + \ + /dav/calendars/test/\ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + + /* address-book home set */ + new RoboHydraHeadDAV({ + path: "/dav/addressbooks/test/", + handler: function(req,res,next) { + if (!req.url.match(/\/$/)) { + res.statusCode = 302; + res.headers['location'] = "/dav/addressbooks/test/"; + } + else if (req.method == "PROPFIND" && req.rawBody.toString().match(/addressbook-description/)) { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/addressbooks/test/useless-member\ + \ + \ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + /dav/addressbooks/test/default-v4.vcf/\ + \ + \ + \ + \ + \ + \ + Default Address Book\ + \ + \ + \ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + + /* calendar home set */ + new RoboHydraHeadDAV({ + path: "/dav/calendars/test/", + handler: function(req,res,next) { + if (req.method == "PROPFIND" && req.rawBody.toString().match(/calendar-description/)) { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/calendars/test/shared.forbidden\ + \ + \ + \ + \ + HTTP/1.1 403 Forbidden\ + \ + \ + \ + /dav/calendars/test/private.ics\ + \ + \ + \ + \ + \ + \ + Private Calendar\ + This is my private calendar.\ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + /dav/calendars/test/work.ics\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + Work Calendar\ + 0xFF00FF\ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + + /* non-existing file */ + new RoboHydraHeadDAV({ + path: "/dav/collection/new.file", + handler: function(req,res,next) { + if (req.method == "PUT") { + if (req.headers['if-match']) /* can't overwrite new file */ + res.statusCode = 412; + else { + res.statusCode = 201; + res.headers["ETag"] = "has-just-been-created"; + } + + } else if (req.method == "DELETE") + res.statusCode = 404; + } + }), + + /* existing file */ + new RoboHydraHeadDAV({ + path: "/dav/collection/existing.file", + handler: function(req,res,next) { + if (req.method == "PUT") { + if (req.headers['if-none-match']) /* requested "don't overwrite", but this file exists */ + res.statusCode = 412; + else { + res.statusCode = 204; + res.headers["ETag"] = "has-just-been-updated"; + } + + } else if (req.method == "DELETE") + res.statusCode = 204; + } + }), + + /* address-book multiget */ + new RoboHydraHeadDAV({ + path: "/dav/addressbooks/default.vcf/", + handler: function(req,res,next) { + if (req.method == "REPORT" && req.rawBody.toString().match(/addressbook-multiget[\s\S]+[\s\S]+/m)) { + res.statusCode = 207; + res.write('\\ + \ + \ + /dav/addressbooks/d%65fault.vcf\ + \ + \ + My Book\ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + /dav/addressbooks/default.vcf/1.vcf\ + \ + \ + \ + BEGIN:VCARD\ + VERSION:3.0\ + NICKNAME:MULTIGET1\ + UID:1\ + END:VCARD\ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + /dav/addressbooks/default.vcf/2.vcf\ + \ + \ + \ + BEGIN:VCARD\ + VERSION:3.0\ + NICKNAME:MULTIGET2\ + UID:2\ + END:VCARD\ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + } + } + }), + + ] + }; +}; diff --git a/app/src/androidTest/robohydra/plugins/headdav.js b/app/src/androidTest/robohydra/plugins/headdav.js new file mode 100644 index 00000000..613a2678 --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/headdav.js @@ -0,0 +1,57 @@ +var roboHydra = require("robohydra"), + roboHydraHeads = roboHydra.heads, + roboHydraHead = roboHydraHeads.RoboHydraHead; + +RoboHydraHeadDAV = roboHydraHeads.roboHydraHeadType({ + name: 'WebDAV Server', + mandatoryProperties: [ 'path' ], + optionalProperties: [ 'handler' ], + + parentPropBuilder: function() { + var myHandler = this.handler; + return { + path: this.path, + handler: function(req,res,next) { + // default DAV behavior + res.headers['DAV'] = 'addressbook, calendar-access'; + res.statusCode = 500; + + // verify Accept header + var accept = req.headers['accept']; + if (req.method == "GET" && (accept == undefined || !accept.match(/text\/(calendar|vcard|xml)/)) || + (req.method == "PROPFIND" || req.method == "REPORT") && (accept == undefined || accept != "text/xml")) + res.statusCode = 406; + + // DAV operations that work on all URLs + else if (req.method == "OPTIONS") { + res.statusCode = 204; + res.headers['Allow'] = 'OPTIONS, PROPFIND, GET, PUT, DELETE, REPORT'; + + } else if (req.method == "PROPFIND" && req.rawBody.toString().match(/current-user-principal/)) { + res.statusCode = 207; + res.write('\\ + \ + \ + ' + req.url + ' \ + \ + \ + \ + /dav/principals/users/test\ + \ + \ + HTTP/1.1 200 OK\ + \ + \ + \ + '); + + } else if (typeof myHandler != 'undefined') + myHandler(req,res,next); + + res.end(); + } + } + } +}); + +module.exports = RoboHydraHeadDAV; diff --git a/app/src/androidTest/robohydra/plugins/redirect/index.js b/app/src/androidTest/robohydra/plugins/redirect/index.js new file mode 100644 index 00000000..4c2cbab0 --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/redirect/index.js @@ -0,0 +1,57 @@ +require('../simple'); + +var RoboHydraHead = require('robohydra').heads.RoboHydraHead; + +exports.getBodyParts = function(conf) { + return { + heads: [ + // well-known URIs + new SimpleResponseHead({ + path: '/.well-known/caldav', + status: 302, + headers: { Location: '/dav/' } + }), + new SimpleResponseHead({ + path: '/.well-known/carddav', + status: 302, + headers: { Location: '/dav/' } + }), + + // generic redirections + new RoboHydraHead({ + path: '/redirect/301', + handler: function(req,res,next) { + res.statusCode = 301; + var location = req.queryParams['to'] || '/assets/test.random'; + res.headers = { + Location: location + } + res.end(); + } + }), + new RoboHydraHead({ + path: '/redirect/302', + handler: function(req,res,next) { + res.statusCode = 302; + var location = req.queryParams['to'] || '/assets/test.random'; + res.headers = { + Location: location + } + res.end(); + } + }), + + // special redirections + new SimpleResponseHead({ + path: '/redirect/relative', + status: 302, + headers: { Location: '/new/location' } + }), + new SimpleResponseHead({ + path: '/redirect/without-location', + status: 302 + }) + + ] + }; +}; diff --git a/app/src/androidTest/robohydra/plugins/simple.js b/app/src/androidTest/robohydra/plugins/simple.js new file mode 100644 index 00000000..3d506ee2 --- /dev/null +++ b/app/src/androidTest/robohydra/plugins/simple.js @@ -0,0 +1,28 @@ +var roboHydra = require("robohydra"), + roboHydraHeads = roboHydra.heads, + roboHydraHead = roboHydraHeads.RoboHydraHead; + +SimpleResponseHead = roboHydraHeads.roboHydraHeadType({ + name: 'Simple HTTP Response', + mandatoryProperties: [ 'path', 'status' ], + optionalProperties: [ 'headers', 'body' ], + + parentPropBuilder: function() { + var head = this; + return { + path: this.path, + handler: function(req,res,next) { + res.statusCode = head.status; + if (typeof head.headers != 'undefined') + res.headers = head.headers; + if (typeof head.body != 'undefined') + res.write(head.body); + else + res.write(); + res.end(); + } + } + } +}); + +module.exports = SimpleResponseHead; diff --git a/app/src/androidTest/robohydra/run.sh b/app/src/androidTest/robohydra/run.sh new file mode 100755 index 00000000..f53c7967 --- /dev/null +++ b/app/src/androidTest/robohydra/run.sh @@ -0,0 +1,2 @@ +#!/bin/sh +node_modules/robohydra/bin/robohydra.js davdroid.conf -I plugins