blob: 0d580723a9761852fb18e226f584b4ef0e3c2896 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#!/usr/bin/expect -f
set err 0
log_user 1
proc TestGoalDryrun { DRREQ_FILE TEST_PRIMARY_NODE_DIR } {
set PASSED 0
set PROGRAM_TYPE ""
spawn goal clerk dryrun-remote -d $TEST_PRIMARY_NODE_DIR -D $DRREQ_FILE -v
expect {
timeout { ::AlgorandGoal::Abort "goal clerk dryrun-remote timeout" }
-re {(ApprovalProgram)} {set PROGRAM_TYPE $expect_out(1,string); exp_continue}
"PASS" {set PASSED 1; close}
}
if { $PASSED == 0 } {
::AlgorandGoal::Abort "Program did not pass"
}
if { $PROGRAM_TYPE != "ApprovalProgram" } {
puts "Program type: $PROGRAM_TYPE"
::AlgorandGoal::Abort "Invalid program type"
}
}
proc TestGoalDryrunExitCode { DRREQ_FILE TEST_PRIMARY_NODE_DIR EXPECTED_STATUS_CODE EXPECTED_MESSAGE} {
set MESSAGE_MATCHED 0
spawn goal clerk dryrun-remote -d $TEST_PRIMARY_NODE_DIR -D $DRREQ_FILE -v
expect {
timeout { ::AlgorandGoal::Abort "goal clerk dryrun-remote timeout" }
$EXPECTED_MESSAGE {puts "message matched"; set MESSAGE_MATCHED 1; exp_continue}
eof { catch wait result; set STATUS_CODE [lindex $result 3]; }
}
if { $STATUS_CODE != $EXPECTED_STATUS_CODE } {
puts "Exit code: $STATUS_CODE, expected: $EXPECTED_STATUS_CODE"
::AlgorandGoal::Abort "Progran exited with incorrect code"
}
if { $MESSAGE_MATCHED == 0 } {
::AlgorandGoal::Abort "Progam message did not match expected"
}
}
if { [catch {
source goalExpectCommon.exp
set TEST_ALGO_DIR [lindex $argv 0]
set TEST_DATA_DIR [lindex $argv 1]
puts "TEST_ALGO_DIR: $TEST_ALGO_DIR"
puts "TEST_DATA_DIR: $TEST_DATA_DIR"
set TIME_STAMP [clock seconds]
set TEST_ROOT_DIR $TEST_ALGO_DIR/root
set TEST_PRIMARY_NODE_DIR $TEST_ROOT_DIR/Primary/
set NETWORK_NAME test_net_expect_$TIME_STAMP
set NETWORK_TEMPLATE "$TEST_DATA_DIR/nettemplates/TwoNodes50EachFuture.json"
set TEAL_PROGS_DIR "$TEST_DATA_DIR/../scripts/e2e_subs/tealprogs"
exec cp $TEST_DATA_DIR/../../installer/genesis/devnet/genesis.json $TEST_ALGO_DIR
# Create network
::AlgorandGoal::CreateNetwork $NETWORK_NAME $NETWORK_TEMPLATE $TEST_ALGO_DIR $TEST_ROOT_DIR
# Update the Primary Node configuration
exec -- cat "$TEST_ROOT_DIR/Primary/config.json" | jq {. |= . + {"EnableDeveloperAPI":true}} > $TEST_ROOT_DIR/Primary/config.json.new
exec rm $TEST_ROOT_DIR/Primary/config.json
exec mv $TEST_ROOT_DIR/Primary/config.json.new $TEST_ROOT_DIR/Primary/config.json
::AlgorandGoal::StartNetwork $NETWORK_NAME $NETWORK_TEMPLATE $TEST_ROOT_DIR
set PRIMARY_NODE_ADDRESS [ ::AlgorandGoal::GetAlgodNetworkAddress $TEST_PRIMARY_NODE_DIR ]
puts "Primary Node Address: $PRIMARY_NODE_ADDRESS"
set PRIMARY_WALLET_NAME unencrypted-default-wallet
# Determine primary account
set PRIMARY_ACCOUNT_ADDRESS [::AlgorandGoal::GetHighestFundedAccountForWallet $PRIMARY_WALLET_NAME $TEST_PRIMARY_NODE_DIR]
# Check the balance of the primary account
set PRIMARY_ACCOUNT_BALANCE [::AlgorandGoal::GetAccountBalance $PRIMARY_WALLET_NAME $PRIMARY_ACCOUNT_ADDRESS $TEST_PRIMARY_NODE_DIR]
puts "Primary Account Balance: $PRIMARY_ACCOUNT_BALANCE"
set TEAL_PROG_FILE "$TEST_ROOT_DIR/trivial.teal"
exec printf "#pragma version 2\nint 1" > $TEAL_PROG_FILE
# no format parameter
set DRREQ_FILE_1 "$TEST_ROOT_DIR/app-create-drreq-1.json"
spawn goal app create --creator $PRIMARY_ACCOUNT_ADDRESS --approval-prog $TEAL_PROG_FILE --clear-prog $TEAL_PROG_FILE --global-byteslices 0 --global-ints 0 --local-byteslices 0 --local-ints 0 -d $TEST_PRIMARY_NODE_DIR -o $DRREQ_FILE_1 --dryrun-dump
expect {
timeout { ::AlgorandGoal::Abort "goal app create timeout" }
}
# explicit json
set DRREQ_FILE_2 "$TEST_ROOT_DIR/app-create-drreq-2.json"
spawn goal app create --creator $PRIMARY_ACCOUNT_ADDRESS --approval-prog $TEAL_PROG_FILE --clear-prog $TEAL_PROG_FILE --global-byteslices 0 --global-ints 0 --local-byteslices 0 --local-ints 0 -d $TEST_PRIMARY_NODE_DIR -o $DRREQ_FILE_2 --dryrun-dump --dryrun-dump-format=json
expect {
timeout { ::AlgorandGoal::Abort "goal app create timeout" }
}
# explicit msgp
set DRREQ_FILE_3 "$TEST_ROOT_DIR/app-create-drreq.msgp"
spawn goal app create --creator $PRIMARY_ACCOUNT_ADDRESS --approval-prog $TEAL_PROG_FILE --clear-prog $TEAL_PROG_FILE --global-byteslices 0 --global-ints 0 --local-byteslices 0 --local-ints 0 -d $TEST_PRIMARY_NODE_DIR -o $DRREQ_FILE_3 --dryrun-dump --dryrun-dump-format=msgp
expect {
timeout { ::AlgorandGoal::Abort "goal app create timeout" }
}
# atomic transfer
set DRREQ_FILE_4 "$TEST_ROOT_DIR/atomic-tran-drreq.msgp"
set AT_TX1_FILE "$TEST_ROOT_DIR/atomic-tran-tx1.mspg"
set AT_TX2_FILE "$TEST_ROOT_DIR/atomic-tran-tx2.mspg"
set AT_COMBINED_FILE "$TEST_ROOT_DIR/atomic-tran-comb.mspg"
set AT_GROUPPED_FILE "$TEST_ROOT_DIR/atomic-tran-group.mspg"
spawn goal clerk send --from $PRIMARY_ACCOUNT_ADDRESS --to $PRIMARY_ACCOUNT_ADDRESS -a 1 --fee 1000 -d $TEST_PRIMARY_NODE_DIR -o $AT_TX1_FILE
expect {
timeout { ::AlgorandGoal::Abort "goal clerk send timeout" }
}
spawn goal app create --creator $PRIMARY_ACCOUNT_ADDRESS --approval-prog $TEAL_PROG_FILE --clear-prog $TEAL_PROG_FILE --global-byteslices 0 --global-ints 0 --local-byteslices 0 --local-ints 0 -d $TEST_PRIMARY_NODE_DIR -o $AT_TX2_FILE
expect {
timeout { ::AlgorandGoal::Abort "goal app create timeout" }
}
exec cat $AT_TX1_FILE $AT_TX2_FILE > $AT_COMBINED_FILE
exec goal clerk group -i $AT_COMBINED_FILE -o $AT_GROUPPED_FILE
spawn goal clerk dryrun -t $AT_GROUPPED_FILE -d $TEST_PRIMARY_NODE_DIR -o $DRREQ_FILE_4 --dryrun-dump --dryrun-dump-format=msgp
expect {
timeout { ::AlgorandGoal::Abort "goal clerk dryrun timeout" }
}
# invalid app
set INVALID_FILE_1 "$TEST_ROOT_DIR/invalid-app.json"
set INVALID_FILE_1_ID [open $INVALID_FILE_1 "w"]
set INVALID_FILE_1_DATA "{ \"round\": -1 }"
puts -nonewline $INVALID_FILE_1_ID $INVALID_FILE_1_DATA
close $INVALID_FILE_1_ID
TestGoalDryrun $DRREQ_FILE_1 $TEST_PRIMARY_NODE_DIR
TestGoalDryrun $DRREQ_FILE_2 $TEST_PRIMARY_NODE_DIR
TestGoalDryrun $DRREQ_FILE_3 $TEST_PRIMARY_NODE_DIR
TestGoalDryrun $DRREQ_FILE_4 $TEST_PRIMARY_NODE_DIR
TestGoalDryrunExitCode $DRREQ_FILE_3 $TEST_PRIMARY_NODE_DIR 0 "PASS"
TestGoalDryrunExitCode "" $TEST_PRIMARY_NODE_DIR 1 "Cannot read file : open : no such file or directory"
TestGoalDryrunExitCode $INVALID_FILE_1 $TEST_PRIMARY_NODE_DIR 1 "dryrun-remote: HTTP 400 Bad Request:"
# check local state access during opt-in transaction
set GLOBAL_BYTE_SLICES 0
set LOCAL_BYTE_SLICES 1
set APP_ID [::AlgorandGoal::AppCreate0 $PRIMARY_WALLET_NAME "" $PRIMARY_ACCOUNT_ADDRESS $TEAL_PROGS_DIR/app_optin_put.teal $GLOBAL_BYTE_SLICES $LOCAL_BYTE_SLICES $TEAL_PROGS_DIR/clear_program_state.teal $TEST_PRIMARY_NODE_DIR]
set DRREQ_FILE_OPTIN "$TEST_ROOT_DIR/app-optin-drreq.msgp"
spawn goal app optin --app-id $APP_ID --from $PRIMARY_ACCOUNT_ADDRESS -o $DRREQ_FILE_OPTIN --dryrun-dump --dryrun-dump-format=msgp -d $TEST_PRIMARY_NODE_DIR
expect {
timeout { ::AlgorandGoal::Abort "goal app optin timeout" }
}
TestGoalDryrun $DRREQ_FILE_OPTIN $TEST_PRIMARY_NODE_DIR
# Shutdown the network
::AlgorandGoal::StopNetwork $NETWORK_NAME $TEST_ROOT_DIR
exit 0
} EXCEPTION ] } {
::AlgorandGoal::Abort "ERROR in goalDryrunRestTest: $EXCEPTION"
}
|