405 lines
7.6 KiB
JavaScript
405 lines
7.6 KiB
JavaScript
/* eslint camelcase: 0 */
|
|
const AJV = require('ajv');
|
|
const assert = require('assert');
|
|
const deploymentConfigSchema = require('../deployment/config');
|
|
|
|
const ajv = new AJV({allErrors: true, $data: true});
|
|
|
|
exports.test_unknown_keys = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
foo: 1,
|
|
bar: 2
|
|
});
|
|
assert.equal(isValid, false);
|
|
assert.equal(ajv.errors.length, 2);
|
|
['foo', 'bar'].forEach((prop, i) => {
|
|
const error = ajv.errors[i];
|
|
assert.equal(error.keyword, 'additionalProperties');
|
|
assert.equal(error.params.additionalProperty, prop);
|
|
});
|
|
};
|
|
|
|
exports.test_features_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
features: {
|
|
foo: 'v2',
|
|
bar: 2
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_slot_key = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
features: {
|
|
cloud: 'v2'
|
|
},
|
|
slot: 'c.125-m512'
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_staging_slot_key = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
features: {
|
|
cloud: 'v2'
|
|
},
|
|
slot: 'staging-c.5-t1-w-m1024'
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_invalid_slot_key = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
features: {
|
|
cloud: 'v2'
|
|
},
|
|
slot: 'invalid-key'
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_slot_key_without_cloud_v2 = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
slot: 'c.125-m512'
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_invalid_features_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
features: {
|
|
foo: []
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_features_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
limits: {
|
|
duration: 60000,
|
|
maxConcurrentReqs: 2,
|
|
timeout: 60000 * 2
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_invalid_limits_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
limits: {
|
|
foo: []
|
|
}
|
|
});
|
|
assert.equal(!isValid, true);
|
|
};
|
|
|
|
exports.test_valid_env_types = () => {
|
|
let isValid = ajv.validate(deploymentConfigSchema, {
|
|
env: {
|
|
VALID: '1'
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
|
|
isValid = ajv.validate(deploymentConfigSchema, {
|
|
env: [
|
|
'VALID'
|
|
]
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_invalid_env_types = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
env: {
|
|
INVALID: true
|
|
}
|
|
});
|
|
assert.equal(!isValid, true);
|
|
};
|
|
|
|
exports.test_valid_build_env_types = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
build: {
|
|
env: {
|
|
VALID: '1'
|
|
}
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_invalid_build_env_types = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
build: {
|
|
env: {
|
|
INVALID: true
|
|
}
|
|
}
|
|
});
|
|
assert.equal(!isValid, true);
|
|
};
|
|
|
|
exports.test_invalid_static_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
foo: []
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_valid_static_headers_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
headers: [
|
|
{
|
|
source: '/_next/webpack/chunks/*',
|
|
headers: [{
|
|
key: 'Cache-Control',
|
|
value: 'adssds'
|
|
}]
|
|
},
|
|
{
|
|
source: '/_next/static/commons/**',
|
|
headers: [{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable'
|
|
}]
|
|
},
|
|
{
|
|
source: '/_next/*/page/**/*.js',
|
|
headers: [{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable'
|
|
}]
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
assert.equal(isValid, true);
|
|
|
|
for (let i = 0x20; i <= 0xff; i++) {
|
|
if (i > 0x7e && i < 0xa0) {
|
|
continue;
|
|
}
|
|
|
|
const result = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
headers: [
|
|
{
|
|
source: '/',
|
|
headers: [{
|
|
key: 'X-Test',
|
|
value: `value ${String.fromCharCode(i)}`
|
|
}]
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
assert.equal(result, true, `Failed to validate for char: 0x${i.toString(16)}`);
|
|
}
|
|
};
|
|
|
|
exports.test_invalid_static_headers_object = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
headers: [
|
|
{
|
|
source: '/_next/webpack/chunks/*',
|
|
headers: [{
|
|
key: ':alternate-protocol',
|
|
value: 'foo\x00bar'
|
|
}]
|
|
},
|
|
{
|
|
source: '/_next/static/commons/**',
|
|
headers: [{
|
|
key: 'Cache-Control',
|
|
value: 'public, max-age=31536000, immutable'
|
|
}]
|
|
}
|
|
]
|
|
}
|
|
});
|
|
|
|
assert.equal(isValid, false);
|
|
|
|
// Use 256 to go above 0xff
|
|
for (let i = 0; i <= 256; i++) {
|
|
if ((i >= 0x20 && i <= 0x7e) || (i >= 0xa0 && i <= 0xff)) {
|
|
continue;
|
|
}
|
|
|
|
const result = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
headers: {
|
|
source: '/',
|
|
headers: [{
|
|
key: 'X-Test',
|
|
value: `value ${String.fromCharCode(i)}`
|
|
}]
|
|
}
|
|
}
|
|
});
|
|
|
|
assert.equal(result, false, `Failed to error for char: 0x${i.toString(16)}`);
|
|
}
|
|
};
|
|
|
|
exports.test_valid_static_object_trailing_slash = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
trailingSlash: true
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_valid_static_object_invalid_prop = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
'static': {
|
|
trailingSlash: []
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_project = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
project: 'cool-project'
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_github_enabled = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
github: {
|
|
enabled: false
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_github_silent = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
github: {
|
|
silent: true
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_github_auto_alias = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
github: {
|
|
autoAlias: false
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_github_auto_job_cancelation = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
github: {
|
|
autoJobCancelation: false
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_github_additional_field = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
github: {
|
|
abc: 'bbc'
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_scale_sfo1 = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
scale: {
|
|
sfo1: {
|
|
min: 0,
|
|
max: 1
|
|
}
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_scale_all = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
scale: {
|
|
all: {
|
|
min: 0,
|
|
max: 'auto'
|
|
}
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_scale_invalid = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
scale: {
|
|
foo: {
|
|
min: -1,
|
|
max: 'auto'
|
|
}
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_scale_invalid_min = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
scale: {
|
|
foo: {
|
|
min: 2,
|
|
max: 1
|
|
}
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_service_invalid = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
service: 'foo'
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_service_port_valid = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
service: {
|
|
port: 80
|
|
}
|
|
});
|
|
assert.equal(isValid, true);
|
|
};
|
|
|
|
exports.test_service_port_invalid = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
service: {
|
|
port: 0
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|
|
|
|
exports.test_service_port_invalid_type = () => {
|
|
const isValid = ajv.validate(deploymentConfigSchema, {
|
|
service: {
|
|
port: '3000'
|
|
}
|
|
});
|
|
assert.equal(isValid, false);
|
|
};
|