123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- import { expectFailure, JupyterServer } from '@jupyterlab/testutils';
- import { KernelSpecAPI } from '../../src';
- import { getRequestHandler, makeSettings, PYTHON_SPEC } 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', () => {
- describe('KernelSpec.getSpecs()', () => {
- it('should load the kernelspecs', async () => {
- const specs = await KernelSpecAPI.getSpecs();
- expect(specs.default).toBeTruthy();
- });
- it('should accept ajax options', async () => {
- const serverSettings = makeSettings();
- const specs = await KernelSpecAPI.getSpecs(serverSettings);
- expect(specs.default).toBeTruthy();
- });
- it('should handle a missing default parameter', async () => {
- const serverSettings = getRequestHandler(200, {
- kernelspecs: { python: PYTHON_SPEC }
- });
- const specs = await KernelSpecAPI.getSpecs(serverSettings);
- expect(specs.default).toBeTruthy();
- });
- it('should throw for a missing kernelspecs parameter', async () => {
- const serverSettings = getRequestHandler(200, {
- default: PYTHON_SPEC.name
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No kernelspecs found');
- });
- it('should omit an invalid kernelspec', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- R_SPEC.name = 1;
- const serverSettings = getRequestHandler(200, {
- default: 'python',
- kernelspecs: {
- R: R_SPEC,
- python: PYTHON_SPEC
- }
- });
- const specs = await KernelSpecAPI.getSpecs(serverSettings);
- expect(specs.default).toBe('python');
- expect(specs.kernelspecs['R']).toBeUndefined();
- });
- it('should handle an improper name', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- R_SPEC.name = 1;
- const serverSettings = getRequestHandler(200, {
- default: 'R',
- kernelspecs: { R: R_SPEC }
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No valid kernelspecs found');
- });
- it('should handle an improper language', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- R_SPEC.spec.language = 1;
- const serverSettings = getRequestHandler(200, {
- default: 'R',
- kernelspecs: { R: R_SPEC }
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No valid kernelspecs found');
- });
- it('should handle an improper argv', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- R_SPEC.spec.argv = 'hello';
- const serverSettings = getRequestHandler(200, {
- default: 'R',
- kernelspecs: { R: R_SPEC }
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No valid kernelspecs found');
- });
- it('should handle an improper display_name', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- R_SPEC.spec.display_name = ['hello'];
- const serverSettings = getRequestHandler(200, {
- default: 'R',
- kernelspecs: { R: R_SPEC }
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No valid kernelspecs found');
- });
- it('should handle missing resources', async () => {
- const R_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
- delete R_SPEC.resources;
- const serverSettings = getRequestHandler(200, {
- default: 'R',
- kernelspecs: { R: R_SPEC }
- });
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'No valid kernelspecs found');
- });
- it('should throw an error for an invalid response', async () => {
- const serverSettings = getRequestHandler(201, {});
- const promise = KernelSpecAPI.getSpecs(serverSettings);
- await expectFailure(promise, 'Invalid response: 201 Created');
- });
- it('should handle metadata', async () => {
- const PYTHON_SPEC_W_MD = JSON.parse(JSON.stringify(PYTHON_SPEC));
- PYTHON_SPEC_W_MD.spec.metadata = { some_application: { key: 'value' } };
- const serverSettings = getRequestHandler(200, {
- default: 'python',
- kernelspecs: { python: PYTHON_SPEC_W_MD }
- });
- const specs = await KernelSpecAPI.getSpecs(serverSettings);
- expect(specs.kernelspecs['python']).toHaveProperty('metadata');
- const metadata = specs.kernelspecs['python']!.metadata;
- expect(metadata).toHaveProperty('some_application');
- expect((metadata as any).some_application).toHaveProperty('key', 'value');
- });
- it('should handle env values', async () => {
- const PYTHON_SPEC_W_ENV = JSON.parse(JSON.stringify(PYTHON_SPEC));
- PYTHON_SPEC_W_ENV.spec.env = {
- SOME_ENV: 'some_value',
- LANG: 'en_US.UTF-8'
- };
- const serverSettings = getRequestHandler(200, {
- default: 'python',
- kernelspecs: { python: PYTHON_SPEC_W_ENV }
- });
- const specs = await KernelSpecAPI.getSpecs(serverSettings);
- expect(specs.kernelspecs['python']).toHaveProperty('env');
- const env = specs.kernelspecs['python']!.env;
- expect(env).toHaveProperty('SOME_ENV', 'some_value');
- expect(env).toHaveProperty('LANG', 'en_US.UTF-8');
- });
- });
- });
|