package api import ( "testing" "crypto-miner-server/internal/atlas" "crypto-miner-server/internal/db" "crypto-miner-server/internal/models" ) func TestSendAgentCommandBlockedBySubnetImmune(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } defer database.Close() hub := NewWSHub(database) hub.SetSubnetImmune(atlas.NewSubnetImmune(database)) agentID := "spread-agent" if err := database.UpsertAgent(&models.Agent{ ID: agentID, Name: "host", Wallet: "x", IP: "10.0.0.50", Status: "online", }); err != nil { t.Fatal(err) } for i := 0; i < 5; i++ { _, _ = database.RecordSubnetSpreadFailure("10.0.0") } err = hub.SendAgentCommand(agentID, "spread_now", nil) if err == nil { t.Fatal("expected spread_now blocked for paused subnet") } if !isSpreadCommandAction("discover_and_join") { t.Fatal("discover_and_join should be spread action") } } func TestCheckSubnetSpreadImmuneAllowsOtherPrefix(t *testing.T) { database, err := db.New(t.TempDir()) if err != nil { t.Fatal(err) } defer database.Close() hub := NewWSHub(database) hub.SetSubnetImmune(atlas.NewSubnetImmune(database)) for i := 0; i < 5; i++ { _, _ = database.RecordSubnetSpreadFailure("10.0.0") } agentID := "other-subnet" _ = database.UpsertAgent(&models.Agent{ ID: agentID, Name: "host", Wallet: "x", IP: "192.168.1.10", Status: "online", }) if err := hub.checkSubnetSpreadImmune(agentID, "stage_fetch", nil); err != nil { t.Fatalf("other subnet should pass: %v", err) } }