config.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. previousConfigFrontend = ''
  52. const { previousConfigServer } = await reconfigure({
  53. pro,
  54. version,
  55. vars,
  56. withDataDir,
  57. resetData,
  58. mongoVersion,
  59. })
  60. if (previousConfigServer !== cfg) {
  61. await Cypress.session.clearAllSavedSessions()
  62. }
  63. previousConfigFrontend = cfg
  64. })
  65. }
  66. // Allow reloading the server in other places, e.g. beforeEach hooks.
  67. export async function reloadWith({
  68. pro = false,
  69. version = 'latest',
  70. vars = {},
  71. varsFn = () => ({}),
  72. withDataDir = false,
  73. resetData = false,
  74. mongoVersion = '',
  75. }) {
  76. Object.assign(vars, varsFn())
  77. const cfg = JSON.stringify({
  78. pro,
  79. version,
  80. vars,
  81. withDataDir,
  82. resetData,
  83. mongoVersion,
  84. })
  85. if (resetData) {
  86. resetCreatedUsersCache()
  87. resetActivateUserRateLimit()
  88. // no return here, always reconfigure when resetting data
  89. } else if (previousConfigFrontend === cfg) {
  90. return
  91. }
  92. previousConfigFrontend = ''
  93. const { previousConfigServer } = await reconfigure({
  94. pro,
  95. version,
  96. vars,
  97. withDataDir,
  98. resetData,
  99. mongoVersion,
  100. })
  101. if (previousConfigServer !== cfg) {
  102. await Cypress.session.clearAllSavedSessions()
  103. }
  104. previousConfigFrontend = cfg
  105. }
  106. export { reconfigure }