load_generator.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. from textwrap import dedent
  10. from materialize.checks.actions import Testdrive
  11. from materialize.checks.checks import Check
  12. from materialize.checks.executors import Executor
  13. from materialize.mz_version import MzVersion
  14. class LoadGeneratorAsOfUpTo(Check):
  15. def initialize(self) -> Testdrive:
  16. return Testdrive(
  17. dedent(
  18. """
  19. > CREATE SOURCE counter1 FROM LOAD GENERATOR COUNTER (AS OF 100, UP TO 200);
  20. > CREATE SOURCE auction1 FROM LOAD GENERATOR AUCTION (AS OF 100, UP TO 200);
  21. > CREATE TABLE accounts FROM SOURCE auction1 (REFERENCE accounts);
  22. > CREATE TABLE auctions FROM SOURCE auction1 (REFERENCE auctions);
  23. > CREATE TABLE bids FROM SOURCE auction1 (REFERENCE bids);
  24. > CREATE TABLE organizations FROM SOURCE auction1 (REFERENCE organizations);
  25. > CREATE TABLE users FROM SOURCE auction1 (REFERENCE users);
  26. """
  27. )
  28. )
  29. def manipulate(self) -> list[Testdrive]:
  30. return [
  31. Testdrive(dedent(s))
  32. for s in [
  33. """
  34. > CREATE SOURCE counter2 FROM LOAD GENERATOR COUNTER (AS OF 1100, UP TO 1200);
  35. """,
  36. """
  37. > CREATE SOURCE counter3 FROM LOAD GENERATOR COUNTER (AS OF 11100, UP TO 11200);
  38. """,
  39. ]
  40. ]
  41. def validate(self) -> Testdrive:
  42. return Testdrive(
  43. dedent(
  44. """
  45. > SELECT COUNT(*) FROM counter1;
  46. 200
  47. > SELECT COUNT(*) FROM counter2;
  48. 1200
  49. > SELECT COUNT(*) FROM counter3;
  50. 11200
  51. > SELECT COUNT(*) FROM users;
  52. 4076
  53. """
  54. )
  55. )
  56. class LoadGeneratorMultiReplica(Check):
  57. def _can_run(self, e: Executor) -> bool:
  58. return self.base_version >= MzVersion.parse_mz("v0.134.0-dev")
  59. def initialize(self) -> Testdrive:
  60. return Testdrive(
  61. dedent(
  62. """
  63. >[version>=13800] CREATE CLUSTER multi_cluster1 SIZE '1', REPLICATION FACTOR 2;
  64. >[version<13800] CREATE CLUSTER multi_cluster1 SIZE '1', REPLICATION FACTOR 1;
  65. >[version>=13800] CREATE CLUSTER multi_cluster2 SIZE '1', REPLICATION FACTOR 2;
  66. >[version<13800] CREATE CLUSTER multi_cluster2 SIZE '1', REPLICATION FACTOR 1;
  67. """
  68. )
  69. )
  70. def manipulate(self) -> list[Testdrive]:
  71. return [
  72. Testdrive(dedent(s))
  73. for s in [
  74. """
  75. > CREATE SOURCE multi_counter1 IN CLUSTER multi_cluster1 FROM LOAD GENERATOR COUNTER (UP TO 10);
  76. > CREATE SOURCE multi_counter2 IN CLUSTER multi_cluster2 FROM LOAD GENERATOR COUNTER (UP TO 10);
  77. > ALTER CLUSTER multi_cluster1 SET (REPLICATION FACTOR 4);
  78. """,
  79. """
  80. > CREATE SOURCE multi_counter3 IN CLUSTER multi_cluster1 FROM LOAD GENERATOR COUNTER (UP TO 10);
  81. > CREATE SOURCE multi_counter4 IN CLUSTER multi_cluster2 FROM LOAD GENERATOR COUNTER (UP TO 10);
  82. > ALTER CLUSTER multi_cluster2 SET (REPLICATION FACTOR 4);
  83. """,
  84. ]
  85. ]
  86. def validate(self) -> Testdrive:
  87. return Testdrive(
  88. dedent(
  89. """
  90. > SELECT COUNT(*) FROM multi_counter1;
  91. 10
  92. > SELECT COUNT(*) FROM multi_counter2;
  93. 10
  94. > SELECT COUNT(*) FROM multi_counter3;
  95. 10
  96. > SELECT COUNT(*) FROM multi_counter4;
  97. 10
  98. """
  99. )
  100. )