mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-07 05:52:57 +00:00
209 lines
6.0 KiB
TypeScript
209 lines
6.0 KiB
TypeScript
import {Logger} from '@openstapps/logger';
|
|
import {expect} from 'chai';
|
|
import {ContainerInfo} from 'dockerode';
|
|
import {slow, suite, test, timeout} from 'mocha-typescript';
|
|
import * as sinon from 'sinon';
|
|
import {containerMatchesRegex, generateUpstreamMap, getGatewayOfStAppsBackend} from '../src/main';
|
|
|
|
const logger = new Logger();
|
|
|
|
process.on('unhandledRejection', (err) => {
|
|
logger.error('UNHANDLED REJECTION', err.stack);
|
|
process.exit(1);
|
|
});
|
|
|
|
@suite(timeout(1000), slow(500))
|
|
// @ts-ignore
|
|
class ContainerInfoParsing {
|
|
|
|
static anyContainerWithExposedPorts: ContainerInfo;
|
|
static backendContainerWithExposedPorts: ContainerInfo;
|
|
|
|
static before(done: () => void) {
|
|
// tslint:disable:object-literal-sort-keys
|
|
this.backendContainerWithExposedPorts = {
|
|
Id: 'e3d3f4d18aceac2780bdb95523845d066ed25c04fc65168a5ddbd37a85671bb7',
|
|
Names: [
|
|
'/deployment_backend_1',
|
|
],
|
|
Image: 'gitlab-registry.tubit.tu-berlin.de/stapps/backend/b-tu-typescript-refactor-for-new-tslint-config',
|
|
ImageID: 'sha256:ef9f0c8c4b6f99dd208948c7aae1d042590aa18e05ebeae4f586e4b4beebeac9',
|
|
Command: 'node ./bin/www',
|
|
Created: 1524669882,
|
|
Ports: [
|
|
{
|
|
IP: '127.0.0.1',
|
|
PrivatePort: 3000,
|
|
PublicPort: 3000,
|
|
Type: 'tcp',
|
|
},
|
|
],
|
|
Labels: {
|
|
'com.docker.compose.config-hash': '91c6e0cebad15951824162c93392b6880b69599692f07798ae8de659c1616a03',
|
|
'com.docker.compose.container-number': '1',
|
|
'com.docker.compose.oneoff': 'False',
|
|
'com.docker.compose.project': 'deployment',
|
|
'com.docker.compose.service': 'backend',
|
|
'com.docker.compose.version': '1.21.0',
|
|
'stapps.version': '1.0.0',
|
|
},
|
|
State: 'running',
|
|
Status: 'Up 3 minutes',
|
|
HostConfig: {
|
|
NetworkMode: 'deployment_default',
|
|
},
|
|
NetworkSettings: {
|
|
Networks: {
|
|
deployment_default: {
|
|
IPAMConfig: null,
|
|
Links: null,
|
|
Aliases: null,
|
|
NetworkID: '947ea5247cc7429e1fdebd5404fa4d15f7c05e6765f2b93ddb3bdb6aaffd1193',
|
|
EndpointID: 'da17549a086ff2c9f622e80de833e6f334afda52c8f07080428640c1716dcd14',
|
|
Gateway: '172.18.0.1',
|
|
IPAddress: '172.18.0.3',
|
|
IPPrefixLen: 16,
|
|
IPv6Gateway: '',
|
|
GlobalIPv6Address: '',
|
|
GlobalIPv6PrefixLen: 0,
|
|
MacAddress: '03:41:ac:11:00:23',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
// tslint:disable:object-literal-sort-keys
|
|
this.anyContainerWithExposedPorts = {
|
|
Id: 'e3d3f4d18aceac2780bdb95523845d066ed25c04fc65168a5ddbd37a85671bb7',
|
|
Names: [
|
|
'/container_name_1',
|
|
],
|
|
Image: 'ubuntu:4',
|
|
ImageID: 'sha256:ef9f0c8c4b6f99dd208948c7aae1d042590aa18e05ebeae4f586e4b4beebeac9',
|
|
Command: 'sh',
|
|
Created: 1524669882,
|
|
Ports: [
|
|
{
|
|
IP: '0.0.0.0',
|
|
PrivatePort: 80,
|
|
PublicPort: 80,
|
|
Type: 'tcp',
|
|
},
|
|
],
|
|
Labels: {},
|
|
State: 'running',
|
|
Status: 'Up 3 minutes',
|
|
HostConfig: {
|
|
NetworkMode: 'default',
|
|
},
|
|
NetworkSettings: {
|
|
Networks: {
|
|
bridge: {
|
|
IPAMConfig: null,
|
|
Links: null,
|
|
Aliases: null,
|
|
NetworkID: '947ea5247cc7429e1fdebd5404fa4d15f7c05e6765f2b93ddb3bdb6aaffd1193',
|
|
EndpointID: 'da17549a086ff2c9f622e80de833e6f334afda52c8f07080428640c1716dcd14',
|
|
Gateway: '172.18.0.1',
|
|
IPAddress: '172.18.0.3',
|
|
IPPrefixLen: 16,
|
|
IPv6Gateway: '',
|
|
GlobalIPv6Address: '',
|
|
GlobalIPv6PrefixLen: 0,
|
|
MacAddress: '03:41:ac:11:00:23',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
done();
|
|
}
|
|
|
|
// tslint:disable:no-unused-expression
|
|
@test
|
|
checkIfContainerDoesNotMatchAnyContainer(done: () => void) {
|
|
expect(containerMatchesRegex(
|
|
'anyName',
|
|
new RegExp('d+'),
|
|
ContainerInfoParsing.anyContainerWithExposedPorts),
|
|
).to.be.false;
|
|
done();
|
|
}
|
|
|
|
@test
|
|
checkIfContainerDoesNotMatchIfVersionIsIncorrect(done: () => void) {
|
|
expect(containerMatchesRegex(
|
|
'backend',
|
|
new RegExp('1\\.4\\.\\d+'),
|
|
ContainerInfoParsing.backendContainerWithExposedPorts),
|
|
).to.be.false;
|
|
done();
|
|
}
|
|
|
|
|
|
@test
|
|
checkIfContainerMatches(done: () => void) {
|
|
expect(containerMatchesRegex(
|
|
'backend',
|
|
new RegExp('1\\.0\\.\\d+'),
|
|
ContainerInfoParsing.backendContainerWithExposedPorts),
|
|
).to.be.true;
|
|
done();
|
|
}
|
|
|
|
@test
|
|
getGatewayOfAnyContainerWithExposedPorts(done: () => void) {
|
|
expect(getGatewayOfStAppsBackend(ContainerInfoParsing.anyContainerWithExposedPorts)).to.be.equal('0.0.0.0:80');
|
|
done();
|
|
}
|
|
|
|
@test
|
|
getGatewayOfBackendContainer(done: () => void) {
|
|
expect(getGatewayOfStAppsBackend(ContainerInfoParsing.backendContainerWithExposedPorts))
|
|
.to
|
|
.be
|
|
.equal('127.0.0.1:3000');
|
|
done();
|
|
}
|
|
|
|
@test
|
|
upstreamMapCallsLoggerErrorWhenNoMatchingContainerIsFound(done: () => void) {
|
|
|
|
const stub = sinon.stub(console, 'error');
|
|
|
|
expect(generateUpstreamMap(
|
|
['0\\.8\\.\\d+'],
|
|
['1\\.1\\.\\d+'],
|
|
[ContainerInfoParsing.backendContainerWithExposedPorts],
|
|
)).to.be.equal('map $http_x_stapps_version $proxyurl {\n' +
|
|
' default unsupported;\n' +
|
|
' "~0\\.8\\.\\d+" unavailable;\n' +
|
|
' "~1\\.1\\.\\d+" outdated;\n' +
|
|
'}\n');
|
|
|
|
stub.restore();
|
|
expect(stub.args[0][0]).contains('[ERROR] No backend for version').and.contains('found');
|
|
done();
|
|
}
|
|
|
|
@test
|
|
upstreamMapWithOneActiveVersionAndNoOutdatedOnes(done: () => void) {
|
|
expect(
|
|
generateUpstreamMap(
|
|
['1\\.0\\.\\d+'],
|
|
['0\\.8\\.\\d+'],
|
|
[ContainerInfoParsing.backendContainerWithExposedPorts],
|
|
),
|
|
).to.be.equal(
|
|
'map $http_x_stapps_version $proxyurl {\n' +
|
|
' default unsupported;\n' +
|
|
' "~1\\.0\\.\\d+" 1__0___d_;\n' +
|
|
' "~0\\.8\\.\\d+" outdated;\n' +
|
|
'}\n' +
|
|
'upstream 1__0___d_ {\n' +
|
|
' server 127.0.0.1:3000;\n' +
|
|
'}\n',
|
|
);
|
|
done();
|
|
}
|
|
}
|