Skip to content

Commit dbd13a2

Browse files
authored
sqlreplay: fix replay reports invalid encryption key length (#755)
1 parent 50dfbf0 commit dbd13a2

File tree

3 files changed

+42
-6
lines changed

3 files changed

+42
-6
lines changed

pkg/sqlreplay/replay/replay.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func (r *replay) Start(cfg ReplayConfig, backendTLSConfig *tls.Config, hsHandler
159159
if err != nil {
160160
return errors.Wrapf(err, "failed to load encryption key")
161161
}
162-
cfg.encryptionKey = key
162+
r.cfg.encryptionKey = key
163163

164164
hsHandler = NewHandshakeHandler(hsHandler)
165165
r.connCreator = cfg.connCreator

pkg/sqlreplay/replay/replay_test.go

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
package replay
55

66
import (
7+
"os"
8+
"path/filepath"
79
"reflect"
810
"testing"
911
"time"
@@ -274,21 +276,55 @@ func TestPendingCmds(t *testing.T) {
274276
require.Contains(t, logs, "too many pending commands")
275277
}
276278

277-
func TestStartError(t *testing.T) {
278-
replay := NewReplay(zap.NewNop(), id.NewIDManager())
279+
func TestLoadEncryptionKey(t *testing.T) {
279280
dir := t.TempDir()
280281
meta := store.NewMeta(10*time.Second, 20, 0, store.EncryptAes)
281282
storage, err := store.NewStorage(dir)
282283
require.NoError(t, err)
283284
defer storage.Close()
284285
require.NoError(t, meta.Write(storage))
286+
keyFile := filepath.Join(dir, "encryption")
287+
key := make([]byte, 32)
288+
require.NoError(t, os.WriteFile(keyFile, key, 0600))
285289
now := time.Now()
286290

291+
tests := []struct {
292+
keyFile string
293+
err string
294+
}{
295+
{
296+
err: "encryption",
297+
},
298+
{
299+
keyFile: "/nonexist",
300+
err: "encryption",
301+
},
302+
{
303+
keyFile: keyFile,
304+
},
305+
}
306+
307+
loader := newMockNormalLoader()
308+
defer loader.Close()
287309
cfg := ReplayConfig{
288310
Input: dir,
289311
Username: "u1",
290312
StartTime: now,
313+
reader: loader,
314+
}
315+
for _, test := range tests {
316+
cfg.KeyFile = test.keyFile
317+
replay := NewReplay(zap.NewNop(), id.NewIDManager())
318+
cfg.report = newMockReport(replay.exceptionCh)
319+
err = replay.Start(cfg, nil, nil, &backend.BCConfig{})
320+
if len(test.err) > 0 {
321+
require.ErrorContains(t, err, test.err)
322+
} else {
323+
require.NoError(t, err)
324+
replay.Lock()
325+
require.Equal(t, key, replay.cfg.encryptionKey)
326+
replay.Unlock()
327+
replay.Close()
328+
}
291329
}
292-
err = replay.Start(cfg, nil, nil, &backend.BCConfig{})
293-
require.ErrorContains(t, err, "encryption")
294330
}

pkg/sqlreplay/store/encrypt.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func LoadEncryptionKey(encryptionMethod, keyFile string) ([]byte, error) {
121121

122122
func readAesKey(filename string) ([]byte, error) {
123123
if len(filename) == 0 {
124-
return nil, errors.New("security.encryption-key-file is not set")
124+
return nil, errors.New("security.encryption-key-path is not set")
125125
}
126126
key, err := os.ReadFile(filename)
127127
if err != nil {

0 commit comments

Comments
 (0)