123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- //
- // Kernel tests
- //
- casper.notebook_test(function () {
- // test that the kernel is running
- this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel is running');
- });
- // test list
- this.thenEvaluate(function () {
- IPython._kernels = null;
- IPython.notebook.kernel.list(function (data) {
- IPython._kernels = data;
- });
- });
- this.waitFor(function () {
- return this.evaluate(function () {
- return IPython._kernels !== null;
- });
- });
- this.then(function () {
- var num_kernels = this.evaluate(function () {
- return IPython._kernels.length;
- });
- this.test.assertEquals(num_kernels, 1, 'one kernel running');
- });
-
- // test get_info
- var kernel_info = this.evaluate(function () {
- return {
- name: IPython.notebook.kernel.name,
- id: IPython.notebook.kernel.id
- };
- });
- this.thenEvaluate(function () {
- IPython._kernel_info = null;
- IPython.notebook.kernel.get_info(function (data) {
- IPython._kernel_info = data;
- });
- });
- this.waitFor(function () {
- return this.evaluate(function () {
- return IPython._kernel_info !== null;
- });
- });
- this.then(function () {
- var new_kernel_info = this.evaluate(function () {
- return IPython._kernel_info;
- });
- this.test.assertEquals(kernel_info.name, new_kernel_info.name, 'kernel: name correct');
- this.test.assertEquals(kernel_info.id, new_kernel_info.id, 'kernel: id correct');
- });
- // test interrupt
- this.thenEvaluate(function () {
- IPython._interrupted = false;
- IPython.notebook.kernel.interrupt(function () {
- IPython._interrupted = true;
- });
- });
- this.waitFor(function () {
- return this.evaluate(function () {
- return IPython._interrupted;
- });
- });
- this.then(function () {
- var interrupted = this.evaluate(function () {
- return IPython._interrupted;
- });
- this.test.assert(interrupted, 'kernel was interrupted');
- });
- // test restart
- this.thenEvaluate(function () {
- IPython.notebook.kernel.restart();
- });
- this.waitFor(this.kernel_disconnected);
- this.wait_for_kernel_ready();
- this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel restarted');
- });
- // test reconnect
- this.thenEvaluate(function () {
- IPython.notebook.kernel.stop_channels();
- });
- this.waitFor(this.kernel_disconnected);
- this.thenEvaluate(function () {
- IPython.notebook.kernel.reconnect();
- });
- this.wait_for_kernel_ready();
- this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel reconnected');
- });
- // test kernel_info_request
- this.evaluate(function () {
- IPython.notebook.kernel.kernel_info(
- function(msg){
- IPython._kernel_info_response = msg;
- });
- });
- this.waitFor(
- function () {
- return this.evaluate(function(){
- return IPython._kernel_info_response;
- });
- });
- this.then(function () {
- var kernel_info_response = this.evaluate(function(){
- return IPython._kernel_info_response;
- });
- 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');
- });
- // test kill
- this.thenEvaluate(function () {
- IPython.notebook.kernel.kill();
- });
- this.waitFor(this.kernel_disconnected);
- this.then(function () {
- this.test.assert(!this.kernel_running(), 'kernel is not running');
- });
- // test start
- var url, base_url;
- this.then(function () {
- base_url = this.evaluate(function () {
- return IPython.notebook.base_url;
- });
- url = this.evaluate(function () {
- return IPython.notebook.kernel.start();
- });
- });
- this.then(function () {
- this.test.assertEquals(url, base_url + "api/kernels", "start url is correct");
- });
- this.wait_for_kernel_ready();
- this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel is running');
- });
- // test start with parameters
- this.thenEvaluate(function () {
- IPython.notebook.kernel.kill();
- });
- this.waitFor(this.kernel_disconnected);
- this.then(function () {
- url = this.evaluate(function () {
- return IPython.notebook.kernel.start({foo: "bar"});
- });
- });
- this.then(function () {
- this.test.assertEquals(url, base_url + "api/kernels?foo=bar", "start url with params is correct");
- });
- this.wait_for_kernel_ready();
- this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel is running');
- });
- // check for events in kill/start cycle
- this.event_test(
- 'kill/start',
- [
- 'kernel_killed.Kernel',
- 'kernel_starting.Kernel',
- 'kernel_created.Kernel',
- 'kernel_connected.Kernel',
- 'kernel_ready.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel.kill();
- });
- this.waitFor(this.kernel_disconnected);
- this.thenEvaluate(function () {
- IPython.notebook.kernel.start();
- });
- }
- );
- // wait for any last idle/busy messages to be handled
- this.wait_for_kernel_ready();
- // check for events in disconnect/connect cycle
- this.event_test(
- 'reconnect',
- [
- 'kernel_reconnecting.Kernel',
- 'kernel_connected.Kernel',
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel.stop_channels();
- IPython.notebook.kernel.reconnect(1);
- });
- }
- );
- // wait for any last idle/busy messages to be handled
- this.wait_for_kernel_ready();
- // check for events in the restart cycle
- this.event_test(
- 'restart',
- [
- 'kernel_restarting.Kernel',
- 'kernel_created.Kernel',
- 'kernel_connected.Kernel',
- 'kernel_ready.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel.restart();
- });
- }
- );
- // wait for any last idle/busy messages to be handled
- this.wait_for_kernel_ready();
- // check for events in the interrupt cycle
- this.event_test(
- 'interrupt',
- [
- 'kernel_interrupting.Kernel',
- 'kernel_busy.Kernel',
- 'kernel_idle.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel.interrupt();
- });
- }
- );
- this.wait_for_kernel_ready();
- // check for events after ws close
- this.event_test(
- 'ws_closed_ok',
- [
- 'kernel_disconnected.Kernel',
- 'kernel_reconnecting.Kernel',
- 'kernel_connected.Kernel',
- 'kernel_busy.Kernel',
- 'kernel_idle.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel._ws_closed("", false);
- });
- }
- );
- // wait for any last idle/busy messages to be handled
- this.wait_for_kernel_ready();
- // check for events after ws close (error)
- this.event_test(
- 'ws_closed_error',
- [
- 'kernel_disconnected.Kernel',
- 'kernel_connection_failed.Kernel',
- 'kernel_reconnecting.Kernel',
- 'kernel_connected.Kernel',
- 'kernel_busy.Kernel',
- 'kernel_idle.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- IPython.notebook.kernel._ws_closed("", true);
- });
- }
- );
- // wait for any last idle/busy messages to be handled
- this.wait_for_kernel_ready();
- // start the kernel back up
- this.thenEvaluate(function () {
- IPython.notebook.kernel.restart();
- });
- this.waitFor(this.kernel_running);
- this.wait_for_kernel_ready();
- // test handling of autorestarting messages
- this.event_test(
- 'autorestarting',
- [
- 'kernel_restarting.Kernel',
- 'kernel_autorestarting.Kernel',
- ],
- function () {
- this.thenEvaluate(function () {
- var cell = IPython.notebook.get_cell(0);
- cell.set_text('import os\n' + 'os._exit(1)');
- cell.execute();
- });
- }
- );
- this.wait_for_kernel_ready();
- // test handling of failed restart
- this.event_test(
- 'failed_restart',
- [
- 'kernel_restarting.Kernel',
- 'kernel_autorestarting.Kernel',
- 'kernel_dead.Kernel'
- ],
- function () {
- this.thenEvaluate(function () {
- var cell = IPython.notebook.get_cell(0);
- cell.set_text("import os\n" +
- "from IPython.kernel.connect import get_connection_file\n" +
- "with open(get_connection_file(), 'w') as f:\n" +
- " f.write('garbage')\n" +
- "os._exit(1)");
- cell.execute();
- });
- },
- // need an extra-long timeout, because it needs to try
- // restarting the kernel 5 times!
- 20000
- );
- });
|