Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Samuel committed Aug 23, 2022
1 parent aae5a31 commit e7b5b25
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 6 deletions.
2 changes: 1 addition & 1 deletion config/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ config :archethic, Archethic.Mining.PendingTransactionValidation, validate_node_
config :archethic, Archethic.Metrics.Poller, enabled: false
config :archethic, Archethic.Metrics.Collector, MockMetricsCollector

config :archethic, Archethic.Reward.Scheduler, enabled: false
config :archethic, Archethic.Reward.Scheduler, enabled: false, interval: "0 0 * * * * *"
config :archethic, Archethic.Reward.MemTables.RewardTokens, enabled: false
config :archethic, Archethic.Reward.MemTablesLoader, enabled: false

Expand Down
9 changes: 4 additions & 5 deletions lib/archethic/mining/pending_transaction_validation.ex
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ defmodule Archethic.Mining.PendingTransactionValidation do
transaction_address: Base.encode16(tx.address)
)

{:error, "Invalid node rewards trigger time "}
{:error, "Invalid node rewards trigger time"}

_ ->
{:error, "Invalid network pool transfers"}
Expand Down Expand Up @@ -261,7 +261,7 @@ defmodule Archethic.Mining.PendingTransactionValidation do
:ok
else
{:error, :time} ->
{:error, "Invalid node node shared secrets trigger time "}
{:error, "Invalid node shared secrets trigger time"}

:error ->
{:error, "Invalid node shared secrets transaction content"}
Expand Down Expand Up @@ -439,7 +439,7 @@ defmodule Archethic.Mining.PendingTransactionValidation do
:ok
else
{:error, :time} ->
{:error, "Invalid oracle trigger time "}
{:error, "Invalid oracle trigger time"}

false ->
{:error, "Invalid oracle transaction"}
Expand Down Expand Up @@ -543,8 +543,7 @@ defmodule Archethic.Mining.PendingTransactionValidation do
defp validate_scheduling_network_tx_time(last_scheduling_date, tx) do
case TransactionChain.get_transaction(Transaction.previous_address(tx)) do
{:ok, %Transaction{validation_stamp: %ValidationStamp{timestamp: timestamp}}} ->
if DateTime.compare(timestamp, last_scheduling_date) ==
:gt do
if DateTime.compare(timestamp, last_scheduling_date) in [:gt, :eq] do
Logger.debug(
"Last scheduling date: #{last_scheduling_date} - Previous Tx date: #{timestamp} - Now: #{DateTime.utc_now()}"
)
Expand Down
73 changes: 73 additions & 0 deletions test/archethic/mining/pending_transaction_validation_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ defmodule Archethic.Mining.PendingTransactionValidationTest do
alias Archethic.TransactionChain.Transaction
alias Archethic.TransactionChain.TransactionData
alias Archethic.TransactionChain.TransactionData.Ownership
alias Archethic.TransactionChain.Transaction.ValidationStamp

import Mox

Expand Down Expand Up @@ -449,5 +450,77 @@ defmodule Archethic.Mining.PendingTransactionValidationTest do
assert {:error, "There is already a mint rewards transaction since last schedule"} =
PendingTransactionValidation.validate(tx)
end

test "should return error when there is already a oracle transaction since the last schedule" do
MockDB
|> expect(:get_transaction, fn _, _ ->
{:ok,
%Transaction{
validation_stamp: %ValidationStamp{
timestamp: ~U[2022-01-01 00:10:00Z]
}
}}
end)

tx = Transaction.new(:oracle, %TransactionData{}, "seed", 0)

assert {:error, "Invalid oracle trigger time"} =
PendingTransactionValidation.validate(tx, ~U[2022-01-01 00:10:03Z])
end

test "should return error when there is already a node shared secrets transaction since the last schedule" do
MockDB
|> expect(:get_transaction, fn _, _ ->
{:ok,
%Transaction{
validation_stamp: %ValidationStamp{
timestamp: ~U[2022-01-01 00:00:00Z]
}
}}
end)

tx =
Transaction.new(
:node_shared_secrets,
%TransactionData{
content: :crypto.strong_rand_bytes(32),
ownerships: [
%Ownership{
secret: :crypto.strong_rand_bytes(32),
authorized_keys: %{"node_key" => :crypto.strong_rand_bytes(32)}
}
]
},
"seed",
0
)

assert {:error, "Invalid node shared secrets trigger time"} =
PendingTransactionValidation.validate(tx, ~U[2022-01-01 00:00:03Z])
end

test "should return error when there is already a node rewards transaction since the last schedule" do
MockDB
|> expect(:get_transaction, fn _, _ ->
{:ok,
%Transaction{
type: :node_rewards,
validation_stamp: %ValidationStamp{
timestamp: ~U[2022-01-01 00:00:00Z]
}
}}
end)

tx =
Transaction.new(
:node_rewards,
%TransactionData{},
"seed",
0
)

assert {:error, "Invalid node rewards trigger time"} =
PendingTransactionValidation.validate(tx, ~U[2022-01-01 00:00:03Z])
end
end
end

0 comments on commit e7b5b25

Please sign in to comment.