123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- // Copyright (c) Jupyter Development Team.
- import 'jest';
- import { UUID } from '@lumino/coreutils';
- import { toArray } from '@lumino/algorithm';
- import { KernelAPI } from '../../src';
- import {
- expectFailure,
- testEmission,
- JupyterServer,
- flakyIt as it
- } from '@jupyterlab/testutils';
- import {
- KernelTester,
- makeSettings,
- PYTHON_SPEC,
- getRequestHandler
- } from '../utils';
- const PYTHON3_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- PYTHON3_SPEC.name = 'Python3';
- PYTHON3_SPEC.display_name = 'python3';
- const server = new JupyterServer();
- beforeAll(async () => {
- await server.start();
- });
- afterAll(async () => {
- await server.shutdown();
- });
- describe('kernel', () => {
- let tester: KernelTester;
- afterEach(async () => {
- if (tester) {
- tester.dispose();
- }
- const models = await KernelAPI.listRunning();
- await Promise.all(models.map(m => KernelAPI.shutdownKernel(m.id)));
- });
- describe('Kernel.listRunning()', () => {
- it('should yield a list of valid kernel ids', async () => {
- const kernel = await KernelAPI.startNew();
- expect(toArray(await KernelAPI.listRunning()).length).toBeGreaterThan(0);
- await KernelAPI.shutdownKernel(kernel.id);
- });
- it('should accept server settings', async () => {
- const serverSettings = makeSettings();
- const k = await KernelAPI.startNew({}, serverSettings);
- const response = await KernelAPI.listRunning(serverSettings);
- expect(toArray(response).length).toBeGreaterThan(0);
- await KernelAPI.shutdownKernel(k.id);
- });
- it('should throw an error for an invalid model', async () => {
- const data = { id: UUID.uuid4(), name: 'test' };
- const settings = getRequestHandler(200, data);
- const promise = KernelAPI.listRunning(settings);
- await expectFailure(promise, 'Invalid kernel list');
- });
- it('should throw an error for an invalid response', async () => {
- const settings = getRequestHandler(201, {});
- const promise = KernelAPI.listRunning(settings);
- await expectFailure(promise, 'Invalid response: 201 Created');
- });
- it('should throw an error for an error response', async () => {
- const settings = getRequestHandler(500, {});
- const promise = KernelAPI.listRunning(settings);
- await expectFailure(promise, '');
- });
- });
- describe('KernelAPI.startNew()', () => {
- it('should accept ajax options', async () => {
- const serverSettings = makeSettings();
- const k = await KernelAPI.startNew({}, serverSettings);
- await KernelAPI.shutdownKernel(k.id);
- });
- it('should still construct connection if the kernel dies', async () => {
- // If a kernel dies immediately, the kernel connection should still send
- // out the status signal, then dispose the connection.
- tester = new KernelTester();
- tester.initialStatus = 'dead';
- const kernel = await tester.start();
- const dead = testEmission(kernel.statusChanged, {
- test: (sender, state) => state === 'dead'
- });
- await dead;
- expect(kernel.isDisposed).toBe(true);
- expect(kernel.status).toBe('dead');
- tester.dispose();
- });
- it('should throw an error for an invalid kernel id', async () => {
- const serverSettings = getRequestHandler(201, { id: UUID.uuid4() });
- const kernelPromise = KernelAPI.startNew({}, serverSettings);
- await expectFailure(kernelPromise);
- });
- it('should throw an error for another invalid kernel id', async () => {
- const serverSettings = getRequestHandler(201, {
- id: UUID.uuid4(),
- name: 1
- });
- const kernelPromise = KernelAPI.startNew({}, serverSettings);
- await expectFailure(kernelPromise);
- });
- it('should throw an error for an invalid response', async () => {
- const data = { id: UUID.uuid4(), name: 'foo' };
- const serverSettings = getRequestHandler(200, data);
- const kernelPromise = KernelAPI.startNew({}, serverSettings);
- await expectFailure(kernelPromise, 'Invalid response: 200 OK');
- });
- it('should throw an error for an error response', async () => {
- const serverSettings = getRequestHandler(500, {});
- const kernelPromise = KernelAPI.startNew({}, serverSettings);
- await expectFailure(kernelPromise, '');
- });
- it('should auto-reconnect on websocket error', async () => {
- tester = new KernelTester();
- const kernel = await tester.start();
- await kernel.info;
- const emission = testEmission(kernel.connectionStatusChanged, {
- find: (k, status) => status === 'connecting'
- });
- await tester.close();
- await emission;
- });
- });
- describe('Kernel.shutdown()', () => {
- it('should shut down a kernel by id', async () => {
- const kernel = await KernelAPI.startNew();
- await KernelAPI.shutdownKernel(kernel.id);
- const kernels = await KernelAPI.listRunning();
- expect(kernels.find(k => k.id === kernel.id)).toBeUndefined();
- });
- it('should handle a 404 error', () => {
- return KernelAPI.shutdownKernel(UUID.uuid4());
- });
- });
- });
|