Skip to content

Commit 50f3e1a

Browse files
committed
fix issues from test
1 parent 2721503 commit 50f3e1a

File tree

6 files changed

+131
-19
lines changed

6 files changed

+131
-19
lines changed

coordinator/internal/controller/proxy/auth.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,10 @@ func (a *AuthController) IdentityHandler(c *gin.Context) interface{} {
128128
if loginParam.PublicKey != "" {
129129

130130
c.Set(LoginParamCache, loginParam)
131+
fmt.Println("identify", loginParam)
131132
return loginParam.PublicKey
132133
}
133134

135+
fmt.Println("identify empty")
134136
return nil
135137
}

coordinator/internal/controller/proxy/get_task.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func (ptc *GetTaskController) incGetTaskAccessCounter(ctx *gin.Context) error {
5454

5555
// GetTasks get assigned chunk/batch task
5656
func (ptc *GetTaskController) GetTasks(ctx *gin.Context) {
57+
fmt.Println("start get task")
5758
var getTaskParameter coordinatorType.GetTaskParameter
5859
if err := ctx.ShouldBind(&getTaskParameter); err != nil {
5960
nerr := fmt.Errorf("prover task parameter invalid, err:%w", err)
@@ -70,6 +71,7 @@ func (ptc *GetTaskController) GetTasks(ctx *gin.Context) {
7071

7172
getTask := func(upStream string, cli Client) (tryNext bool) {
7273
resp, err := session.GetTask(ctx, &getTaskParameter, cli, upStream)
74+
fmt.Println("upstream get task", resp)
7375
if err != nil {
7476
types.RenderFailure(ctx, types.ErrCoordinatorGetTaskFailure, err)
7577
return

coordinator/internal/controller/proxy/prover_session.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func (c *proverSession) maintainLogin(ctx context.Context, cliMgr Client, up str
118118
return nil, fmt.Errorf("upstream fail: %d (%s)", resp.ErrCode, resp.ErrMsg)
119119
}
120120

121-
var loginResult types.LoginSchema
121+
var loginResult loginSchema
122122
if err := resp.DecodeData(&loginResult); err != nil {
123123
return nil, err
124124
}
@@ -127,12 +127,14 @@ func (c *proverSession) maintainLogin(ctx context.Context, cliMgr Client, up str
127127
defer c.Unlock()
128128

129129
c.proverToken[up] = loginToken{
130-
LoginSchema: &loginResult,
131-
phase: phase,
130+
LoginSchema: &types.LoginSchema{
131+
Token: loginResult.Token,
132+
},
133+
phase: phase,
132134
}
133135
c.completionCtx = nil
134136

135-
return &loginResult, nil
137+
return c.proverToken[up].LoginSchema, nil
136138
}
137139

138140
const expireTolerant = 10 * time.Minute

coordinator/internal/logic/auth/login.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,16 +93,19 @@ func (l *LoginLogic) CompatiblityCheck(login *types.LoginParameter) error {
9393
vks[vk] = struct{}{}
9494
}
9595

96-
for _, vk := range login.Message.VKs {
97-
if _, ok := vks[vk]; !ok {
98-
log.Error("vk inconsistency", "prover vk", vk, "prover name", login.Message.ProverName,
99-
"prover_version", login.Message.ProverVersion, "message", login.Message)
100-
if !version.CheckScrollProverVersion(login.Message.ProverVersion) {
101-
return fmt.Errorf("incompatible prover version. please upgrade your prover, expect version: %s, actual version: %s",
102-
version.Version, login.Message.ProverVersion)
96+
// new coordinator / proxy do not check vks while login, code only for backward compatibility
97+
if len(vks) != 0 {
98+
for _, vk := range login.Message.VKs {
99+
if _, ok := vks[vk]; !ok {
100+
log.Error("vk inconsistency", "prover vk", vk, "prover name", login.Message.ProverName,
101+
"prover_version", login.Message.ProverVersion, "message", login.Message)
102+
if !version.CheckScrollProverVersion(login.Message.ProverVersion) {
103+
return fmt.Errorf("incompatible prover version. please upgrade your prover, expect version: %s, actual version: %s",
104+
version.Version, login.Message.ProverVersion)
105+
}
106+
// if the prover reports a same prover version
107+
return errors.New("incompatible vk. please check your params files or config files")
103108
}
104-
// if the prover reports a same prover version
105-
return errors.New("incompatible vk. please check your params files or config files")
106109
}
107110
}
108111

coordinator/internal/middleware/login_jwt.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ func LoginMiddleware(auth *config.Auth) *jwt.GinJWTMiddleware {
5151
// ProxyLoginMiddleware jwt auth middleware for proxy login
5252
func ProxyLoginMiddleware(auth *config.Auth) *jwt.GinJWTMiddleware {
5353
jwtMiddleware, err := jwt.New(&jwt.GinJWTMiddleware{
54-
PayloadFunc: api.Auth.PayloadFunc,
55-
IdentityHandler: api.Auth.IdentityHandler,
54+
PayloadFunc: proxy.Auth.PayloadFunc,
55+
IdentityHandler: proxy.Auth.IdentityHandler,
5656
IdentityKey: types.PublicKey,
5757
Key: []byte(auth.Secret),
5858
Timeout: time.Second * time.Duration(auth.LoginExpireDurationSec),

coordinator/test/proxy_test.go

Lines changed: 107 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,30 @@ package test
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
7+
"net/http"
68
"testing"
79
"time"
810

11+
"github.com/gin-gonic/gin"
12+
"github.com/scroll-tech/da-codec/encoding"
913
"github.com/stretchr/testify/assert"
1014

15+
"scroll-tech/common/types/message"
16+
"scroll-tech/common/version"
17+
1118
"scroll-tech/coordinator/internal/config"
1219
"scroll-tech/coordinator/internal/controller/proxy"
20+
"scroll-tech/coordinator/internal/route"
1321
)
1422

1523
func testProxyClientCfg() *config.ProxyClient {
1624

1725
return &config.ProxyClient{
18-
Secret: "test-secret-key",
19-
ProxyName: "test-proxy",
26+
Secret: "test-secret-key",
27+
ProxyName: "test-proxy",
28+
ProxyVersion: version.Version,
2029
}
2130
}
2231

@@ -57,13 +66,107 @@ func testProxyClient(t *testing.T) {
5766
// Client should not be nil if login succeeds
5867
// Note: This might be nil if the coordinator is not properly set up for proxy authentication
5968
// but the test validates that the Client method completes without panic
60-
t.Logf("Client toke: %v", client)
69+
assert.NotNil(t, client)
70+
assert.NotEmpty(t, client.Token())
71+
t.Logf("Client token: %s (%v)", client.Token(), client)
72+
}
73+
74+
var (
75+
proxyConf *config.ProxyConfig
76+
)
77+
78+
func setupProxy(t *testing.T, proxyURL string, coordinatorURL []string) *http.Server {
79+
var err error
80+
assert.NoError(t, err)
81+
82+
coordinators := make(map[string]*config.UpStream)
83+
for i, n := range coordinatorURL {
84+
coordinators[fmt.Sprintf("coordinator_%d", i)] = testProxyUpStreamCfg(n)
85+
}
86+
87+
tokenTimeout = 60
88+
proxyConf = &config.ProxyConfig{
89+
ProxyName: "test_proxy",
90+
ProxyManager: &config.ProxyManager{
91+
Verifier: &config.VerifierConfig{
92+
MinProverVersion: "v4.4.89",
93+
Verifiers: []config.AssetConfig{{
94+
AssetsPath: "",
95+
ForkName: "euclidV2",
96+
}},
97+
},
98+
Client: testProxyClientCfg(),
99+
Auth: &config.Auth{
100+
Secret: "proxy",
101+
ChallengeExpireDurationSec: tokenTimeout,
102+
LoginExpireDurationSec: tokenTimeout,
103+
},
104+
},
105+
Coordinators: coordinators,
106+
}
107+
108+
router := gin.New()
109+
proxy.InitController(proxyConf, nil)
110+
route.ProxyRoute(router, proxyConf, nil)
111+
srv := &http.Server{
112+
Addr: proxyURL,
113+
Handler: router,
114+
}
115+
go func() {
116+
runErr := srv.ListenAndServe()
117+
if runErr != nil && !errors.Is(runErr, http.ErrServerClosed) {
118+
assert.NoError(t, runErr)
119+
}
120+
}()
121+
time.Sleep(time.Second * 2)
122+
123+
return srv
124+
}
125+
126+
func testProxyHandshake(t *testing.T) {
127+
// Setup proxy http server.
128+
proxyURL := randomURL()
129+
proxyHttpHandler := setupProxy(t, proxyURL, []string{})
130+
defer func() {
131+
assert.NoError(t, proxyHttpHandler.Shutdown(context.Background()))
132+
}()
133+
134+
chunkProver := newMockProver(t, "prover_chunk_test", proxyURL, message.ProofTypeChunk, version.Version)
135+
assert.True(t, chunkProver.healthCheckSuccess(t))
136+
}
137+
138+
func testProxyGetTask(t *testing.T) {
139+
// Setup coordinator and http server.
140+
coordinatorURL := randomURL()
141+
collector, httpHandler := setupCoordinator(t, 3, coordinatorURL)
142+
defer func() {
143+
collector.Stop()
144+
assert.NoError(t, httpHandler.Shutdown(context.Background()))
145+
}()
146+
147+
proxyURL := randomURL()
148+
proxyHttpHandler := setupProxy(t, proxyURL, []string{coordinatorURL})
149+
defer func() {
150+
assert.NoError(t, proxyHttpHandler.Shutdown(context.Background()))
151+
}()
152+
153+
err := l2BlockOrm.InsertL2Blocks(context.Background(), []*encoding.Block{block1, block2})
154+
assert.NoError(t, err)
155+
dbChunk, err := chunkOrm.InsertChunk(context.Background(), chunk)
156+
assert.NoError(t, err)
157+
err = l2BlockOrm.UpdateChunkHashInRange(context.Background(), 0, 100, dbChunk.Hash)
158+
assert.NoError(t, err)
61159

160+
chunkProver := newMockProver(t, "prover_chunk_test", proxyURL, message.ProofTypeChunk, version.Version)
161+
code, _ := chunkProver.tryGetProverTask(t, message.ProofTypeChunk)
162+
assert.Empty(t, code)
62163
}
63164

64165
func TestProxyClient(t *testing.T) {
65166

66167
// Set up the test environment.
67168
setEnv(t)
68-
t.Run("TestProxyHandshake", testProxyClient)
169+
t.Run("TestProxyClient", testProxyClient)
170+
t.Run("TestProxyHandshake", testProxyHandshake)
171+
t.Run("TestProxyGetTask", testProxyGetTask)
69172
}

0 commit comments

Comments
 (0)