Initial commit: AetherForge Linux (forge-mesh) v0.1.0-dev
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
This commit is contained in:
96
internal/fleet/store_test.go
Normal file
96
internal/fleet/store_test.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package fleet
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"forge-mesh/internal/api/types"
|
||||
"forge-mesh/internal/db"
|
||||
)
|
||||
|
||||
func TestStoreUpsertHeartbeat(t *testing.T) {
|
||||
conn, err := db.Open(t.TempDir() + "/test.db")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
store := NewStore(conn)
|
||||
host, err := store.UpsertHeartbeat(types.HeartbeatPayload{
|
||||
Hostname: "test-host",
|
||||
HashrateHps: 1234.5,
|
||||
CurrentTier: 2,
|
||||
TierType: "xmrig",
|
||||
TierState: "active",
|
||||
Arch: "amd64",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if host.ID == "" {
|
||||
t.Fatal("expected host id")
|
||||
}
|
||||
if host.HashrateHps != 1234.5 {
|
||||
t.Fatalf("hashrate_hps: got %v", host.HashrateHps)
|
||||
}
|
||||
if host.CurrentTier != 2 {
|
||||
t.Fatalf("current_tier: got %d", host.CurrentTier)
|
||||
}
|
||||
|
||||
host2, err := store.UpsertHeartbeat(types.HeartbeatPayload{
|
||||
HostID: host.ID,
|
||||
Hostname: "test-host",
|
||||
HashrateHps: 5000,
|
||||
CurrentTier: 3,
|
||||
TierType: "gpu",
|
||||
TierState: "probing",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if host2.HashrateHps != 5000 {
|
||||
t.Fatalf("hashrate: got %v", host2.HashrateHps)
|
||||
}
|
||||
if host2.CurrentTier != 3 {
|
||||
t.Fatalf("tier: got %d", host2.CurrentTier)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMiningProfileRoundTrip(t *testing.T) {
|
||||
conn, err := db.Open(t.TempDir() + "/test.db")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
store := NewStore(conn)
|
||||
host, err := store.UpsertHeartbeat(types.HeartbeatPayload{Hostname: "miner-1"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
profile := &types.MiningProfile{
|
||||
ID: "prof-1",
|
||||
Name: "test",
|
||||
WalletAddress: "wallet-pin-xyz",
|
||||
Tiers: []types.MiningTierSpec{
|
||||
{Type: "xmrig", Duration: 5},
|
||||
},
|
||||
PolicyFromServer: true,
|
||||
}
|
||||
ctx := context.Background()
|
||||
if err := store.SaveMiningProfile(ctx, profile); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := store.AssignMiningProfile(ctx, host.ID, profile.ID); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
got, err := store.GetHostMiningProfile(ctx, host.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got.WalletAddress != "wallet-pin-xyz" {
|
||||
t.Fatalf("wallet: %q", got.WalletAddress)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user