mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-12 01:39:54 -06:00
124 lines
3.3 KiB
JavaScript
124 lines
3.3 KiB
JavaScript
const { expect } = require('../spec_helper')
|
|
|
|
const EE = require('events')
|
|
const Server = require('../../lib/server')
|
|
|
|
describe('lib/server', () => {
|
|
beforeEach(function () {
|
|
this.setup = (options = {}) => {
|
|
this.ca = {}
|
|
this.port = 12345
|
|
|
|
return Server.create(this.ca, this.port, options)
|
|
}
|
|
})
|
|
|
|
afterEach(() => {
|
|
delete process.env.HTTPS_PROXY
|
|
|
|
delete process.env.NO_PROXY
|
|
})
|
|
|
|
context('#listen', () => {
|
|
it('calls options.onUpgrade with req, socket head', function () {
|
|
const onUpgrade = this.sandbox.stub()
|
|
|
|
return this.setup({ onUpgrade })
|
|
.then((srv) => {
|
|
srv._sniServer.emit('upgrade', 1, 2, 3)
|
|
|
|
expect(onUpgrade).to.be.calledWith(1, 2, 3)
|
|
})
|
|
})
|
|
|
|
it('calls options.onRequest with req, res', function () {
|
|
const onRequest = this.sandbox.stub()
|
|
const req = { url: 'https://www.foobar.com', headers: { host: 'www.foobar.com' } }
|
|
const res = {}
|
|
|
|
return this.setup({ onRequest })
|
|
.then((srv) => {
|
|
srv._sniServer.emit('request', req, res)
|
|
|
|
expect(onRequest).to.be.calledWith(req, res)
|
|
})
|
|
})
|
|
|
|
it('calls options.onError with err and port and destroys the client socket', function (done) {
|
|
const socket = new EE()
|
|
|
|
socket.destroy = this.sandbox.stub()
|
|
const head = {}
|
|
|
|
const onError = function (err, socket2, head2, port) {
|
|
expect(err.message).to.eq('connect ECONNREFUSED 127.0.0.1:8444')
|
|
|
|
expect(socket).to.eq(socket2)
|
|
expect(head).to.eq(head2)
|
|
expect(port).to.eq('8444')
|
|
|
|
expect(socket.destroy).to.be.calledOnce
|
|
|
|
done()
|
|
}
|
|
|
|
this.setup({ onError })
|
|
.then((srv) => {
|
|
srv._makeDirectConnection({ url: 'localhost:8444' }, socket, head)
|
|
})
|
|
})
|
|
|
|
// https://github.com/cypress-io/cypress/issues/3250
|
|
it('does not crash when an erroneous URL is provided, just destroys socket', function (done) {
|
|
const socket = new EE()
|
|
|
|
socket.destroy = this.sandbox.stub()
|
|
const head = {}
|
|
|
|
const onError = function (err, socket2, head2, port) {
|
|
expect(err.message).to.eq('connect ECONNREFUSED 127.0.0.1:443')
|
|
|
|
expect(socket).to.eq(socket2)
|
|
expect(head).to.eq(head2)
|
|
expect(port).to.eq('443')
|
|
|
|
expect(socket.destroy).to.be.calledOnce
|
|
|
|
done()
|
|
}
|
|
|
|
this.setup({ onError })
|
|
.then((srv) => {
|
|
srv._makeDirectConnection({ url: '%7Balgolia_application_id%7D-dsn.algolia.net:443' }, socket, head)
|
|
})
|
|
})
|
|
|
|
it('with proxied connection calls options.onError with err and port and destroys the client socket', function (done) {
|
|
const socket = new EE()
|
|
|
|
socket.destroy = this.sandbox.stub()
|
|
const head = {}
|
|
|
|
const onError = function (err, socket2, head2, port) {
|
|
expect(err.message).to.eq('A connection to the upstream proxy could not be established: connect ECONNREFUSED 127.0.0.1:8444')
|
|
|
|
expect(socket).to.eq(socket2)
|
|
expect(head).to.eq(head2)
|
|
expect(port).to.eq('11111')
|
|
|
|
expect(socket.destroy).to.be.calledOnce
|
|
|
|
done()
|
|
}
|
|
|
|
process.env.HTTPS_PROXY = 'http://localhost:8444'
|
|
process.env.NO_PROXY = ''
|
|
|
|
this.setup({ onError })
|
|
.then((srv) => {
|
|
srv._makeDirectConnection({ url: 'should-not-reach.invalid:11111' }, socket, head)
|
|
})
|
|
})
|
|
})
|
|
})
|