/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { readFile } from 'node:fs/promises'; import { resolve } from 'node:path'; import { request as requestAdminAPI } from '../ts/admin_api'; describe('Resource Metadata', () => { describe('Consumer', () => { it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/consumers/jack', 'PUT', { username: 'jack', invalid: true, }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept desc field', () => expect( requestAdminAPI('/apisix/admin/consumers/jack', 'PUT', { username: 'jack', desc: 'test_desc', }), ).resolves.not.toThrow()); }); describe('Consumer Credentials', () => { it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/consumers/jack/credentials/cred1', 'PUT', { plugins: { 'key-auth': { key: 'test' } }, invalid: true, }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept name field', () => expect( requestAdminAPI( '/apisix/admin/consumers/jack/credentials/cred1', 'PUT', { name: 'test_name', plugins: { 'key-auth': { key: 'test' } }, }, ), ).resolves.not.toThrow()); }); describe('SSL', () => { const path = resolve(__dirname, '../certs/'); let cert: string; let key: string; beforeAll(async () => { cert = await readFile(resolve(path, 'apisix.crt'), 'utf-8'); key = await readFile(resolve(path, 'apisix.key'), 'utf-8'); }); it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/ssls/ssl1', 'PUT', { sni: 'test.com', cert, key, invalid: true }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept desc field', () => expect( requestAdminAPI('/apisix/admin/ssls/ssl1', 'PUT', { desc: 'test_desc', sni: 'test.com', cert, key, }), ).resolves.not.toThrow()); }); describe('Proto', () => { it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/protos/proto1', 'PUT', { content: 'syntax = "proto3";', invalid: true }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept name/labels field', () => expect( requestAdminAPI('/apisix/admin/protos/proto1', 'PUT', { name: 'test_name', labels: { test: 'test' }, content: 'syntax = "proto3";', }), ).resolves.not.toThrow()); }); describe('Stream Route', () => { it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/stream_routes/sr1', 'PUT', { upstream: { nodes: { '127.0.0.1:5432': 1 } }, invalid: true }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept name field', () => expect( requestAdminAPI('/apisix/admin/stream_routes/sr1', 'PUT', { name: 'test_name', upstream: { nodes: { '127.0.0.1:5432': 1 } }, }), ).resolves.not.toThrow()); }); describe('Consumer Group', () => { it('should ensure additionalProperties is false', () => expect( requestAdminAPI( '/apisix/admin/consumer_groups/cg1', 'PUT', { plugins: {}, invalid: true }, undefined, { validateStatus: () => true }, ), ).resolves.toMatchObject({ status: 400 })); it('should accept name field', () => expect( requestAdminAPI('/apisix/admin/consumer_groups/cg1', 'PUT', { name: 'test_name', plugins: {}, }), ).resolves.not.toThrow()); }); });