config.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { reconfigure } from './hostAdminClient'
  2. import { resetActivateUserRateLimit, resetCreatedUsersCache } from './login'
  3. export const STARTUP_TIMEOUT =
  4. parseInt(Cypress.env('STARTUP_TIMEOUT'), 10) || 120_000
  5. export function isExcludedBySharding(
  6. shard:
  7. | 'LOCAL_ONLY'
  8. | 'CE_DEFAULT'
  9. | 'CE_CUSTOM_1'
  10. | 'PRO_DEFAULT_1'
  11. | 'PRO_DEFAULT_2'
  12. | 'PRO_CUSTOM_1'
  13. | 'PRO_CUSTOM_2'
  14. | 'PRO_CUSTOM_3'
  15. | 'PRO_CUSTOM_4'
  16. ) {
  17. const SHARD = Cypress.env('SHARD')
  18. return SHARD && shard !== SHARD
  19. }
  20. let previousConfigFrontend: string
  21. export function startWith({
  22. pro = false,
  23. version = 'latest',
  24. vars = {},
  25. varsFn = () => ({}),
  26. withDataDir = false,
  27. resetData = false,
  28. mongoVersion = '',
  29. }) {
  30. before(async function () {
  31. Object.assign(vars, varsFn())
  32. const cfg = JSON.stringify({
  33. pro,
  34. version,
  35. vars,
  36. withDataDir,
  37. resetData,
  38. mongoVersion,
  39. })
  40. if (resetData) {
  41. cy.log('resetting data and sessions')
  42. resetCreatedUsersCache()
  43. resetActivateUserRateLimit()
  44. // no return here, always reconfigure when resetting data
  45. } else if (previousConfigFrontend === cfg) {
  46. cy.log(`already running with ${cfg}`)
  47. return
  48. }
  49. cy.log(`starting with ${cfg}`)
  50. this.timeout(STARTUP_TIMEOUT)
  51. const { previousConfigServer } = await reconfigure({
  52. pro,
  53. version,
  54. vars,
  55. withDataDir,
  56. resetData,
  57. mongoVersion,
  58. })
  59. if (previousConfigServer !== cfg) {
  60. await Cypress.session.clearAllSavedSessions()
  61. }
  62. previousConfigFrontend = cfg
  63. })
  64. }
  65. // Allow reloading the server in other places, e.g. beforeEach hooks.
  66. export async function reloadWith({
  67. pro = false,
  68. version = 'latest',
  69. vars = {},
  70. varsFn = () => ({}),
  71. withDataDir = false,
  72. resetData = false,
  73. mongoVersion = '',
  74. }) {
  75. Object.assign(vars, varsFn())
  76. const cfg = JSON.stringify({
  77. pro,
  78. version,
  79. vars,
  80. withDataDir,
  81. resetData,
  82. mongoVersion,
  83. })
  84. if (resetData) {
  85. resetCreatedUsersCache()
  86. resetActivateUserRateLimit()
  87. // no return here, always reconfigure when resetting data
  88. } else if (previousConfigFrontend === cfg) {
  89. return
  90. }
  91. const { previousConfigServer } = await reconfigure({
  92. pro,
  93. version,
  94. vars,
  95. withDataDir,
  96. resetData,
  97. mongoVersion,
  98. })
  99. if (previousConfigServer !== cfg) {
  100. await Cypress.session.clearAllSavedSessions()
  101. }
  102. previousConfigFrontend = cfg
  103. }
  104. export { reconfigure }