From e43415dee1659e19661a17d0d63f1e11b1c18816 Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Mon, 2 Apr 2018 22:25:26 -0400 Subject: [PATCH 1/2] sharding: added test for joinCollatorPool --- sharding/collator/collator.go | 2 +- sharding/collator/collator_test.go | 55 +++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/sharding/collator/collator.go b/sharding/collator/collator.go index 7b3eeba6f78d..97e5bd7b4922 100644 --- a/sharding/collator/collator.go +++ b/sharding/collator/collator.go @@ -123,7 +123,7 @@ func submitCollation(shardID int64) error { } // joinCollatorPool checks if the account is a collator in the SMC. If -// the account is not in the set, it will deposit 100ETH into contract. +// the account is not in the set, it will deposit ETH into contract. func joinCollatorPool(c client.Client) error { log.Info("Joining collator pool") diff --git a/sharding/collator/collator_test.go b/sharding/collator/collator_test.go index 773fe15d7eb7..73e72921afeb 100644 --- a/sharding/collator/collator_test.go +++ b/sharding/collator/collator_test.go @@ -44,8 +44,9 @@ func (m *mockClient) SMCTransactor() *contracts.SMCTransactor { } func (m *mockClient) CreateTXOps(value *big.Int) (*bind.TransactOpts, error) { - m.t.Fatal("CreateTXOps not implemented") - return nil, nil + txOpts := transactOpts() + txOpts.Value = value + return txOpts, nil } // Unused mockClient methods @@ -57,13 +58,21 @@ func (m *mockClient) Close() { m.t.Fatal("Close called") } -func TestIsAccountInCollatorPool(t *testing.T) { - // Test setup (should this go to sharding/client/testing?) +// Helper/setup methods +// TODO: consider moving these to common sharding testing package as the collator and smc tests +// use them. +func transactOpts() *bind.TransactOpts { + return bind.NewKeyedTransactor(key) +} +func setup() (*backends.SimulatedBackend, *contracts.SMC) { backend := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: accountBalance1001Eth}}) - transactOpts := bind.NewKeyedTransactor(key) - _, _, smc, _ := contracts.DeploySMC(transactOpts, backend) + _, _, smc, _ := contracts.DeploySMC(transactOpts(), backend) backend.Commit() + return backend, smc +} +func TestIsAccountInCollatorPool(t *testing.T) { + backend, smc := setup() client := &mockClient{smc: smc, t: t} // address should not be in pool initially @@ -75,9 +84,10 @@ func TestIsAccountInCollatorPool(t *testing.T) { t.Fatal("Account unexpectedly in collator pool") } + txOpts := transactOpts() // deposit in collator pool, then it should return true - transactOpts.Value = sharding.CollatorDeposit - if _, err := smc.Deposit(transactOpts); err != nil { + txOpts.Value = sharding.CollatorDeposit + if _, err := smc.Deposit(txOpts); err != nil { t.Fatalf("Failed to deposit: %v", err) } backend.Commit() @@ -89,3 +99,32 @@ func TestIsAccountInCollatorPool(t *testing.T) { t.Fatal("Account not in collator pool when expected to be") } } + +func TestJoinCollatorPool(t *testing.T) { + backend, smc := setup() + client := &mockClient{smc, t} + + // There should be no collators initially + numCollators, err := smc.NumCollators(&bind.CallOpts{}) + if err != nil { + t.Fatal(err) + } + if big.NewInt(0).Cmp(numCollators) != 0 { + t.Fatalf("Unexpected number of collators. Got %d, wanted 0.", numCollators) + } + + err = joinCollatorPool(client) + if err != nil { + t.Fatal(err) + } + backend.Commit() + + // Now there should be one collator + numCollators, err = smc.NumCollators(&bind.CallOpts{}) + if err != nil { + t.Fatal(err) + } + if big.NewInt(1).Cmp(numCollators) != 0 { + t.Fatalf("Unexpected number of collators. Got %d, wanted 1.", numCollators) + } +} From 03eca5c40df73cfdb900b4ed67a134b38225b68c Mon Sep 17 00:00:00 2001 From: Preston Van Loon Date: Mon, 2 Apr 2018 22:26:29 -0400 Subject: [PATCH 2/2] sharding: s/CreateTXOps/CreateTXOpts/g --- sharding/client/client.go | 8 ++++---- sharding/collator/collator.go | 2 +- sharding/collator/collator_test.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sharding/client/client.go b/sharding/client/client.go index 7affcfb47c26..0ff634c38ce3 100644 --- a/sharding/client/client.go +++ b/sharding/client/client.go @@ -47,7 +47,7 @@ type shardingClient struct { type Client interface { Start() error Close() - CreateTXOps(*big.Int) (*bind.TransactOpts, error) + CreateTXOpts(*big.Int) (*bind.TransactOpts, error) ChainReader() ethereum.ChainReader Account() *accounts.Account SMCCaller() *contracts.SMCCaller @@ -145,8 +145,8 @@ func (c *shardingClient) unlockAccount(account accounts.Account) error { return c.keystore.Unlock(account, pass) } -// CreateTXOps creates a *TransactOpts with a signer using the default account on the keystore. -func (c *shardingClient) CreateTXOps(value *big.Int) (*bind.TransactOpts, error) { +// CreateTXOpts creates a *TransactOpts with a signer using the default account on the keystore. +func (c *shardingClient) CreateTXOpts(value *big.Int) (*bind.TransactOpts, error) { account := c.Account() return &bind.TransactOpts{ @@ -210,7 +210,7 @@ func initSMC(c *shardingClient) (*contracts.SMC, error) { if len(b) == 0 { log.Info(fmt.Sprintf("No sharding manager contract found at %s. Deploying new contract.", sharding.ShardingManagerAddress.String())) - txOps, err := c.CreateTXOps(big.NewInt(0)) + txOps, err := c.CreateTXOpts(big.NewInt(0)) if err != nil { return nil, fmt.Errorf("unable to intiate the transaction: %v", err) } diff --git a/sharding/collator/collator.go b/sharding/collator/collator.go index 97e5bd7b4922..1d25315a3156 100644 --- a/sharding/collator/collator.go +++ b/sharding/collator/collator.go @@ -127,7 +127,7 @@ func submitCollation(shardID int64) error { func joinCollatorPool(c client.Client) error { log.Info("Joining collator pool") - txOps, err := c.CreateTXOps(sharding.CollatorDeposit) + txOps, err := c.CreateTXOpts(sharding.CollatorDeposit) if err != nil { return fmt.Errorf("unable to intiate the deposit transaction: %v", err) } diff --git a/sharding/collator/collator_test.go b/sharding/collator/collator_test.go index 73e72921afeb..5dea4827b000 100644 --- a/sharding/collator/collator_test.go +++ b/sharding/collator/collator_test.go @@ -43,7 +43,7 @@ func (m *mockClient) SMCTransactor() *contracts.SMCTransactor { return &m.smc.SMCTransactor } -func (m *mockClient) CreateTXOps(value *big.Int) (*bind.TransactOpts, error) { +func (m *mockClient) CreateTXOpts(value *big.Int) (*bind.TransactOpts, error) { txOpts := transactOpts() txOpts.Value = value return txOpts, nil