mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 20:26:57 +00:00
184 lines
6.4 KiB
Go
184 lines
6.4 KiB
Go
package checks
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/inspector"
|
|
)
|
|
|
|
func TestCheckIPFS_DaemonInactive(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: false}
|
|
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
|
|
expectStatus(t, results, "ipfs.daemon_active", inspector.StatusFail)
|
|
// Early return — no swarm peer checks
|
|
if findCheck(results, "ipfs.swarm_peers") != nil {
|
|
t.Error("should not check swarm_peers when daemon inactive")
|
|
}
|
|
}
|
|
|
|
func TestCheckIPFS_HealthyNode(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{
|
|
DaemonActive: true,
|
|
ClusterActive: true,
|
|
SwarmPeerCount: 0, // single node: expected peers = 0
|
|
ClusterPeerCount: 1, // single node cluster
|
|
ClusterErrors: 0,
|
|
RepoSizeBytes: 500 * 1024 * 1024, // 500MB
|
|
RepoMaxBytes: 1024 * 1024 * 1024, // 1GB
|
|
KuboVersion: "0.22.0",
|
|
ClusterVersion: "1.0.8",
|
|
HasSwarmKey: true,
|
|
BootstrapEmpty: true,
|
|
}
|
|
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
|
|
expectStatus(t, results, "ipfs.daemon_active", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.cluster_active", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.swarm_peers", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.cluster_peers", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.cluster_errors", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.repo_size", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.swarm_key", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.bootstrap_empty", inspector.StatusPass)
|
|
}
|
|
|
|
func TestCheckIPFS_SwarmPeers(t *testing.T) {
|
|
// Single-node cluster: expected peers = 0
|
|
t.Run("enough", func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 2}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
// swarm_peers=2, expected=0 → pass
|
|
expectStatus(t, results, "ipfs.swarm_peers", inspector.StatusPass)
|
|
})
|
|
|
|
t.Run("low but nonzero", func(t *testing.T) {
|
|
// 3-node cluster: expected peers = 2 per node
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 1} // has 1, expects 2
|
|
nd2 := makeNodeData("2.2.2.2", "node")
|
|
nd2.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 2}
|
|
nd3 := makeNodeData("3.3.3.3", "node")
|
|
nd3.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 2}
|
|
data := makeCluster(map[string]*inspector.NodeData{
|
|
"1.1.1.1": nd, "2.2.2.2": nd2, "3.3.3.3": nd3,
|
|
})
|
|
results := CheckIPFS(data)
|
|
// Node 1.1.1.1 should warn (1 < 2)
|
|
found := false
|
|
for _, r := range results {
|
|
if r.ID == "ipfs.swarm_peers" && r.Node == "ubuntu@1.1.1.1" && r.Status == inspector.StatusWarn {
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
t.Error("expected swarm_peers warn for node 1.1.1.1")
|
|
}
|
|
})
|
|
|
|
t.Run("zero isolated", func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 0}
|
|
nd2 := makeNodeData("2.2.2.2", "node")
|
|
nd2.IPFS = &inspector.IPFSData{DaemonActive: true, SwarmPeerCount: 1}
|
|
data := makeCluster(map[string]*inspector.NodeData{
|
|
"1.1.1.1": nd, "2.2.2.2": nd2,
|
|
})
|
|
results := CheckIPFS(data)
|
|
found := false
|
|
for _, r := range results {
|
|
if r.ID == "ipfs.swarm_peers" && r.Node == "ubuntu@1.1.1.1" && r.Status == inspector.StatusFail {
|
|
found = true
|
|
}
|
|
}
|
|
if !found {
|
|
t.Error("expected swarm_peers fail for isolated node 1.1.1.1")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCheckIPFS_RepoSize(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
size int64
|
|
max int64
|
|
status inspector.Status
|
|
}{
|
|
{"healthy", 500 * 1024 * 1024, 1024 * 1024 * 1024, inspector.StatusPass}, // 50%
|
|
{"elevated", 870 * 1024 * 1024, 1024 * 1024 * 1024, inspector.StatusWarn}, // 85%
|
|
{"nearly full", 980 * 1024 * 1024, 1024 * 1024 * 1024, inspector.StatusFail}, // 96%
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{
|
|
DaemonActive: true,
|
|
RepoSizeBytes: tt.size,
|
|
RepoMaxBytes: tt.max,
|
|
}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
expectStatus(t, results, "ipfs.repo_size", tt.status)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCheckIPFS_SwarmKeyMissing(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, HasSwarmKey: false}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
expectStatus(t, results, "ipfs.swarm_key", inspector.StatusFail)
|
|
}
|
|
|
|
func TestCheckIPFS_BootstrapNotEmpty(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, BootstrapEmpty: false}
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
expectStatus(t, results, "ipfs.bootstrap_empty", inspector.StatusWarn)
|
|
}
|
|
|
|
func TestCheckIPFS_CrossNode_VersionConsistency(t *testing.T) {
|
|
nodes := map[string]*inspector.NodeData{}
|
|
for _, host := range []string{"1.1.1.1", "2.2.2.2", "3.3.3.3"} {
|
|
nd := makeNodeData(host, "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, KuboVersion: "0.22.0", ClusterVersion: "1.0.8"}
|
|
nodes[host] = nd
|
|
}
|
|
data := makeCluster(nodes)
|
|
results := CheckIPFS(data)
|
|
expectStatus(t, results, "ipfs.kubo_version_consistent", inspector.StatusPass)
|
|
expectStatus(t, results, "ipfs.cluster_version_consistent", inspector.StatusPass)
|
|
}
|
|
|
|
func TestCheckIPFS_CrossNode_VersionMismatch(t *testing.T) {
|
|
nodes := map[string]*inspector.NodeData{}
|
|
versions := []string{"0.22.0", "0.22.0", "0.21.0"}
|
|
for i, host := range []string{"1.1.1.1", "2.2.2.2", "3.3.3.3"} {
|
|
nd := makeNodeData(host, "node")
|
|
nd.IPFS = &inspector.IPFSData{DaemonActive: true, KuboVersion: versions[i]}
|
|
nodes[host] = nd
|
|
}
|
|
data := makeCluster(nodes)
|
|
results := CheckIPFS(data)
|
|
expectStatus(t, results, "ipfs.kubo_version_consistent", inspector.StatusWarn)
|
|
}
|
|
|
|
func TestCheckIPFS_NilData(t *testing.T) {
|
|
nd := makeNodeData("1.1.1.1", "node")
|
|
data := makeCluster(map[string]*inspector.NodeData{"1.1.1.1": nd})
|
|
results := CheckIPFS(data)
|
|
if len(results) != 0 {
|
|
t.Errorf("expected 0 results for nil IPFS data, got %d", len(results))
|
|
}
|
|
}
|