Streams.cy.js 6.4 KB

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