|
4 | 4 | package replay |
5 | 5 |
|
6 | 6 | import ( |
| 7 | + "os" |
| 8 | + "path/filepath" |
7 | 9 | "reflect" |
8 | 10 | "testing" |
9 | 11 | "time" |
@@ -274,21 +276,55 @@ func TestPendingCmds(t *testing.T) { |
274 | 276 | require.Contains(t, logs, "too many pending commands") |
275 | 277 | } |
276 | 278 |
|
277 | | -func TestStartError(t *testing.T) { |
278 | | - replay := NewReplay(zap.NewNop(), id.NewIDManager()) |
| 279 | +func TestLoadEncryptionKey(t *testing.T) { |
279 | 280 | dir := t.TempDir() |
280 | 281 | meta := store.NewMeta(10*time.Second, 20, 0, store.EncryptAes) |
281 | 282 | storage, err := store.NewStorage(dir) |
282 | 283 | require.NoError(t, err) |
283 | 284 | defer storage.Close() |
284 | 285 | 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)) |
285 | 289 | now := time.Now() |
286 | 290 |
|
| 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() |
287 | 309 | cfg := ReplayConfig{ |
288 | 310 | Input: dir, |
289 | 311 | Username: "u1", |
290 | 312 | 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 | + } |
291 | 329 | } |
292 | | - err = replay.Start(cfg, nil, nil, &backend.BCConfig{}) |
293 | | - require.ErrorContains(t, err, "encryption") |
294 | 330 | } |
0 commit comments