mirror of
https://github.com/jupyter/notebook.git
synced 2025-03-13 13:17:50 +08:00
JS: close WebSockets when killing kernels
by calling Kernel.stop_channels() in Session.delete and Kernel.kill
This commit is contained in:
parent
865fb20c00
commit
e3696996be
@ -394,6 +394,7 @@ define([
|
|||||||
error : utils.log_ajax_error,
|
error : utils.log_ajax_error,
|
||||||
};
|
};
|
||||||
$.ajax(utils.url_join_encode(this.kernel_url), settings);
|
$.ajax(utils.url_join_encode(this.kernel_url), settings);
|
||||||
|
this.stop_channels();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -80,6 +80,7 @@ define([
|
|||||||
error : utils.log_ajax_error,
|
error : utils.log_ajax_error,
|
||||||
};
|
};
|
||||||
this.kernel.running = false;
|
this.kernel.running = false;
|
||||||
|
this.kernel.stop_channels();
|
||||||
var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
|
var url = utils.url_join_encode(this.base_url, 'api/sessions', this.id);
|
||||||
$.ajax(url, settings);
|
$.ajax(url, settings);
|
||||||
};
|
};
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Miscellaneous javascript tests
|
// Kernel tests
|
||||||
//
|
//
|
||||||
casper.notebook_test(function () {
|
casper.notebook_test(function () {
|
||||||
this.evaluate(function () {
|
this.evaluate(function () {
|
||||||
IPython.notebook.kernel.kernel_info(
|
IPython.notebook.kernel.kernel_info(
|
||||||
function(msg){
|
function(msg){
|
||||||
IPython._kernel_info_response = msg;
|
IPython._kernel_info_response = msg;
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -24,5 +24,41 @@ casper.notebook_test(function () {
|
|||||||
this.test.assertTrue( kernel_info_response.msg_type === 'kernel_info_reply', 'Kernel info request return kernel_info_reply');
|
this.test.assertTrue( kernel_info_response.msg_type === 'kernel_info_reply', 'Kernel info request return kernel_info_reply');
|
||||||
this.test.assertTrue( kernel_info_response.content !== undefined, 'Kernel_info_reply is not undefined');
|
this.test.assertTrue( kernel_info_response.content !== undefined, 'Kernel_info_reply is not undefined');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.thenEvaluate(function () {
|
||||||
|
var kernel = IPython.notebook.session.kernel;
|
||||||
|
IPython._channels = [
|
||||||
|
kernel.shell_channel,
|
||||||
|
kernel.iopub_channel,
|
||||||
|
kernel.stdin_channel
|
||||||
|
];
|
||||||
|
kernel.kill();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.waitFor(function () {
|
||||||
|
return this.evaluate(function(){
|
||||||
|
for (var i=0; i < IPython._channels.length; i++) {
|
||||||
|
var ws = IPython._channels[i];
|
||||||
|
if (ws.readyState !== ws.CLOSED) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.then(function () {
|
||||||
|
var states = this.evaluate(function() {
|
||||||
|
var states = [];
|
||||||
|
for (var i = 0; i < IPython._channels.length; i++) {
|
||||||
|
states.push(IPython._channels[i].readyState);
|
||||||
|
}
|
||||||
|
return states;
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var i = 0; i < states.length; i++) {
|
||||||
|
this.test.assertEquals(states[i], WebSocket.CLOSED,
|
||||||
|
"Kernel.kill closes websockets[" + i + "]");
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
43
IPython/html/tests/services/session.js
Normal file
43
IPython/html/tests/services/session.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
|
||||||
|
//
|
||||||
|
// Tests for the Session object
|
||||||
|
//
|
||||||
|
|
||||||
|
casper.notebook_test(function () {
|
||||||
|
this.evaluate(function () {
|
||||||
|
var kernel = IPython.notebook.session.kernel;
|
||||||
|
IPython._channels = [
|
||||||
|
kernel.shell_channel,
|
||||||
|
kernel.iopub_channel,
|
||||||
|
kernel.stdin_channel
|
||||||
|
];
|
||||||
|
IPython.notebook.session.delete();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.waitFor(function () {
|
||||||
|
return this.evaluate(function(){
|
||||||
|
for (var i=0; i < IPython._channels.length; i++) {
|
||||||
|
var ws = IPython._channels[i];
|
||||||
|
if (ws.readyState !== ws.CLOSED) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
this.then(function () {
|
||||||
|
var states = this.evaluate(function() {
|
||||||
|
var states = [];
|
||||||
|
for (var i = 0; i < IPython._channels.length; i++) {
|
||||||
|
states.push(IPython._channels[i].readyState);
|
||||||
|
}
|
||||||
|
return states;
|
||||||
|
});
|
||||||
|
|
||||||
|
for (var i = 0; i < states.length; i++) {
|
||||||
|
this.test.assertEquals(states[i], WebSocket.CLOSED,
|
||||||
|
"Session.delete closes websockets[" + i + "]");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user