hermez-node/prover/prover_test.go
prover/prover_test.goRaw
1package prover
2
3import (
4 "context"
5 "math/big"
6 "os"
7 "testing"
8 "time"
9
10 "github.com/hermeznetwork/hermez-node/common"
11 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"
13)
14
15const apiURL = "http://localhost:3000/api"
16const timeCons = 1 * time.Second
17
18var proofServerClient *ProofServerClient
19
20func TestMain(m *testing.M) {
21 exitVal := 0
22 if os.Getenv("INTEGRATION") != "" {
23 proofServerClient = NewProofServerClient(apiURL, timeCons)
24 err := proofServerClient.WaitReady(context.Background())
25 if err != nil {
26 panic(err)
27 }
28 exitVal = m.Run()
29 }
30 os.Exit(exitVal)
31}
32
33func TestApiServer(t *testing.T) {
34 t.Run("testAPIStatus", testAPIStatus)
35 t.Run("testCalculateProof", testCalculateProof)
36 time.Sleep(time.Second / 4)
37 err := proofServerClient.WaitReady(context.Background())
38 require.NoError(t, err)
39 t.Run("testGetProof", testGetProof)
40 t.Run("testCancel", testCancel)
41}
42
43func testAPIStatus(t *testing.T) {
44 status, err := proofServerClient.apiStatus(context.Background())
45 require.NoError(t, err)
46 assert.Equal(t, true, status.Status.IsReady())
47}
48
49func testCalculateProof(t *testing.T) {
50 var zkInputs *common.ZKInputs
51 zkInputs = common.NewZKInputs(100, 16, 512, 24, 32, big.NewInt(1))
52 err := proofServerClient.CalculateProof(context.Background(), zkInputs)
53 require.NoError(t, err)
54}
55
56func testGetProof(t *testing.T) {
57 proof, err := proofServerClient.GetProof(context.Background())
58 require.NoError(t, err)
59 require.NotNil(t, proof)
60 require.NotNil(t, proof.PiA)
61 require.NotNil(t, proof.PiB)
62 require.NotNil(t, proof.PiC)
63 require.NotNil(t, proof.Protocol)
64}
65
66func testCancel(t *testing.T) {
67 var zkInputs *common.ZKInputs
68 zkInputs = common.NewZKInputs(100, 16, 512, 24, 32, big.NewInt(1))
69 err := proofServerClient.CalculateProof(context.Background(), zkInputs)
70 require.NoError(t, err)
71 // TODO: remove sleep when the server has been reviewed
72 time.Sleep(time.Second / 4)
73 err = proofServerClient.Cancel(context.Background())
74 require.NoError(t, err)
75 status, err := proofServerClient.apiStatus(context.Background())
76 require.NoError(t, err)
77 for status.Status == StatusCodeBusy {
78 time.Sleep(proofServerClient.timeCons)
79 status, err = proofServerClient.apiStatus(context.Background())
80 require.NoError(t, err)
81 }
82 assert.Equal(t, StatusCodeAborted, status.Status)
83}