From e2df1e5077139c32d5ed890366d74123b1ead132 Mon Sep 17 00:00:00 2001 From: Neil Menne Date: Fri, 4 Oct 2019 12:05:49 -0400 Subject: [PATCH 1/2] HLClock as part of Maestro --- lib/maestro/aggregate/root.ex | 4 +- lib/maestro/application.ex | 1 + lib/maestro/types/event.ex | 4 +- lib/maestro/types/snapshot.ex | 2 +- .../maestro.create.event_store_migration.ex | 6 +-- mix.exs | 10 ++-- mix.lock | 34 ++++++------- ...20171005204551_event_log_and_snapshots.exs | 6 +-- .../20180423183715_named_aggregates.exs | 2 +- test/maestro/aggregate_test.exs | 9 ++-- test/maestro/in_memory_test.exs | 48 ++++++++++++------- test/maestro/postgres_test.exs | 48 ++++++++++++------- test/support/generators.ex | 25 +++++----- test/support/schemas/named_aggregate.ex | 2 +- 14 files changed, 114 insertions(+), 87 deletions(-) diff --git a/lib/maestro/aggregate/root.ex b/lib/maestro/aggregate/root.ex index eeec0bd..7ea8d00 100644 --- a/lib/maestro/aggregate/root.ex +++ b/lib/maestro/aggregate/root.ex @@ -108,7 +108,7 @@ defmodule Maestro.Aggregate.Root do end def new do - with {:ok, agg_id} <- HLClock.now() do + with {:ok, agg_id} <- HLClock.now(:maestro_hlc) do Root.whereis(agg_id, __MODULE__) {:ok, agg_id} end @@ -359,7 +359,7 @@ defmodule Maestro.Aggregate.Root do events |> Enum.with_index(agg.sequence + 1) |> Enum.reduce([], fn {event, seq}, evs -> - with {:ok, ts} <- HLClock.now() do + with {:ok, ts} <- HLClock.now(:maestro_hlc) do [%{event | timestamp: ts, sequence: seq} | evs] end end) diff --git a/lib/maestro/application.ex b/lib/maestro/application.ex index fb60a8f..a0384f3 100644 --- a/lib/maestro/application.ex +++ b/lib/maestro/application.ex @@ -5,6 +5,7 @@ defmodule Maestro.Application do def start(_type, _args) do children = [ + {HLClock, name: :maestro_hlc}, {Registry, keys: :unique, name: Maestro.Aggregate.Registry}, {Maestro.Aggregate.Supervisor, []} ] diff --git a/lib/maestro/types/event.ex b/lib/maestro/types/event.ex index 41a831f..fcfc012 100644 --- a/lib/maestro/types/event.ex +++ b/lib/maestro/types/event.ex @@ -40,8 +40,8 @@ defmodule Maestro.Types.Event do @primary_key false schema "event_log" do - field(:timestamp, Ecto.HLClock, primary_key: true) - field(:aggregate_id, Ecto.HLClock) + field(:timestamp, EctoHLClock, primary_key: true) + field(:aggregate_id, EctoHLClock) field(:sequence, :integer) field(:type, :string) field(:body, :map) diff --git a/lib/maestro/types/snapshot.ex b/lib/maestro/types/snapshot.ex index 4ff1360..872d25a 100644 --- a/lib/maestro/types/snapshot.ex +++ b/lib/maestro/types/snapshot.ex @@ -26,7 +26,7 @@ defmodule Maestro.Types.Snapshot do @primary_key false schema "snapshots" do - field(:aggregate_id, Ecto.HLClock, primary_key: true) + field(:aggregate_id, EctoHLClock, primary_key: true) field(:sequence, :integer) field(:body, :map) end diff --git a/lib/mix/tasks/maestro.create.event_store_migration.ex b/lib/mix/tasks/maestro.create.event_store_migration.ex index 95865c8..8203ca2 100644 --- a/lib/mix/tasks/maestro.create.event_store_migration.ex +++ b/lib/mix/tasks/maestro.create.event_store_migration.ex @@ -35,9 +35,9 @@ defmodule Mix.Tasks.Maestro.Create.EventStoreMigration do add :body, :map, null: false end - Ecto.HLClock.Migration.create_hlc_constraint(:event_log, :timestamp) - Ecto.HLClock.Migration.create_hlc_constraint(:event_log, :aggregate_id) - Ecto.HLClock.Migration.create_hlc_constraint(:snapshots, :aggregate_id) + EctoHLClock.Migration.create_hlc_constraint(:event_log, :timestamp) + EctoHLClock.Migration.create_hlc_constraint(:event_log, :aggregate_id) + EctoHLClock.Migration.create_hlc_constraint(:snapshots, :aggregate_id) create constraint(:event_log, :sequence, check: "sequence > 0") create unique_index(:event_log, [:aggregate_id, :sequence], diff --git a/mix.exs b/mix.exs index 43ff2d8..e30f55f 100644 --- a/mix.exs +++ b/mix.exs @@ -1,14 +1,14 @@ defmodule Maestro.Mixfile do use Mix.Project - @version "0.3.4" + @version "0.4.0" @source_url "https://github.com/toniqsystems/maestro" def project do [ app: :maestro, version: @version, - elixir: "~> 1.7", + elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), start_permanent: Mix.env() == :prod, aliases: aliases(), @@ -44,10 +44,10 @@ defmodule Maestro.Mixfile do defp deps do [ - {:ecto, "~> 3.0"}, - {:ecto_sql, "~> 3.0"}, + {:ecto, "~> 3.2"}, + {:ecto_sql, "~> 3.2"}, {:postgrex, ">= 0.0.0"}, - {:ecto_hlclock, "~> 0.1"}, + {:ecto_hlclock, "~> 0.2"}, {:jason, "~> 1.1"}, {:mock, "~> 0.3", only: :test, runtime: false}, {:credo, "~> 1.0", only: [:dev, :test]}, diff --git a/mix.lock b/mix.lock index bda00bb..00631eb 100644 --- a/mix.lock +++ b/mix.lock @@ -3,36 +3,36 @@ "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm"}, "connection": {:hex, :connection, "1.0.4", "a1cae72211f0eef17705aaededacac3eb30e6625b04a6117c1b2db6ace7d5976", [:mix], [], "hexpm"}, - "credo": {:hex, :credo, "1.0.5", "fdea745579f8845315fe6a3b43e2f9f8866839cfbc8562bb72778e9fdaa94214", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, - "db_connection": {:hex, :db_connection, "2.0.5", "ddb2ba6761a08b2bb9ca0e7d260e8f4dd39067426d835c24491a321b7f92a4da", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"}, - "decimal": {:hex, :decimal, "1.7.0", "30d6b52c88541f9a66637359ddf85016df9eb266170d53105f02e4a67e00c5aa", [:mix], [], "hexpm"}, + "credo": {:hex, :credo, "1.1.4", "c2f3b73c895d81d859cec7fcee7ffdb972c595fd8e85ab6f8c2adbf01cf7c29c", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, + "db_connection": {:hex, :db_connection, "2.1.1", "a51e8a2ee54ef2ae6ec41a668c85787ed40cb8944928c191280fe34c15b76ae5", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm"}, + "decimal": {:hex, :decimal, "1.8.0", "ca462e0d885f09a1c5a342dbd7c1dcf27ea63548c65a65e67334f4b61803822e", [:mix], [], "hexpm"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm"}, "dialyxir": {:hex, :dialyxir, "0.5.1", "b331b091720fd93e878137add264bac4f644e1ddae07a70bf7062c7862c4b952", [:mix], [], "hexpm"}, - "earmark": {:hex, :earmark, "1.3.2", "b840562ea3d67795ffbb5bd88940b1bed0ed9fa32834915125ea7d02e35888a5", [:mix], [], "hexpm"}, - "ecto": {:hex, :ecto, "3.0.7", "44dda84ac6b17bbbdeb8ac5dfef08b7da253b37a453c34ab1a98de7f7e5fec7f", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm"}, - "ecto_hlclock": {:hex, :ecto_hlclock, "0.1.2", "432f8f71cd3e426884a64ddba7762d2a61c4bff2707e2e46d30f6c9599c8d2a1", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:hlclock, "~> 0.1", [hex: :hlclock, repo: "hexpm", optional: false]}], "hexpm"}, - "ecto_sql": {:hex, :ecto_sql, "3.0.5", "7e44172b4f7aca4469f38d7f6a3da394dbf43a1bcf0ca975e958cb957becd74e", [:mix], [{:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.0.6", [hex: :ecto, repo: "hexpm", optional: false]}, {:mariaex, "~> 0.9.1", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.14.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.3.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, - "ex_doc": {:hex, :ex_doc, "0.20.2", "1bd0dfb0304bade58beb77f20f21ee3558cc3c753743ae0ddbb0fd7ba2912331", [:mix], [{:earmark, "~> 1.3", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.10", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, - "excoveralls": {:hex, :excoveralls, "0.10.6", "e2b9718c9d8e3ef90bc22278c3f76c850a9f9116faf4ebe9678063310742edc2", [:mix], [{:hackney, "~> 1.13", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, + "earmark": {:hex, :earmark, "1.4.1", "07bb382826ee8d08d575a1981f971ed41bd5d7e86b917fd012a93c51b5d28727", [:mix], [], "hexpm"}, + "ecto": {:hex, :ecto, "3.2.2", "bb6d1dbcd7ef975b60637e63182e56f3d7d0b5dd9c46d4b9d6183a5c455d65d1", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, + "ecto_hlclock": {:hex, :ecto_hlclock, "0.2.0", "7c0e0ddbf252dda8de91eabae28345e990742588aba063fdcdcfc97cbc7e95c7", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:hlclock, "~> 1.0", [hex: :hlclock, repo: "hexpm", optional: false]}], "hexpm"}, + "ecto_sql": {:hex, :ecto_sql, "3.2.0", "751cea597e8deb616084894dd75cbabfdbe7255ff01e8c058ca13f0353a3921b", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.2.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.2.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, + "ex_doc": {:hex, :ex_doc, "0.21.2", "caca5bc28ed7b3bdc0b662f8afe2bee1eedb5c3cf7b322feeeb7c6ebbde089d6", [:mix], [{:earmark, "~> 1.3.3 or ~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, + "excoveralls": {:hex, :excoveralls, "0.11.2", "0c6f2c8db7683b0caa9d490fb8125709c54580b4255ffa7ad35f3264b075a643", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"}, "exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"}, - "hackney": {:hex, :hackney, "1.15.1", "9f8f471c844b8ce395f7b6d8398139e26ddca9ebc171a8b91342ee15a19963f4", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, - "hlclock": {:hex, :hlclock, "0.1.6", "ca4de3f8b3eb410e29de8273cb060a265fe89d5498a272efc58619753764d0c7", [:mix], [], "hexpm"}, + "hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, + "hlclock": {:hex, :hlclock, "1.0.0", "7a72fc7a20a9382499216227edf97a8b118e21fc3fcad0e81b8d10c616ce1431", [:mix], [], "hexpm"}, "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm"}, - "makeup": {:hex, :makeup, "0.8.0", "9cf32aea71c7fe0a4b2e9246c2c4978f9070257e5c9ce6d4a28ec450a839b55f", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.13.0", "be7a477997dcac2e48a9d695ec730b2d22418292675c75aa2d34ba0909dcdeda", [:mix], [{:makeup, "~> 0.8", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, + "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, "meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.3", "42a433794b1291a9cf1525c6d26b38e039e0d3a360732b5e467bfc77ef26c914", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm"}, + "nimble_parsec": {:hex, :nimble_parsec, "0.5.1", "c90796ecee0289dbb5ad16d3ad06f957b0cd1199769641c961cfe0b97db190e0", [:mix], [], "hexpm"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, "poolboy": {:hex, :poolboy, "1.5.1", "6b46163901cfd0a1b43d692657ed9d7e599853b3b21b95ae5ae0a777cf9b6ca8", [:rebar], [], "hexpm"}, - "postgrex": {:hex, :postgrex, "0.14.1", "63247d4a5ad6b9de57a0bac5d807e1c32d41e39c04b8a4156a26c63bcd8a2e49", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.0", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, - "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.4", "f0eafff810d2041e93f915ef59899c923f4568f4585904d010387ed74988e77b", [:make, :mix, :rebar3], [], "hexpm"}, + "postgrex": {:hex, :postgrex, "0.15.1", "23ce3417de70f4c0e9e7419ad85bdabcc6860a6925fe2c6f3b1b5b1e8e47bf2f", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm"}, + "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm"}, "stream_data": {:hex, :stream_data, "0.4.2", "fa86b78c88ec4eaa482c0891350fcc23f19a79059a687760ddcf8680aac2799b", [:mix], [], "hexpm"}, - "telemetry": {:hex, :telemetry, "0.3.0", "099a7f3ce31e4780f971b4630a3c22ec66d22208bc090fe33a2a3a6a67754a73", [:rebar3], [], "hexpm"}, + "telemetry": {:hex, :telemetry, "0.4.0", "8339bee3fa8b91cb84d14c2935f8ecf399ccd87301ad6da6b71c09553834b2ab", [:rebar3], [], "hexpm"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm"}, } diff --git a/priv/repo/migrations/20171005204551_event_log_and_snapshots.exs b/priv/repo/migrations/20171005204551_event_log_and_snapshots.exs index fa52f69..37e2531 100644 --- a/priv/repo/migrations/20171005204551_event_log_and_snapshots.exs +++ b/priv/repo/migrations/20171005204551_event_log_and_snapshots.exs @@ -10,8 +10,8 @@ defmodule Maestro.Repo.Migrations.EventLogAndSnapshots do add :body, :map, null: false end - Ecto.HLClock.Migration.create_hlc_constraint(:event_log, :timestamp) - Ecto.HLClock.Migration.create_hlc_constraint(:event_log, :aggregate_id) + EctoHLClock.Migration.create_hlc_constraint(:event_log, :timestamp) + EctoHLClock.Migration.create_hlc_constraint(:event_log, :aggregate_id) create constraint(:event_log, :sequence, check: "sequence > 0") create unique_index(:event_log, [:aggregate_id, :sequence], @@ -23,6 +23,6 @@ defmodule Maestro.Repo.Migrations.EventLogAndSnapshots do add :body, :map, null: false end - Ecto.HLClock.Migration.create_hlc_constraint(:snapshots, :aggregate_id) + EctoHLClock.Migration.create_hlc_constraint(:snapshots, :aggregate_id) end end diff --git a/priv/repo/migrations/20180423183715_named_aggregates.exs b/priv/repo/migrations/20180423183715_named_aggregates.exs index 3789b80..dc9ca10 100644 --- a/priv/repo/migrations/20180423183715_named_aggregates.exs +++ b/priv/repo/migrations/20180423183715_named_aggregates.exs @@ -8,7 +8,7 @@ defmodule Maestro.Repo.Migrations.NamedAggregates do add(:aggregate_id, :binary, null: false) end - Ecto.HLClock.Migration.create_hlc_constraint( + EctoHLClock.Migration.create_hlc_constraint( :named_aggregates, :aggregate_id ) diff --git a/test/maestro/aggregate_test.exs b/test/maestro/aggregate_test.exs index 8d9f478..4c59f59 100644 --- a/test/maestro/aggregate_test.exs +++ b/test/maestro/aggregate_test.exs @@ -8,7 +8,6 @@ defmodule Maestro.AggregateTest do alias DBConnection.ConnectionError alias Ecto.Adapters.SQL.Sandbox - alias HLClock.Server, as: HLCServer alias Maestro.Aggregate.Root alias Maestro.{InvalidCommandError, InvalidHandlerError} alias Maestro.{Repo, SampleAggregate} @@ -21,8 +20,6 @@ defmodule Maestro.AggregateTest do Maestro.Store.Postgres ) - HLCServer.start_link() - :ok = Sandbox.checkout(Repo) Sandbox.mode(Repo, {:shared, self()}) @@ -31,8 +28,10 @@ defmodule Maestro.AggregateTest do describe "command/event lifecycle" do property "commands and events without snapshots" do - check all agg_id <- timestamp(), - coms <- commands(agg_id, max_commands: 200) do + check all( + agg_id <- timestamp(), + coms <- commands(agg_id, max_commands: 200) + ) do for com <- coms do :ok = SampleAggregate.evaluate(com) end diff --git a/test/maestro/in_memory_test.exs b/test/maestro/in_memory_test.exs index 6e41dd1..022c3f1 100644 --- a/test/maestro/in_memory_test.exs +++ b/test/maestro/in_memory_test.exs @@ -26,13 +26,15 @@ defmodule Maestro.InMemoryTest do describe "commit_events/1" do property "no conflict events are committed" do - check all agg_id <- timestamp(), - times <- - uniq_list_of( - timestamp(), - min_length: 1, - max_length: 10 - ) do + check all( + agg_id <- timestamp(), + times <- + uniq_list_of( + timestamp(), + min_length: 1, + max_length: 10 + ) + ) do InMemory.reset() times @@ -47,9 +49,11 @@ defmodule Maestro.InMemoryTest do end property "sequence conflicts are marked for retry" do - check all agg_id <- timestamp(), - ts0 <- timestamp(), - times <- uniq_list_of(timestamp(), min_length: 1) do + check all( + agg_id <- timestamp(), + ts0 <- timestamp(), + times <- uniq_list_of(timestamp(), min_length: 1) + ) do InMemory.reset() times @@ -71,8 +75,10 @@ defmodule Maestro.InMemoryTest do describe "get_events/2" do property "returns empty list when no relevant events exist" do - check all agg_id <- timestamp(), - times <- uniq_list_of(timestamp()) do + check all( + agg_id <- timestamp(), + times <- uniq_list_of(timestamp()) + ) do InMemory.reset() times @@ -85,8 +91,10 @@ defmodule Maestro.InMemoryTest do end property "returns events otherwise" do - check all agg_id <- timestamp(), - times <- uniq_list_of(timestamp(), min_length: 1) do + check all( + agg_id <- timestamp(), + times <- uniq_list_of(timestamp(), min_length: 1) + ) do InMemory.reset() total = Enum.count(times) @@ -111,8 +119,10 @@ defmodule Maestro.InMemoryTest do describe "commit_snapshot/1" do property "commits if newer" do - check all agg_id <- timestamp(), - [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) do + check all( + agg_id <- timestamp(), + [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) + ) do InMemory.reset() agg_id @@ -131,8 +141,10 @@ defmodule Maestro.InMemoryTest do describe "get_snapshot/2" do property "retrieve if newer" do - check all agg_id <- timestamp(), - [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) do + check all( + agg_id <- timestamp(), + [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) + ) do InMemory.reset() agg_id diff --git a/test/maestro/postgres_test.exs b/test/maestro/postgres_test.exs index 3c802b6..5da3d9e 100644 --- a/test/maestro/postgres_test.exs +++ b/test/maestro/postgres_test.exs @@ -24,13 +24,15 @@ defmodule Maestro.PostgresTest do describe "commit_events/1" do property "no conflict events are committed" do - check all agg_id <- timestamp(), - times <- - uniq_list_of( - timestamp(), - min_length: 1, - max_length: 10 - ) do + check all( + agg_id <- timestamp(), + times <- + uniq_list_of( + timestamp(), + min_length: 1, + max_length: 10 + ) + ) do times |> Enum.with_index(1) |> Enum.map(&to_event(&1, agg_id)) @@ -41,9 +43,11 @@ defmodule Maestro.PostgresTest do end property "sequence conflicts are marked for retry" do - check all agg_id <- timestamp(), - ts0 <- timestamp(), - times <- uniq_list_of(timestamp(), min_length: 1) do + check all( + agg_id <- timestamp(), + ts0 <- timestamp(), + times <- uniq_list_of(timestamp(), min_length: 1) + ) do times |> Enum.with_index(1) |> Enum.map(&to_event(&1, agg_id)) @@ -63,8 +67,10 @@ defmodule Maestro.PostgresTest do describe "get_events/2" do property "returns empty list when no relevant events exist" do - check all agg_id <- timestamp(), - times <- uniq_list_of(timestamp()) do + check all( + agg_id <- timestamp(), + times <- uniq_list_of(timestamp()) + ) do times |> Enum.with_index(1) |> Enum.map(&to_event(&1, agg_id)) @@ -75,8 +81,10 @@ defmodule Maestro.PostgresTest do end property "returns events otherwise" do - check all agg_id <- timestamp(), - times <- uniq_list_of(timestamp(), min_length: 1) do + check all( + agg_id <- timestamp(), + times <- uniq_list_of(timestamp(), min_length: 1) + ) do total = Enum.count(times) times @@ -99,8 +107,10 @@ defmodule Maestro.PostgresTest do describe "commit_snapshot/1" do property "commits if newer" do - check all agg_id <- timestamp(), - [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) do + check all( + agg_id <- timestamp(), + [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) + ) do agg_id |> to_snapshot(seq0, %{"seq0" => seq0}) |> Store.commit_snapshot() @@ -128,8 +138,10 @@ defmodule Maestro.PostgresTest do describe "get_snapshot/2" do property "retrieve if newer" do - check all agg_id <- timestamp(), - [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) do + check all( + agg_id <- timestamp(), + [seq0, seq1] <- uniq_list_of(integer(1..100_000), length: 2) + ) do agg_id |> to_snapshot(seq0, %{"seq0" => seq0}) |> Store.commit_snapshot() diff --git a/test/support/generators.ex b/test/support/generators.ex index 77b1626..df5e831 100644 --- a/test/support/generators.ex +++ b/test/support/generators.ex @@ -15,11 +15,12 @@ defmodule Maestro.Generators do @max_time_size 2_147_483_647 def timestamp do - gen all time <- integer(0..max_time()), - counter <- integer(0..max_counter()), - node_id <- integer(0..max_node()) do - {:ok, timestamp} = Timestamp.new(time, counter, node_id) - timestamp + gen all( + time <- integer(0..max_time()), + counter <- integer(0..max_counter()), + node_id <- integer(0..max_node()) + ) do + Timestamp.new(time, counter, node_id) end end @@ -31,12 +32,14 @@ defmodule Maestro.Generators do defaults = [max_commands: 10] [max_commands: max_commands] = Keyword.merge(defaults, opts) - gen all com_flags <- - list_of( - boolean(), - max_length: max_commands, - min_length: 1 - ) do + gen all( + com_flags <- + list_of( + boolean(), + max_length: max_commands, + min_length: 1 + ) + ) do com_flags |> Enum.map(&to_command(&1, agg_id)) end diff --git a/test/support/schemas/named_aggregate.ex b/test/support/schemas/named_aggregate.ex index 6fff42a..6d4a688 100644 --- a/test/support/schemas/named_aggregate.ex +++ b/test/support/schemas/named_aggregate.ex @@ -9,6 +9,6 @@ defmodule Maestro.Schemas.NamedAggregate do @primary_key {:id, :binary_id, autogenerate: true} schema "named_aggregates" do field(:name, :string) - field(:aggregate_id, Ecto.HLClock) + field(:aggregate_id, EctoHLClock) end end From bfb5c2b1a27e5a7bd6f7dcaa8f65fb2b7f20b824 Mon Sep 17 00:00:00 2001 From: Neil Menne Date: Fri, 4 Oct 2019 12:18:23 -0400 Subject: [PATCH 2/2] travis version --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c5d586d..d8a3f79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: elixir elixir: - - 1.7.0 + - 1.9.0 otp_release: - 21.0