Streams.cy.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. /// <reference types="cypress" />
  2. describe('Streams', () => {
  3. let token;
  4. before(() => {
  5. cy.resetUsers();
  6. cy.getToken().then((tok) => {
  7. token = tok;
  8. // Set default site content
  9. cy.task('backendApiPut', {
  10. token: token,
  11. path: '/api/settings/default-site',
  12. data: {
  13. value: 'html',
  14. meta: {
  15. html: '<p>yay it works</p>'
  16. },
  17. },
  18. }).then((data) => {
  19. cy.validateSwaggerSchema('put', 200, '/settings/{settingID}', data);
  20. });
  21. });
  22. // Create a custom cert pair
  23. cy.exec('mkcert -cert-file=/test/cypress/fixtures/website1.pem -key-file=/test/cypress/fixtures/website1.key.pem website1.example.com').then((result) => {
  24. expect(result.code).to.eq(0);
  25. // Install CA
  26. cy.exec('mkcert -install').then((result) => {
  27. expect(result.code).to.eq(0);
  28. });
  29. });
  30. cy.exec('rm -f /test/results/testssl.json');
  31. });
  32. it('Should be able to create TCP Stream', () => {
  33. cy.task('backendApiPost', {
  34. token: token,
  35. path: '/api/nginx/streams',
  36. data: {
  37. incoming_port: 1500,
  38. forwarding_host: '127.0.0.1',
  39. forwarding_port: 80,
  40. certificate_id: 0,
  41. meta: {
  42. dns_provider_credentials: "",
  43. letsencrypt_agree: false,
  44. dns_challenge: true
  45. },
  46. tcp_forwarding: true,
  47. udp_forwarding: false
  48. }
  49. }).then((data) => {
  50. cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
  51. expect(data).to.have.property('id');
  52. expect(data.id).to.be.greaterThan(0);
  53. expect(data).to.have.property('enabled', true);
  54. expect(data).to.have.property('tcp_forwarding', true);
  55. expect(data).to.have.property('udp_forwarding', false);
  56. cy.exec('curl --noproxy -- http://website1.example.com:1500').then((result) => {
  57. expect(result.code).to.eq(0);
  58. expect(result.stdout).to.contain('yay it works');
  59. });
  60. });
  61. });
  62. it('Should be able to create UDP Stream', () => {
  63. cy.task('backendApiPost', {
  64. token: token,
  65. path: '/api/nginx/streams',
  66. data: {
  67. incoming_port: 1501,
  68. forwarding_host: '127.0.0.1',
  69. forwarding_port: 80,
  70. certificate_id: 0,
  71. meta: {
  72. dns_provider_credentials: "",
  73. letsencrypt_agree: false,
  74. dns_challenge: true
  75. },
  76. tcp_forwarding: false,
  77. udp_forwarding: true
  78. }
  79. }).then((data) => {
  80. cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
  81. expect(data).to.have.property('id');
  82. expect(data.id).to.be.greaterThan(0);
  83. expect(data).to.have.property('enabled', true);
  84. expect(data).to.have.property('tcp_forwarding', false);
  85. expect(data).to.have.property('udp_forwarding', true);
  86. });
  87. });
  88. it('Should be able to create TCP/UDP Stream', () => {
  89. cy.task('backendApiPost', {
  90. token: token,
  91. path: '/api/nginx/streams',
  92. data: {
  93. incoming_port: 1502,
  94. forwarding_host: '127.0.0.1',
  95. forwarding_port: 80,
  96. certificate_id: 0,
  97. meta: {
  98. dns_provider_credentials: "",
  99. letsencrypt_agree: false,
  100. dns_challenge: true
  101. },
  102. tcp_forwarding: true,
  103. udp_forwarding: true
  104. }
  105. }).then((data) => {
  106. cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
  107. expect(data).to.have.property('id');
  108. expect(data.id).to.be.greaterThan(0);
  109. expect(data).to.have.property('enabled', true);
  110. expect(data).to.have.property('tcp_forwarding', true);
  111. expect(data).to.have.property('udp_forwarding', true);
  112. cy.exec('curl --noproxy -- http://website1.example.com:1502').then((result) => {
  113. expect(result.code).to.eq(0);
  114. expect(result.stdout).to.contain('yay it works');
  115. });
  116. });
  117. });
  118. it('Should be able to create SSL TCP Stream', () => {
  119. let certID = 0;
  120. // Create custom cert
  121. cy.task('backendApiPost', {
  122. token: token,
  123. path: '/api/nginx/certificates',
  124. data: {
  125. provider: "other",
  126. nice_name: "Custom Certificate for SSL Stream",
  127. },
  128. }).then((data) => {
  129. cy.validateSwaggerSchema('post', 201, '/nginx/certificates', data);
  130. expect(data).to.have.property('id');
  131. certID = data.id;
  132. // Upload files
  133. cy.task('backendApiPostFiles', {
  134. token: token,
  135. path: `/api/nginx/certificates/${certID}/upload`,
  136. files: {
  137. certificate: 'website1.pem',
  138. certificate_key: 'website1.key.pem',
  139. },
  140. }).then((data) => {
  141. cy.validateSwaggerSchema('post', 200, '/nginx/certificates/{certID}/upload', data);
  142. expect(data).to.have.property('certificate');
  143. expect(data).to.have.property('certificate_key');
  144. // Create the stream
  145. cy.task('backendApiPost', {
  146. token: token,
  147. path: '/api/nginx/streams',
  148. data: {
  149. incoming_port: 1503,
  150. forwarding_host: '127.0.0.1',
  151. forwarding_port: 80,
  152. certificate_id: certID,
  153. meta: {
  154. dns_provider_credentials: "",
  155. letsencrypt_agree: false,
  156. dns_challenge: true
  157. },
  158. tcp_forwarding: true,
  159. udp_forwarding: false
  160. }
  161. }).then((data) => {
  162. cy.validateSwaggerSchema('post', 201, '/nginx/streams', data);
  163. expect(data).to.have.property('id');
  164. expect(data.id).to.be.greaterThan(0);
  165. expect(data).to.have.property("enabled", true);
  166. expect(data).to.have.property('tcp_forwarding', true);
  167. expect(data).to.have.property('udp_forwarding', false);
  168. expect(data).to.have.property('certificate_id', certID);
  169. // Check the ssl termination
  170. cy.task('log', '[testssl.sh] Running ...');
  171. cy.exec('/testssl/testssl.sh --quiet --add-ca="$(/bin/mkcert -CAROOT)/rootCA.pem" --jsonfile=/test/results/testssl.json website1.example.com:1503', {
  172. timeout: 120000, // 2 minutes
  173. }).then((result) => {
  174. cy.task('log', `[testssl.sh] ${result.stdout}`);
  175. const allowedSeverities = ["INFO", "OK", "LOW", "MEDIUM"];
  176. const ignoredIDs = [
  177. 'cert_chain_of_trust',
  178. 'cert_extlifeSpan',
  179. 'cert_revocation',
  180. 'overall_grade',
  181. ];
  182. cy.readFile('/test/results/testssl.json').then((data) => {
  183. // Parse each array item
  184. for (let i = 0; i < data.length; i++) {
  185. const item = data[i];
  186. if (ignoredIDs.includes(item.id)) {
  187. continue;
  188. }
  189. expect(item.severity).to.be.oneOf(allowedSeverities);
  190. }
  191. });
  192. });
  193. });
  194. });
  195. });
  196. });
  197. it('Should be able to List Streams', () => {
  198. cy.task('backendApiGet', {
  199. token: token,
  200. path: '/api/nginx/streams?expand=owner,certificate',
  201. }).then((data) => {
  202. cy.validateSwaggerSchema('get', 200, '/nginx/streams', data);
  203. expect(data.length).to.be.greaterThan(0);
  204. expect(data[0]).to.have.property('id');
  205. expect(data[0]).to.have.property('enabled');
  206. });
  207. });
  208. });