TestSaveAndLoadSyncStatus test save sync state to DB for tasks and load sync state from DB for tasks.
(t *testing.T)
| 658 | |
| 659 | // TestSaveAndLoadSyncStatus test save sync state to DB for tasks and load sync state from DB for tasks. |
| 660 | func TestSaveAndLoadSyncStatus(t *testing.T) { |
| 661 | var ( |
| 662 | entries = uint64(1) << 10 |
| 663 | kvSize = defaultChunkSize |
| 664 | lastKvIndex = entries*3 - 20 |
| 665 | db = rawdb.NewMemoryDatabase() |
| 666 | mux = new(event.Feed) |
| 667 | m = metrics.NewMetrics("sync_test") |
| 668 | expectedSecondsUsed = uint64(10) |
| 669 | chainID = new(big.Int).SetUint64(3333) |
| 670 | ) |
| 671 | // create ethstorage and generate data |
| 672 | shardManager, files := createEthStorage(contract, []uint64{0, 1, 2}, defaultChunkSize, kvSize, entries, common.Address{}, defaultEncodeType) |
| 673 | if shardManager == nil { |
| 674 | t.Fatalf("createEthStorage failed") |
| 675 | } |
| 676 | |
| 677 | defer func(files []string) { |
| 678 | for _, file := range files { |
| 679 | os.Remove(file) |
| 680 | } |
| 681 | }(files) |
| 682 | |
| 683 | l1 := NewMockL1Source(lastKvIndex, metafileName) |
| 684 | sm := ethstorage.NewStorageManager(shardManager, l1, lg) |
| 685 | sm.Reset(0) |
| 686 | _, syncCl := createLocalHostAndSyncClient(t, chainID, db, sm, m, mux) |
| 687 | syncCl.loadSyncStatus() |
| 688 | indexes := []uint64{30, 5, 8} |
| 689 | syncCl.tasks[0].healTask.insert(indexes) |
| 690 | syncCl.tasks[0].SubTasks[0].First = 1 |
| 691 | syncCl.tasks[0].SubTasks[0].next = 33 |
| 692 | syncCl.tasks[0].state.PeerCount = 60 |
| 693 | syncCl.tasks[0].state.FillEmptySeconds = expectedSecondsUsed |
| 694 | syncCl.tasks[0].state.BlobsSynced = 30 |
| 695 | syncCl.tasks[0].state.SyncedSeconds = expectedSecondsUsed |
| 696 | syncCl.tasks[1].SubTasks = make([]*subTask, 0) |
| 697 | syncCl.tasks[1].state.BlobsSynced = entries |
| 698 | syncCl.tasks[1].state.SyncedSeconds = expectedSecondsUsed |
| 699 | |
| 700 | tasks := syncCl.tasks |
| 701 | syncCl.cleanTasks() |
| 702 | if !syncCl.tasks[1].done { |
| 703 | t.Fatalf("task 1 should be done.") |
| 704 | } |
| 705 | syncCl.saveSyncStatus() |
| 706 | |
| 707 | syncCl.tasks = make([]*task, 0) |
| 708 | syncCl.loadSyncStatus() |
| 709 | tasks[0].healTask.Indexes = make(map[uint64]int64) |
| 710 | tasks[0].SubTasks[0].First = 5 |
| 711 | tasks[0].SubTasks[0].next = 5 |
| 712 | tasks[1].done = false |
| 713 | |
| 714 | if err := compareTasks(tasks, syncCl.tasks); err != nil { |
| 715 | t.Fatalf("compare kv task fail. err: %s", err.Error()) |
| 716 | } |
| 717 | if syncCl.tasks[0].state.PeerCount != 0 { |
nothing calls this directly
no test coverage detected