package client import ( "testing" "crypto-miner-agent/config" "crypto-miner-agent/deploy" ) func TestComputeHashratePressure(t *testing.T) { if p := ComputeHashratePressure(0, 4); p != 0 { t.Fatalf("zero hashrate=%v", p) } p := ComputeHashratePressure(160, 4) if p < 0.49 || p > 0.51 { t.Fatalf("half pressure=%v", p) } if ComputeHashratePressure(400, 4) != 1 { t.Fatal("cap at 1") } } func TestApplyAuthFleetRole(t *testing.T) { c := &AgentClient{cfg: config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{FleetRole: config.FleetRoleAuto}}} c.applyAuthFleetRole(AuthResponse{ FleetRoleHint: config.FleetRoleSeeder, LANSeeders: []deploy.LANSeederHint{ {AgentID: "s1", IP: "10.0.0.2"}, }, }) if c.fleetRoleHint() != config.FleetRoleSeeder { t.Fatal("hint not applied") } if len(c.lanSeedersSnapshot()) != 1 { t.Fatal("lan seeders not stored") } } func TestFleetPressureFieldsSeederVsMiner(t *testing.T) { seeder := &AgentClient{cfg: config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{ SeederMode: true, DnsTxtSpread: true, WebRTCMeshSpread: true, }}} role, seed, hr := seeder.fleetPressureFields(0, "dns_txt") if role != config.FleetRoleSeeder || seed != 1 || hr != 0 { t.Fatalf("seeder role=%s seed=%v hr=%v", role, seed, hr) } miner := &AgentClient{cfg: config.RuntimeConfig{BuiltinConfig: config.BuiltinConfig{ FleetRole: config.FleetRoleMiner, Threads: 2, ThreadMode: "fixed", }}} role, seed, hr = miner.fleetPressureFields(80, "") if role != config.FleetRoleMiner || seed != 0 || hr <= 0 { t.Fatalf("miner role=%s seed=%v hr=%v", role, seed, hr) } }