mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-10-06 04:40:09 +00:00
Cypress test for Streams
and updated cypress + packages
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
FROM cypress/included:13.9.0
|
||||
FROM cypress/included:14.0.1
|
||||
|
||||
COPY --chown=1000 ./test /test
|
||||
|
||||
@@ -12,7 +12,7 @@ RUN wget "https://github.com/testssl/testssl.sh/archive/refs/tags/v3.2rc4.tar.gz
|
||||
&& mv /tmp/testssl.sh-3.2rc4 /testssl \
|
||||
&& rm /tmp/testssl.tgz \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y bsdmainutils \
|
||||
&& apt-get install -y bsdmainutils curl dnsutils \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& wget "https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64" -O /bin/mkcert \
|
||||
|
183
test/cypress/e2e/api/Streams.cy.js
Normal file
183
test/cypress/e2e/api/Streams.cy.js
Normal file
@@ -0,0 +1,183 @@
|
||||
/// <reference types="cypress" />
|
||||
|
||||
describe('Streams', () => {
|
||||
let token;
|
||||
|
||||
before(() => {
|
||||
cy.getToken().then((tok) => {
|
||||
token = tok;
|
||||
});
|
||||
// Create a custom cert pair
|
||||
cy.exec('mkcert -cert-file=/test/cypress/fixtures/website1.pem -key-file=/test/cypress/fixtures/website1.key.pem website1.example.com').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
// Install CA
|
||||
cy.exec('mkcert -install').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Should be able to create TCP Stream', function() {
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/nginx/streams',
|
||||
data: {
|
||||
incoming_port: 1500,
|
||||
forwarding_host: '127.0.0.1',
|
||||
forwarding_port: 80,
|
||||
certificate_id: 0,
|
||||
meta: {
|
||||
dns_provider_credentials: "",
|
||||
letsencrypt_agree: false,
|
||||
dns_challenge: true
|
||||
},
|
||||
tcp_forwarding: true,
|
||||
udp_forwarding: false
|
||||
}
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
|
||||
expect(data).to.have.property('id');
|
||||
expect(data.id).to.be.greaterThan(0);
|
||||
expect(data).to.have.property('enabled', true);
|
||||
expect(data).to.have.property('tcp_forwarding', true);
|
||||
expect(data).to.have.property('udp_forwarding', false);
|
||||
|
||||
cy.exec('curl --noproxy -I http://website1.example.com:1500').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.stderr).to.contain('HTTP/1.1 200 OK');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Should be able to create UDP Stream', function() {
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/nginx/streams',
|
||||
data: {
|
||||
incoming_port: 1501,
|
||||
forwarding_host: '127.0.0.1',
|
||||
forwarding_port: 80,
|
||||
certificate_id: 0,
|
||||
meta: {
|
||||
dns_provider_credentials: "",
|
||||
letsencrypt_agree: false,
|
||||
dns_challenge: true
|
||||
},
|
||||
tcp_forwarding: false,
|
||||
udp_forwarding: true
|
||||
}
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
|
||||
expect(data).to.have.property('id');
|
||||
expect(data.id).to.be.greaterThan(0);
|
||||
expect(data).to.have.property('enabled', true);
|
||||
expect(data).to.have.property('tcp_forwarding', false);
|
||||
expect(data).to.have.property('udp_forwarding', true);
|
||||
});
|
||||
});
|
||||
|
||||
it('Should be able to create TCP/UDP Stream', function() {
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/nginx/streams',
|
||||
data: {
|
||||
incoming_port: 1502,
|
||||
forwarding_host: '127.0.0.1',
|
||||
forwarding_port: 80,
|
||||
certificate_id: 0,
|
||||
meta: {
|
||||
dns_provider_credentials: "",
|
||||
letsencrypt_agree: false,
|
||||
dns_challenge: true
|
||||
},
|
||||
tcp_forwarding: true,
|
||||
udp_forwarding: true
|
||||
}
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
|
||||
expect(data).to.have.property('id');
|
||||
expect(data.id).to.be.greaterThan(0);
|
||||
expect(data).to.have.property('enabled', true);
|
||||
expect(data).to.have.property('tcp_forwarding', true);
|
||||
expect(data).to.have.property('udp_forwarding', true);
|
||||
|
||||
// Check the port is working
|
||||
cy.exec('curl --noproxy -I http://website1.example.com:1502').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.stderr).to.contain('HTTP/1.1 200 OK');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('Should be able to create SSL TCP Stream', function() {
|
||||
let certID = 0;
|
||||
|
||||
// Create custom cert
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/nginx/certificates',
|
||||
data: {
|
||||
provider: "other",
|
||||
nice_name: "Custom Certificate for SSL Stream",
|
||||
},
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 201, '/nginx/certificates', data);
|
||||
expect(data).to.have.property('id');
|
||||
certID = data.id;
|
||||
|
||||
// Upload files
|
||||
cy.task('backendApiPostFiles', {
|
||||
token: token,
|
||||
path: `/api/nginx/certificates/${certID}/upload`,
|
||||
files: {
|
||||
certificate: 'website1.pem',
|
||||
certificate_key: 'website1.key.pem',
|
||||
},
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 200, '/nginx/certificates/{certID}/upload', data);
|
||||
expect(data).to.have.property('certificate');
|
||||
expect(data).to.have.property('certificate_key');
|
||||
|
||||
// Create the stream
|
||||
cy.task('backendApiPost', {
|
||||
token: token,
|
||||
path: '/api/nginx/streams',
|
||||
data: {
|
||||
incoming_port: 1503,
|
||||
forwarding_host: '127.0.0.1',
|
||||
forwarding_port: 80,
|
||||
certificate_id: certID,
|
||||
meta: {
|
||||
dns_provider_credentials: "",
|
||||
letsencrypt_agree: false,
|
||||
dns_challenge: true
|
||||
},
|
||||
tcp_forwarding: true,
|
||||
udp_forwarding: false
|
||||
}
|
||||
}).then((data) => {
|
||||
cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
|
||||
expect(data).to.have.property('id');
|
||||
expect(data.id).to.be.greaterThan(0);
|
||||
expect(data).to.have.property("enabled", true);
|
||||
expect(data).to.have.property('tcp_forwarding', true);
|
||||
expect(data).to.have.property('udp_forwarding', false);
|
||||
expect(data).to.have.property('certificate_id', certID);
|
||||
|
||||
// wait 5 mins
|
||||
cy.wait(300000);
|
||||
|
||||
// Check the ssl termination
|
||||
cy.exec('/testssl/testssl.sh --quiet --add-ca="$(/bin/mkcert -CAROOT)" --jsonfile=/test/cypress/results/testssl.json website1.example.com:1503', {
|
||||
timeout: 120000, // 2 minutes
|
||||
failOnNonZeroExit: false,
|
||||
}).then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
Reference in New Issue
Block a user