load-test-config.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* tslint:disable:no-console */
  2. import { AssetServerPlugin } from '@vendure/asset-server-plugin';
  3. import {
  4. defaultConfig,
  5. DefaultLogger,
  6. DefaultSearchPlugin,
  7. dummyPaymentHandler,
  8. InMemorySessionCacheStrategy,
  9. LogLevel,
  10. mergeConfig,
  11. VendureConfig,
  12. } from '@vendure/core';
  13. import path from 'path';
  14. export function getMysqlConnectionOptions(count: number) {
  15. return {
  16. type: 'mysql' as const,
  17. host: '127.0.0.1',
  18. port: 3306,
  19. username: 'root',
  20. password: '',
  21. database: `vendure-load-testing-${count}`,
  22. extra: {
  23. // connectionLimit: 150,
  24. },
  25. };
  26. }
  27. export function getPostgresConnectionOptions(count: number) {
  28. return {
  29. type: 'postgres' as const,
  30. host: '127.0.0.1',
  31. port: 5432,
  32. username: 'admin',
  33. password: 'secret',
  34. database: `vendure-load-testing-${count}`,
  35. };
  36. }
  37. export function getLoadTestConfig(tokenMethod: 'cookie' | 'bearer'): Required<VendureConfig> {
  38. const count = getProductCount();
  39. return mergeConfig(defaultConfig, {
  40. paymentOptions: {
  41. paymentMethodHandlers: [dummyPaymentHandler],
  42. },
  43. orderOptions: {
  44. orderItemsLimit: 99999,
  45. },
  46. logger: new DefaultLogger({ level: LogLevel.Info }),
  47. dbConnectionOptions: getMysqlConnectionOptions(count),
  48. authOptions: {
  49. tokenMethod,
  50. requireVerification: false,
  51. sessionCacheStrategy: new InMemorySessionCacheStrategy(),
  52. },
  53. importExportOptions: {
  54. importAssetsDir: path.join(__dirname, './data-sources'),
  55. },
  56. workerOptions: {
  57. runInMainProcess: true,
  58. },
  59. customFields: {},
  60. plugins: [
  61. AssetServerPlugin.init({
  62. assetUploadDir: path.join(__dirname, 'static/assets'),
  63. route: 'assets',
  64. port: 5002,
  65. }),
  66. DefaultSearchPlugin,
  67. ],
  68. });
  69. }
  70. export function getProductCsvFilePath() {
  71. const count = getProductCount();
  72. return path.join(__dirname, `./data-sources/products-${count}.csv`);
  73. }
  74. export function getProductCount() {
  75. const count = +process.argv[2];
  76. if (!count) {
  77. console.error(`Please specify the number of products to generate`);
  78. process.exit(1);
  79. }
  80. return count;
  81. }
  82. export function getScriptToRun(): string[] | undefined {
  83. const script = process.argv[3];
  84. if (script) {
  85. return [script];
  86. }
  87. }