Demo for query storing

Change-Id: I947bcac841992c3f6cfd01ab337c265b0d01cb70
diff --git a/node_modules/body/test/index.js b/node_modules/body/test/index.js
new file mode 100644
index 0000000..8c05417
--- /dev/null
+++ b/node_modules/body/test/index.js
@@ -0,0 +1,2 @@
+require('./integration.js');
+require('./unit.js');
diff --git a/node_modules/body/test/integration.js b/node_modules/body/test/integration.js
new file mode 100644
index 0000000..7d82c16
--- /dev/null
+++ b/node_modules/body/test/integration.js
@@ -0,0 +1,105 @@
+var testServer = require("test-server")
+var test = require("tape")
+var sendJson = require("send-data/json")
+var after = require("after")
+
+var body = require("../index")
+var jsonBody = require("../json")
+var formBody = require("../form")
+var anyBody = require("../any")
+
+testServer(handleRequest, runTests)
+
+function handleRequest(req, res) {
+    function send(err, body) {
+        if (err) {
+            return sendJson(req, res, err.message)
+        }
+
+        sendJson(req, res, body)
+    }
+
+    if (req.url === "/body") {
+        body(req, res, {}, send)
+    } else if (req.url === "/form") {
+        formBody(req, res, send)
+    } else if (req.url === "/json") {
+        jsonBody(req, {}, send)
+    } else if (req.url === "/any") {
+        anyBody(req, send)
+    }
+}
+
+function runTests(request, done) {
+    test("body works", function (t) {
+        t.end = after(2, t.end.bind(t))
+        testBody("/body", request, t)
+
+        request({
+            uri: "/any",
+            body: "foo"
+        }, function (err, res, body) {
+            t.equal(err, null)
+            t.equal(JSON.parse(body), "Could not parse content type header: ")
+            t.end()
+        })
+    })
+
+    test("form works", function (t) {
+        t.end = after(2, t.end.bind(t))
+        testFormBody("/form", request, t)
+        testFormBody("/any", request, t)
+    })
+
+    test("json works", function (t) {
+        t.end = after(2, t.end.bind(t))
+        testJsonBody("/json", request, t)
+        testJsonBody("/any", request, t)
+    })
+
+    .on("end", done)
+}
+
+function testBody(uri, request, t) {
+    request({
+        uri: uri,
+        body: "foo"
+    }, function (err, res, body) {
+        t.equal(err, null, "error is not null")
+
+        console.log("body", body, JSON.parse(body))
+        t.equal(JSON.parse(body), "foo", "body is incorrect")
+
+        t.end()
+    })
+}
+
+function testFormBody(uri, request, t) {
+    request({
+        uri: uri,
+        form: {
+            foo: "bar"
+        }
+    }, function (err, res, body) {
+        t.equal(err, null, "error is not null")
+
+        t.equal(JSON.parse(body).foo, "bar", "body is incorrect")
+
+        t.end()
+    })
+}
+
+function testJsonBody(uri, request, t) {
+    request({
+        uri: uri,
+        json: {
+            foo: "bar"
+        }
+    }, function (err, res, body) {
+        t.equal(err, null, "error is not null")
+
+        t.equal(body.foo, "bar", "body is incorrect")
+
+        t.end()
+    })
+}
diff --git a/node_modules/body/test/unit.js b/node_modules/body/test/unit.js
new file mode 100644
index 0000000..33c2811
--- /dev/null
+++ b/node_modules/body/test/unit.js
@@ -0,0 +1,60 @@
+var after = require('after');
+var body = require('../index.js');
+var hammock = require('hammock');
+var test = require('tape');
+
+test('caching works', function t(assert) {
+    var request = hammock.Request({
+        method: 'GET',
+        headers: {
+            'Content-Type': 'application/json'
+        },
+        url: '/somewhere'
+    });
+    var response = hammock.Response();
+
+    var done = after(2, assert.end.bind(assert));
+
+    body(request, response, { cache: true }, function onBody(err, body) {
+        assert.equal(body, 'thisbody', 'raw body has been set');
+        assert.pass('body is parsed');
+        done();
+    });
+
+    request.on('end', function() {
+        body(request, response, { cache: true }, function onBody(err, body) {
+            assert.equal(body, 'thisbody', 'cached body is provided');
+            assert.pass('body is parsed');
+            done();
+        });
+    });
+
+    request.end('thisbody');
+});
+
+test('parallel caching works', function t(assert) {
+    var request = hammock.Request({
+        method: 'GET',
+        headers: {
+            'Content-Type': 'application/json'
+        },
+        url: '/somewhere'
+    });
+    request.end('thisbody');
+    var response = hammock.Response();
+
+    var done = after(5, function() {
+        process.nextTick(function() {
+            assert.equal(request.listeners('rawBody').length, 0, 'rawBody listeners cleared');
+            assert.end();
+        });
+    });
+
+    for (var i = 0; i < 5; ++i) {
+        body(request, response, { cache: true }, function onBody(err, body) {
+            assert.equal(body, 'thisbody', 'raw body has been set');
+            assert.pass('body is parsed');
+            done();
+        });
+    }
+});