it('closes connection on socket timeout', function (done) { Nipple.request('GET', 'http://localhost:' + port + '/', {}, function (err, res) { expect(err).to.exist; expect(err.message).to.equal('Client request error'); done(); }); });
server.start(function () { Nipple.request('GET', 'http://localhost:' + server.info.port + '/', {}, function (err, res) { server.stop(); expect(err).to.exist; expect(err.message).to.equal('Client request error: socket hang up'); done(); }); });
server.start(function () { var timeout; var orig = Net.Socket.prototype.setTimeout; Net.Socket.prototype.setTimeout = function () { timeout = 'gotcha'; Net.Socket.prototype.setTimeout = orig; return orig.apply(this, arguments); }; Nipple.request('GET', 'http://localhost:' + server.info.port + '/', {}, function (err, res) { server.stop(); expect(err).to.not.exist; expect(timeout).to.equal('gotcha'); done(); }); });
Object.keys(self._subscriberQueues.http).forEach(function (uri) { var subscriberQueue = self._subscriberQueues.http[uri]; if (!subscriberQueue.length) { return; } var envelope = { schema: self.settings.schemaName, host: internals.host, appVer: internals.appVer, timestamp: Date.now(), events: self._eventsFilter(self._subscriberTags[uri], subscriberQueue) }; subscriberQueue.length = 0; // Empty queue (must not set to [] or queue reference will change) Nipple.request('post', uri, { headers: { 'content-type': 'application/json' }, payload: JSON.stringify(envelope), timeout: self.settings.requestTimeout }); });
settings.mapUri(request, function (err, uri, headers) { if (err) { return reply(err); } var req = request.raw.req; var options = { headers: {}, payload: request.payload, redirects: settings.redirects, timeout: settings.timeout, rejectUnauthorized: settings.rejectUnauthorized // in case maxSockets is not specified }; var protocol = uri.split(':', 1)[0]; options.agent = protocol === 'http' ? request.server._agents.http : (settings.rejectUnauthorized === false ? request.server._agents.insecureAgent : request.server._agents.https); var bind = request.route.bind || request._route.env.bind || null; if (settings.passThrough) { options.headers = Hoek.clone(req.headers); delete options.headers.host; } if (headers) { Hoek.merge(options.headers, headers); } if (settings.xforward) { options.headers['x-forwarded-for'] = (options.headers['x-forwarded-for'] ? options.headers['x-forwarded-for'] + ',' : '') + request.info.remoteAddress; options.headers['x-forwarded-port'] = (options.headers['x-forwarded-port'] ? options.headers['x-forwarded-port'] + ',' : '') + request.info.remotePort; options.headers['x-forwarded-proto'] = (options.headers['x-forwarded-proto'] ? options.headers['x-forwarded-proto'] + ',' : '') + settings.protocol; } if (settings.onResponse) { delete options.headers['accept-encoding']; } var contentType = req.headers['content-type']; if (contentType) { options.headers['Content-Type'] = contentType; } // Send request Nipple.request(request.method, uri, options, function (err, res) { var ttl = null; if (err) { if (settings.onResponse) { return settings.onResponse.call(bind, err, res, request, reply, settings, ttl); } return reply(err); } if (settings._upstreamTtl) { var cacheControlHeader = res.headers['cache-control']; if (cacheControlHeader) { var cacheControl = Nipple.parseCacheControl(cacheControlHeader); if (cacheControl) { ttl = cacheControl['max-age'] * 1000; } } } if (settings.onResponse) { return settings.onResponse.call(bind, null, res, request, reply, settings, ttl); } reply(res) .ttl(ttl) .passThrough(settings.passThrough || false); // Default to false }); });
settings.mapUri(request, function (err, uri, headers) { if (err) { return reply(err); } var req = request.raw.req; var options = { headers: {}, payload: request.payload, redirects: settings.redirects, timeout: settings.timeout, rejectUnauthorized: settings.rejectUnauthorized }; var bind = (request.route.bind || request._route.env.bind); if (settings.passThrough) { options.headers = Utils.clone(req.headers); delete options.headers.host; } if (headers) { Utils.merge(options.headers, headers); } if (settings.xforward) { options.headers['x-forwarded-for'] = (options.headers['x-forwarded-for'] ? options.headers['x-forwarded-for'] + ',' : '') + request.info.remoteAddress; options.headers['x-forwarded-port'] = (options.headers['x-forwarded-port'] ? options.headers['x-forwarded-port'] + ',' : '') + request.info.remotePort; options.headers['x-forwarded-proto'] = (options.headers['x-forwarded-proto'] ? options.headers['x-forwarded-proto'] + ',' : '') + settings.protocol; } if (settings.preResponse || settings.postResponse) { delete options.headers['accept-encoding']; } var contentType = req.headers['content-type']; if (contentType) { options.headers['Content-Type'] = contentType; } // Send request Nipple.request(request.method, uri, options, function (err, res) { if (err) { if (settings.preResponse) { return settings.preResponse.call(bind, err, res, request, reply, settings, ttl); } return reply(err); } var ttl = null; if (settings._upstreamTtl) { var cacheControlHeader = res.headers['cache-control']; if (cacheControlHeader) { var cacheControl = Nipple.parseCacheControl(cacheControlHeader); if (cacheControl) { ttl = cacheControl['max-age'] * 1000; } } } if (settings.preResponse) { return settings.preResponse.call(bind, undefined, res, request, reply, settings, ttl); } if (settings.postResponse) { return settings.postResponse.call(bind, request, reply, res, settings, ttl); } reply(res) .ttl(ttl) .passThrough(settings.passThrough || false); // Default to false }); });
internals.request = function (request, reply) { Nipple.request('GET', 'http://google.com', {}, reply); };