arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}