ffiwrapper: Test skipping corrupted sectors in PoSt

This commit is contained in:
Łukasz Magiera 2020-09-10 21:19:26 +02:00
parent 5e7737f55d
commit c7b0241a48

View File

@ -168,50 +168,34 @@ func (s *seal) unseal(t *testing.T, sb *Sealer, sp *basicfs.Provider, si abi.Sec
} }
} }
func post(t *testing.T, sealer *Sealer, seals ...seal) time.Time { func post(t *testing.T, sealer *Sealer, skipped []abi.SectorID, seals ...seal) {
/*randomness := abi.PoStRandomness{0, 9, 2, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, 45, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 7} randomness := abi.PoStRandomness{0, 9, 2, 7, 6, 5, 4, 3, 2, 1, 0, 9, 8, 7, 6, 45, 3, 2, 1, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 7}
sis := make([]abi.SectorInfo, len(seals)) sis := make([]saproof.SectorInfo, len(seals))
for i, s := range seals { for i, s := range seals {
sis[i] = abi.SectorInfo{ sis[i] = saproof.SectorInfo{
RegisteredProof: sealProofType, SealProof: sealProofType,
SectorNumber: s.id.Number, SectorNumber: s.id.Number,
SealedCID: s.cids.Sealed, SealedCID: s.cids.Sealed,
} }
} }
candidates, err := sealer.GenerateEPostCandidates(context.TODO(), seals[0].id.Miner, sis, randomness, []abi.SectorNumber{}) proofs, skp, err := sealer.GenerateWindowPoSt(context.TODO(), seals[0].id.Miner, sis, randomness)
if err != nil { if len(skipped) > 0 {
t.Fatalf("%+v", err) require.Error(t, err)
}*/ require.EqualValues(t, skipped, skp)
return
fmt.Println("skipping post")
genCandidates := time.Now()
/*if len(candidates) != 1 {
t.Fatal("expected 1 candidate")
} }
candidatesPrime := make([]abi.PoStCandidate, len(candidates))
for idx := range candidatesPrime {
candidatesPrime[idx] = candidates[idx].Candidate
}
proofs, err := sealer.ComputeElectionPoSt(context.TODO(), seals[0].id.Miner, sis, randomness, candidatesPrime)
if err != nil { if err != nil {
t.Fatalf("%+v", err) t.Fatalf("%+v", err)
} }
ePoStChallengeCount := ElectionPostChallengeCount(uint64(len(sis)), 0) ok, err := ProofVerifier.VerifyWindowPoSt(context.TODO(), saproof.WindowPoStVerifyInfo{
ok, err := ProofVerifier.VerifyElectionPost(context.TODO(), abi.PoStVerifyInfo{
Randomness: randomness, Randomness: randomness,
Candidates: candidatesPrime,
Proofs: proofs, Proofs: proofs,
EligibleSectors: sis, ChallengedSectors: sis,
Prover: seals[0].id.Miner, Prover: seals[0].id.Miner,
ChallengeCount: ePoStChallengeCount,
}) })
if err != nil { if err != nil {
t.Fatalf("%+v", err) t.Fatalf("%+v", err)
@ -219,8 +203,21 @@ func post(t *testing.T, sealer *Sealer, seals ...seal) time.Time {
if !ok { if !ok {
t.Fatal("bad post") t.Fatal("bad post")
} }
*/ }
return genCandidates
func corrupt(t *testing.T, sealer *Sealer, id abi.SectorID) {
paths, done, err := sealer.sectors.AcquireSector(context.Background(), id, stores.FTSealed, 0, stores.PathStorage)
require.NoError(t, err)
defer done()
log.Infof("corrupt %s", paths.Sealed)
f, err := os.OpenFile(paths.Sealed, os.O_RDWR, 0664)
require.NoError(t, err)
_, err = f.WriteAt(bytes.Repeat([]byte{'d'}, 2048), 0)
require.NoError(t, err)
require.NoError(t, f.Close())
} }
func getGrothParamFileAndVerifyingKeys(s abi.SectorSize) { func getGrothParamFileAndVerifyingKeys(s abi.SectorSize) {
@ -299,11 +296,11 @@ func TestSealAndVerify(t *testing.T) {
commit := time.Now() commit := time.Now()
genCandidiates := post(t, sb, s) post(t, sb, nil, s)
epost := time.Now() epost := time.Now()
post(t, sb, s) post(t, sb, nil, s)
if err := sb.FinalizeSector(context.TODO(), si, nil); err != nil { if err := sb.FinalizeSector(context.TODO(), si, nil); err != nil {
t.Fatalf("%+v", err) t.Fatalf("%+v", err)
@ -313,8 +310,7 @@ func TestSealAndVerify(t *testing.T) {
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String()) fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
fmt.Printf("Commit: %s\n", commit.Sub(precommit).String()) fmt.Printf("Commit: %s\n", commit.Sub(precommit).String())
fmt.Printf("GenCandidates: %s\n", genCandidiates.Sub(commit).String()) fmt.Printf("EPoSt: %s\n", epost.Sub(commit).String())
fmt.Printf("EPoSt: %s\n", epost.Sub(genCandidiates).String())
} }
func TestSealPoStNoCommit(t *testing.T) { func TestSealPoStNoCommit(t *testing.T) {
@ -370,16 +366,15 @@ func TestSealPoStNoCommit(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
genCandidiates := post(t, sb, s) post(t, sb, nil, s)
epost := time.Now() epost := time.Now()
fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String()) fmt.Printf("PreCommit: %s\n", precommit.Sub(start).String())
fmt.Printf("GenCandidates: %s\n", genCandidiates.Sub(precommit).String()) fmt.Printf("EPoSt: %s\n", epost.Sub(precommit).String())
fmt.Printf("EPoSt: %s\n", epost.Sub(genCandidiates).String())
} }
func TestSealAndVerify2(t *testing.T) { func TestSealAndVerify3(t *testing.T) {
defer requireFDsClosed(t, openFDs(t)) defer requireFDsClosed(t, openFDs(t))
if runtime.NumCPU() < 10 && os.Getenv("CI") == "" { // don't bother on slow hardware if runtime.NumCPU() < 10 && os.Getenv("CI") == "" { // don't bother on slow hardware
@ -419,22 +414,32 @@ func TestSealAndVerify2(t *testing.T) {
si1 := abi.SectorID{Miner: miner, Number: 1} si1 := abi.SectorID{Miner: miner, Number: 1}
si2 := abi.SectorID{Miner: miner, Number: 2} si2 := abi.SectorID{Miner: miner, Number: 2}
si3 := abi.SectorID{Miner: miner, Number: 3}
s1 := seal{id: si1} s1 := seal{id: si1}
s2 := seal{id: si2} s2 := seal{id: si2}
s3 := seal{id: si3}
wg.Add(2) wg.Add(3)
go s1.precommit(t, sb, si1, wg.Done) //nolint: staticcheck go s1.precommit(t, sb, si1, wg.Done) //nolint: staticcheck
time.Sleep(100 * time.Millisecond) time.Sleep(100 * time.Millisecond)
go s2.precommit(t, sb, si2, wg.Done) //nolint: staticcheck go s2.precommit(t, sb, si2, wg.Done) //nolint: staticcheck
time.Sleep(100 * time.Millisecond)
go s3.precommit(t, sb, si3, wg.Done) //nolint: staticcheck
wg.Wait() wg.Wait()
wg.Add(2) wg.Add(3)
go s1.commit(t, sb, wg.Done) //nolint: staticcheck go s1.commit(t, sb, wg.Done) //nolint: staticcheck
go s2.commit(t, sb, wg.Done) //nolint: staticcheck go s2.commit(t, sb, wg.Done) //nolint: staticcheck
go s3.commit(t, sb, wg.Done) //nolint: staticcheck
wg.Wait() wg.Wait()
post(t, sb, s1, s2) post(t, sb, nil, s1, s2, s3)
corrupt(t, sb, si1)
corrupt(t, sb, si2)
post(t, sb, []abi.SectorID{si1, si2}, s1, s2, s3)
} }
func BenchmarkWriteWithAlignment(b *testing.B) { func BenchmarkWriteWithAlignment(b *testing.B) {