Files
AetherForge/agent/deploy/erasure_codec_test.go
AetherForge bd041edc0e
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Add erasure codec tests and fix subnet scan timeout.
Mock probePorts in scale limit tests so ScanLocalSubnet does not hang on live TCP dials; add erasure_codec error-path coverage from 0445b7e/d18c591 gaps.
2026-06-07 06:59:14 -07:00

77 lines
2.0 KiB
Go

package deploy
import (
"strings"
"testing"
"github.com/klauspost/reedsolomon"
)
func TestErasureParamsNormalizeDefaults(t *testing.T) {
p := erasureParams{}
got, err := p.normalize()
if err != nil {
t.Fatal(err)
}
if got.DataShards != erasureDefaultDataShards || got.ParityShards != erasureDefaultParityShards {
t.Fatalf("defaults=%+v", got)
}
if got.minShards() != erasureDefaultDataShards {
t.Fatalf("minShards=%d", got.minShards())
}
if got.totalShards() != erasureDefaultDataShards+erasureDefaultParityShards {
t.Fatalf("totalShards=%d", got.totalShards())
}
}
func TestDecodeErasureShardsInsufficientPresent(t *testing.T) {
payload := []byte("codec-insufficient")
p := erasureParams{DataShards: 2, ParityShards: 2}
enc, err := reedsolomon.New(p.DataShards, p.ParityShards)
if err != nil {
t.Fatal(err)
}
shards, err := enc.Split(payload)
if err != nil {
t.Fatal(err)
}
if err := enc.Encode(shards); err != nil {
t.Fatal(err)
}
shards[0] = nil
shards[1] = nil
shards[2] = nil
_, err = decodeErasureShards(shards, len(payload), p)
if err == nil || !strings.Contains(err.Error(), "need 2 shards") {
t.Fatalf("err=%v", err)
}
}
func TestDecodeErasureShardsSliceTooShort(t *testing.T) {
_, err := decodeErasureShards([][]byte{{1}, {2}}, 4, erasureParams{DataShards: 2, ParityShards: 2})
if err == nil || !strings.Contains(err.Error(), "shard slice too short") {
t.Fatalf("err=%v", err)
}
}
func TestDecodeErasureShardsVerificationFailed(t *testing.T) {
payload := []byte("codec-bad-shard")
p := erasureParams{DataShards: 2, ParityShards: 1}
enc, err := reedsolomon.New(p.DataShards, p.ParityShards)
if err != nil {
t.Fatal(err)
}
shards, err := enc.Split(payload)
if err != nil {
t.Fatal(err)
}
if err := enc.Encode(shards); err != nil {
t.Fatal(err)
}
shards[2][0] ^= 0xff
_, err = decodeErasureShards(shards, len(payload), p)
if err == nil || !strings.Contains(err.Error(), "verification failed") {
t.Fatalf("err=%v", err)
}
}