load-test-config.ts 2.5 KB

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