173 lines
4.2 KiB
JavaScript
173 lines
4.2 KiB
JavaScript
|
|
var express = require('../')
|
|
, request = require('supertest');
|
|
|
|
describe('req', function(){
|
|
describe('.subdomains', function(){
|
|
describe('when present', function(){
|
|
it('should return an array', function(done){
|
|
var app = express();
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', 'tobi.ferrets.example.com')
|
|
.expect(200, ['ferrets', 'tobi'], done);
|
|
})
|
|
|
|
it('should work with IPv4 address', function(done){
|
|
var app = express();
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', '127.0.0.1')
|
|
.expect(200, [], done);
|
|
})
|
|
|
|
it('should work with IPv6 address', function(done){
|
|
var app = express();
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', '[::1]')
|
|
.expect(200, [], done);
|
|
})
|
|
})
|
|
|
|
describe('otherwise', function(){
|
|
it('should return an empty array', function(done){
|
|
var app = express();
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', 'example.com')
|
|
.expect(200, [], done);
|
|
})
|
|
})
|
|
|
|
describe('with no host', function(){
|
|
it('should return an empty array', function(done){
|
|
var app = express();
|
|
|
|
app.use(function(req, res){
|
|
req.headers.host = null;
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.expect(200, [], done);
|
|
})
|
|
})
|
|
|
|
describe('with trusted X-Forwarded-Host', function () {
|
|
it('should return an array', function (done) {
|
|
var app = express();
|
|
|
|
app.set('trust proxy', true);
|
|
app.use(function (req, res) {
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('X-Forwarded-Host', 'tobi.ferrets.example.com')
|
|
.expect(200, ['ferrets', 'tobi'], done);
|
|
})
|
|
})
|
|
|
|
describe('when subdomain offset is set', function(){
|
|
describe('when subdomain offset is zero', function(){
|
|
it('should return an array with the whole domain', function(done){
|
|
var app = express();
|
|
app.set('subdomain offset', 0);
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', 'tobi.ferrets.sub.example.com')
|
|
.expect(200, ['com', 'example', 'sub', 'ferrets', 'tobi'], done);
|
|
})
|
|
|
|
it('should return an array with the whole IPv4', function (done) {
|
|
var app = express();
|
|
app.set('subdomain offset', 0);
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', '127.0.0.1')
|
|
.expect(200, ['127.0.0.1'], done);
|
|
})
|
|
|
|
it('should return an array with the whole IPv6', function (done) {
|
|
var app = express();
|
|
app.set('subdomain offset', 0);
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', '[::1]')
|
|
.expect(200, ['[::1]'], done);
|
|
})
|
|
})
|
|
|
|
describe('when present', function(){
|
|
it('should return an array', function(done){
|
|
var app = express();
|
|
app.set('subdomain offset', 3);
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', 'tobi.ferrets.sub.example.com')
|
|
.expect(200, ['ferrets', 'tobi'], done);
|
|
})
|
|
})
|
|
|
|
describe('otherwise', function(){
|
|
it('should return an empty array', function(done){
|
|
var app = express();
|
|
app.set('subdomain offset', 3);
|
|
|
|
app.use(function(req, res){
|
|
res.send(req.subdomains);
|
|
});
|
|
|
|
request(app)
|
|
.get('/')
|
|
.set('Host', 'sub.example.com')
|
|
.expect(200, [], done);
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|