config.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. | 'PRO_CUSTOM_5'
  17. ) {
  18. const SHARD = Cypress.env('SHARD')
  19. return SHARD && shard !== SHARD
  20. }
  21. let previousConfigFrontend: string
  22. export function startWith({
  23. pro = false,
  24. version = 'latest',
  25. vars = {},
  26. varsFn = () => ({}),
  27. withDataDir = false,
  28. resetData = false,
  29. mongoVersion = '',
  30. }) {
  31. before(async function () {
  32. Object.assign(vars, varsFn())
  33. const cfg = JSON.stringify({
  34. pro,
  35. version,
  36. vars,
  37. withDataDir,
  38. resetData,
  39. mongoVersion,
  40. })
  41. if (resetData) {
  42. cy.log('resetting data and sessions')
  43. resetCreatedUsersCache()
  44. resetActivateUserRateLimit()
  45. // no return here, always reconfigure when resetting data
  46. } else if (previousConfigFrontend === cfg) {
  47. cy.log(`already running with ${cfg}`)
  48. return
  49. }
  50. cy.log(`starting with ${cfg}`)
  51. this.timeout(STARTUP_TIMEOUT)
  52. previousConfigFrontend = ''
  53. const { previousConfigServer } = await reconfigure({
  54. pro,
  55. version,
  56. vars,
  57. withDataDir,
  58. resetData,
  59. mongoVersion,
  60. })
  61. if (previousConfigServer !== cfg) {
  62. await Cypress.session.clearAllSavedSessions()
  63. }
  64. previousConfigFrontend = cfg
  65. })
  66. }
  67. // Allow reloading the server in other places, e.g. beforeEach hooks.
  68. export async function reloadWith({
  69. pro = false,
  70. version = 'latest',
  71. vars = {},
  72. varsFn = () => ({}),
  73. withDataDir = false,
  74. resetData = false,
  75. mongoVersion = '',
  76. }) {
  77. Object.assign(vars, varsFn())
  78. const cfg = JSON.stringify({
  79. pro,
  80. version,
  81. vars,
  82. withDataDir,
  83. resetData,
  84. mongoVersion,
  85. })
  86. if (resetData) {
  87. resetCreatedUsersCache()
  88. resetActivateUserRateLimit()
  89. // no return here, always reconfigure when resetting data
  90. } else if (previousConfigFrontend === cfg) {
  91. return
  92. }
  93. previousConfigFrontend = ''
  94. const { previousConfigServer } = await reconfigure({
  95. pro,
  96. version,
  97. vars,
  98. withDataDir,
  99. resetData,
  100. mongoVersion,
  101. })
  102. if (previousConfigServer !== cfg) {
  103. await Cypress.session.clearAllSavedSessions()
  104. }
  105. previousConfigFrontend = cfg
  106. }
  107. export { reconfigure }