Skip to content

Commit

Permalink
Merge pull request #231 from BEllis/fixes_226
Browse files Browse the repository at this point in the history
LiveReload closes correctly (fixes #226)
  • Loading branch information
avevlad committed Jan 3, 2018
2 parents c20360a + c915594 commit 90ce6c2
Show file tree
Hide file tree
Showing 2 changed files with 159 additions and 72 deletions.
33 changes: 29 additions & 4 deletions src/index.coffee
Expand Up @@ -16,7 +16,7 @@ try
http2 = require('http2')

class ConnectApp
constructor: (options) ->
constructor: (options, startedCallback) ->
@name = options.name || "Server"
@port = options.port || "8080"
@root = options.root || path.dirname(module.parent.id)
Expand All @@ -26,16 +26,23 @@ class ConnectApp
@https = options.https || false
@livereload = options.livereload || false
@middleware = options.middleware || undefined
@startedCallback = startedCallback || () -> {};
@serverInit = options.serverInit || undefined
@fallback = options.fallback || undefined
@index = options.index
@oldMethod("open") if options.open
@sockets = []
@app = undefined
@lr = undefined
@state = "initializing"
@run()

run: ->
if @state == "stopped"
return

@state = "starting"
@log "Starting server..."
@app = connect()

@handlers().forEach (middleware) =>
Expand Down Expand Up @@ -99,6 +106,8 @@ class ConnectApp
socket.destroy()

@server.close()
if @livereload
@lr.close()
process.nextTick( ->
process.exit(0)
)
Expand All @@ -117,6 +126,22 @@ class ConnectApp

@lr.listen @livereload.port
@log "LiveReload started on port #{@livereload.port}"
@state = "running";
@log "Running server"
@startedCallback()

close: ->
if @state == "running"
@log "Stopping server"
if @livereload
@lr.close()
@server.close()
@state = "stopped"
@log "Stopped server"
else if @state == "stopped"
@log "Server has already been stopped."
else
@log "Ignoring stop as server is in " + @state + " state."

handlers: ->
steps = if @middleware then @middleware.call(this, connect, @) else []
Expand Down Expand Up @@ -159,8 +184,8 @@ class ConnectApp
when "open" then @logWarning("Option open #{text}")

module.exports =
server: (options = {}) ->
app = new ConnectApp(options)
server: (options = {}, startedCallback = null) ->
app = new ConnectApp(options, startedCallback)
apps.push(app)
app
reload: ->
Expand All @@ -171,5 +196,5 @@ module.exports =
files: file.path
callback null, file
serverClose: ->
apps.forEach((app) -> do app.server.close)
apps.forEach((app) -> do app.close)
apps = []
198 changes: 130 additions & 68 deletions test/test.js
Expand Up @@ -2,39 +2,55 @@ var request = require('supertest');
var connect = require('../index');
require('mocha');


var portCounter = 35000;
describe('gulp-connect', function () {
describe('Simple', function() {
var req;
before(function() {
connect.server();
req = request('http://localhost:8080');
})
var port;
after(function() {
connect.serverClose();
})
it('Explicit /test.txt', function (done) {
req.get('/fixtures/simplest/test.txt')
.expect(/Hello world/)
.expect(200)
.end(function (err, res) {
done(err);
});
var port = portCounter++;
connect.server({
port: port
}, function() {
request('http://localhost:' + port)
.get('/fixtures/simplest/test.txt')
.expect(/Hello world/)
.expect(200)
.end(function (err, res) {
done(err);
});
});
})
it('Implicit /index.html', function (done) {
req.get('/fixtures/simplest/')
.expect(/index page/)
.expect(200)
.end(function (err, res) {
done(err);
});
var port = portCounter++;
connect.server({
port: port
}, function() {
request('http://localhost:' + port)
.get('/fixtures/simplest/')
.expect(/index page/)
.expect(200)
.end(function (err, res) {
done(err);
});
});
})
})
})
describe('Self Start / Stop', function() {
after(function() {
connect.serverClose();
})
it('Root string', function (done) {
var port = portCounter++;
connect.server({
port: port,
root: __dirname + "/fixtures"
});
request('http://localhost:8080')
request('http://localhost:' + port)
.get('/multiple/app/index.html')
.expect(/app test/)
.end(function (err, res) {
Expand All @@ -44,17 +60,19 @@ describe('gulp-connect', function () {
});
})
it('Root array', function (done) {
var port = portCounter++;
connect.server({
port: port,
root: [__dirname + "/fixtures/multiple/app", __dirname + "/fixtures/multiple/dist"]
});
request('http://localhost:8080')
request('http://localhost:' + port)
.get('/index.html')
.expect(/app test/)
.expect(200)
.end(function (err) {
if (err) return done(err);
});
request('http://localhost:8080')
request('http://localhost:' + port)
.get('/dist.html')
.expect(/dist test/)
.expect(200)
Expand All @@ -81,11 +99,13 @@ describe('gulp-connect', function () {
it('Https test', function (done) {
//suppress invalid self-signed ssl certificate error
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
var port = portCounter++;
connect.server({
port: port,
root: __dirname + "/fixtures/multiple/app",
https: true
});
request('https://localhost:8080')
request('https://localhost:' + port)
.get('/index.html')
.expect(/app test/)
.end(function (err) {
Expand All @@ -95,72 +115,114 @@ describe('gulp-connect', function () {
});
})
it('Livereload test', function (done) {
var port = portCounter++;
connect.server({
port: port,
livereload: true
}, function() {
request('http://localhost:35729')
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
if (err) return done(err);
request('http://localhost:35729')
.get('/livereload.js')
.expect(200)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
});
});
request('http://localhost:35729')
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
if (err) return done(err);
});
request('http://localhost:35729')
.get('/livereload.js')
.expect(200)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
})
it('Livereload https test', function (done) {
var port = portCounter++;
connect.server({
port: port,
livereload: true,
https: true
}, function() {
request('https://localhost:35729')
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
if (err) return done(err);
request('https://localhost:35729')
.get('/livereload.js')
.expect(200)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
});
});
request('http://localhost:35729')
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
if (err) return done(err);
});
request('http://localhost:35729')
.get('/livereload.js')
.expect(200)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
})
it('Livereload port', function (done) {
var port = portCounter++;
var liveReloadPort = portCounter++;
connect.server({
port: port,
livereload: {
port: 35000
port: liveReloadPort
}
},
function() {
request('http://localhost:' + liveReloadPort)
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
});
})
it('livereload closes', function (done) {
this.timeout(10000);
var port = portCounter++;
var liveReloadPort = portCounter++;
connect.server({
port: port,
livereload: {
port: liveReloadPort
}
},
function() {
request('http://localhost:' + liveReloadPort)
.get('/')
.expect('Content-Type', /json/)
.expect(200)
.end(function (err) {
if (err) return done(err);
connect.serverClose();
setTimeout(function() {
request('http://localhost:' + liveReloadPort)
.get('/')
.end(function (err) {
if (err) return done();
done(new Error("Live reload is still running."));
})}, 100);
})
});
request('http://localhost:35000')
.get('/')
.expect('Content-Type', /json/)
.end(function (err) {
connect.serverClose();
if (err) return done(err);
done();
});
})
it('Fallback test', function (done) {
var port = portCounter++;
connect.server({
port: port,
fallback: __dirname + '/fixtures/simplest/index.html'
}, function() {
request('http://localhost:' + port)
.get('/not/existing/path')
.expect(/index page/)
.expect('Content-Type', new RegExp('text/html; charset=UTF-8'))
.expect(200)
.end(function (err, res) {
connect.serverClose();
if (err) return done(err);
done()
});
});
request('http://localhost:8080')
.get('/not/existing/path')
.expect(/index page/)
.expect('Content-Type', new RegExp('text/html; charset=UTF-8'))
.expect(200)
.end(function (err, res) {
connect.serverClose();
if (err) return done(err);
done()
});
})
})

0 comments on commit 90ce6c2

Please sign in to comment.