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}