faucet_test.gno

4.26 Kb ยท 114 lines
  1package faucet_test
  2
  3import (
  4	"std"
  5	"testing"
  6
  7	"gno.land/p/demo/testutils"
  8	"gno.land/r/gnoland/faucet"
  9)
 10
 11func TestPackage(t *testing.T) {
 12	var (
 13		adminaddr        = std.Address("g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5")
 14		faucetaddr       = std.DerivePkgAddr("gno.land/r/gnoland/faucet")
 15		controlleraddr1  = testutils.TestAddress("controller1")
 16		controlleraddr2  = testutils.TestAddress("controller2")
 17		controlleraddr3  = testutils.TestAddress("controller3")
 18		controlleraddr4  = testutils.TestAddress("controller4")
 19		controlleraddr5  = testutils.TestAddress("controller5")
 20		controlleraddr6  = testutils.TestAddress("controller6")
 21		controlleraddr7  = testutils.TestAddress("controller7")
 22		controlleraddr8  = testutils.TestAddress("controller8")
 23		controlleraddr9  = testutils.TestAddress("controller9")
 24		controlleraddr10 = testutils.TestAddress("controller10")
 25		controlleraddr11 = testutils.TestAddress("controller11")
 26
 27		test1addr = testutils.TestAddress("test1")
 28	)
 29	// deposit 1000gnot to faucet contract
 30	testing.IssueCoins(faucetaddr, std.Coins{{"ugnot", 1_000_000_000}})
 31	assertBalance(t, faucetaddr, 1_000_000_000)
 32
 33	// by default, balance is empty, and as a user I cannot call Transfer, or Admin commands.
 34	assertBalance(t, test1addr, 0)
 35	testing.SetRealm(std.NewUserRealm(test1addr))
 36	assertErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 37
 38	assertErr(t, faucet.AdminAddController(cross, controlleraddr1))
 39	testing.SetRealm(std.NewUserRealm(controlleraddr1))
 40	assertErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 41
 42	// as an admin, add the controller to contract and deposit more 2000gnot to contract
 43	testing.SetRealm(std.NewUserRealm(adminaddr))
 44	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr1))
 45	assertBalance(t, faucetaddr, 1_000_000_000)
 46
 47	// now, send some tokens as controller.
 48	testing.SetRealm(std.NewUserRealm(controlleraddr1))
 49	assertNoErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 50	assertBalance(t, test1addr, 1_000_000)
 51	assertNoErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 52	assertBalance(t, test1addr, 2_000_000)
 53	assertBalance(t, faucetaddr, 998_000_000)
 54
 55	// remove controller
 56	// as an admin, remove controller
 57	testing.SetRealm(std.NewUserRealm(adminaddr))
 58	assertNoErr(t, faucet.AdminRemoveController(cross, controlleraddr1))
 59	testing.SetRealm(std.NewUserRealm(controlleraddr1))
 60	assertErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 61
 62	// duplicate controller
 63	testing.SetRealm(std.NewUserRealm(adminaddr))
 64	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr1))
 65	assertErr(t, faucet.AdminAddController(cross, controlleraddr1))
 66	// add more than more than allowed controllers
 67	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr2))
 68	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr3))
 69	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr4))
 70	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr5))
 71	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr6))
 72	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr7))
 73	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr8))
 74	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr9))
 75	assertNoErr(t, faucet.AdminAddController(cross, controlleraddr10))
 76	assertErr(t, faucet.AdminAddController(cross, controlleraddr11))
 77
 78	// send more than per transfer limit
 79	testing.SetRealm(std.NewUserRealm(adminaddr))
 80	assertNoErr(t, faucet.AdminSetTransferLimit(cross, 300_000_000))
 81	testing.SetRealm(std.NewUserRealm(controlleraddr1))
 82	assertErr(t, faucet.Transfer(cross, test1addr, 301_000_000))
 83
 84	// block transefer from the address not on the controllers list.
 85	testing.SetRealm(std.NewUserRealm(controlleraddr11))
 86	assertErr(t, faucet.Transfer(cross, test1addr, 1_000_000))
 87}
 88
 89func assertErr(t *testing.T, err string) {
 90	t.Helper()
 91
 92	if err == "" {
 93		t.Logf("info: got err: %v", err)
 94		t.Errorf("expected an error, got nil.")
 95	}
 96}
 97
 98func assertNoErr(t *testing.T, err string) {
 99	t.Helper()
100	if err != "" {
101		t.Errorf("got err: %v.", err)
102	}
103}
104
105func assertBalance(t *testing.T, addr std.Address, expectedBal int64) {
106	t.Helper()
107	banker := std.NewBanker(std.BankerTypeReadonly)
108	coins := banker.GetCoins(addr)
109	got := coins.AmountOf("ugnot")
110
111	if expectedBal != got {
112		t.Errorf("invalid balance: expected %d, got %d.", expectedBal, got)
113	}
114}