func (a *FactoidTransaction) IsSameAs(b *FactoidTransaction) bool { if b == nil { return false } ok, err := primitives.AreBinaryMarshallablesEqual(a.Transaction, b.Transaction) if err != nil || ok == false { return false } return true }
func (a *DBStateMsg) IsSameAs(b *DBStateMsg) bool { defer func() { if r := recover(); r != nil { return } }() if b == nil { return false } if a.Timestamp.GetTimeMilli() != b.Timestamp.GetTimeMilli() { return false } ok, err := primitives.AreBinaryMarshallablesEqual(a.DirectoryBlock, b.DirectoryBlock) if err != nil || ok == false { return false } ok, err = primitives.AreBinaryMarshallablesEqual(a.AdminBlock, b.AdminBlock) if err != nil || ok == false { return false } ok, err = primitives.AreBinaryMarshallablesEqual(a.FactoidBlock, b.FactoidBlock) if err != nil || ok == false { return false } ok, err = primitives.AreBinaryMarshallablesEqual(a.EntryCreditBlock, b.EntryCreditBlock) if err != nil || ok == false { return false } if len(a.EBlocks) != len(b.EBlocks) || (len(a.Entries) != len(b.Entries)) { return false } for i := range a.EBlocks { ok, err = primitives.AreBinaryMarshallablesEqual(a.EBlocks[i], b.EBlocks[i]) if err != nil || ok == false { return false } } for i := range a.Entries { ok, err = primitives.AreBinaryMarshallablesEqual(a.Entries[i], b.Entries[i]) if err != nil || ok == false { return false } } return true }
func TestSaveLoadDBlockChain(t *testing.T) { blocks := []*DirectoryBlock{} max := 10 var prev *DirectoryBlock = nil dbo := NewOverlay(new(mapdb.MapDB)) defer dbo.Close() for i := 0; i < max; i++ { prev = CreateTestDirectoryBlock(prev) blocks = append(blocks, prev) err := dbo.SaveDirectoryBlockHead(prev) if err != nil { t.Error(err) } } current, err := dbo.FetchDirectoryBlockHead() if err != nil { t.Error(err) } zero := primitives.NewZeroHash() fetchedCount := 1 for { keyMR := current.GetHeader().GetPrevKeyMR() if keyMR.IsSameAs(zero) { break } t.Logf("KeyMR - %v", keyMR.String()) hash := current.GetHeader().GetPrevLedgerKeyMR() current, err = dbo.FetchDBlockByKeyMR(keyMR) if err != nil { t.Error(err) } if current == nil { t.Fatal("Block not found") } fetchedCount++ byHash, err := dbo.FetchDBlockByHash(hash) same, err := primitives.AreBinaryMarshallablesEqual(current, byHash) if err != nil { t.Error(err) } if same == false { t.Error("Blocks fetched by keyMR and hash are not identical") } } if fetchedCount != max { t.Error("Wrong number of entries fetched - %v vs %v", fetchedCount, max) } all, err := dbo.FetchAllDBlocks() if err != nil { t.Error(err) } if len(all) != max { t.Errorf("Wrong number of entries fetched - %v vs %v", len(all), max) } for i := range all { same, err := primitives.AreBinaryMarshallablesEqual(blocks[i], all[i]) if err != nil { t.Error(err) } if same == false { t.Error("Blocks fetched by all and original blocks are not identical") t.Logf("\n%v\nvs\n%v", blocks[i].String(), all[i].String()) } } }