mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 17:23:03 +00:00
157 lines
4.2 KiB
Go
157 lines
4.2 KiB
Go
package cli
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/cli/utils"
|
|
)
|
|
|
|
// TestProdCommandFlagParsing verifies that prod command flags are parsed correctly
|
|
// Genesis node: has --vps-ip but no --join or --token
|
|
// Joining node: has --vps-ip, --join (HTTPS URL), and --token (invite token)
|
|
func TestProdCommandFlagParsing(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args []string
|
|
expectVPSIP string
|
|
expectDomain string
|
|
expectJoin string
|
|
expectToken string
|
|
expectBranch string
|
|
isFirstNode bool // genesis node = no --join and no --token
|
|
}{
|
|
{
|
|
name: "genesis node (creates new cluster)",
|
|
args: []string{"install", "--vps-ip", "10.0.0.1", "--domain", "node-1.example.com"},
|
|
expectVPSIP: "10.0.0.1",
|
|
expectDomain: "node-1.example.com",
|
|
isFirstNode: true,
|
|
},
|
|
{
|
|
name: "joining node with invite token",
|
|
args: []string{"install", "--vps-ip", "10.0.0.2", "--join", "https://node1.dbrs.space", "--token", "abc123def456"},
|
|
expectVPSIP: "10.0.0.2",
|
|
expectJoin: "https://node1.dbrs.space",
|
|
expectToken: "abc123def456",
|
|
isFirstNode: false,
|
|
},
|
|
{
|
|
name: "with nightly branch",
|
|
args: []string{"install", "--vps-ip", "10.0.0.4", "--branch", "nightly"},
|
|
expectVPSIP: "10.0.0.4",
|
|
expectBranch: "nightly",
|
|
isFirstNode: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
var vpsIP, domain, joinAddr, token, branch string
|
|
|
|
for i, arg := range tt.args {
|
|
switch arg {
|
|
case "--vps-ip":
|
|
if i+1 < len(tt.args) {
|
|
vpsIP = tt.args[i+1]
|
|
}
|
|
case "--domain":
|
|
if i+1 < len(tt.args) {
|
|
domain = tt.args[i+1]
|
|
}
|
|
case "--join":
|
|
if i+1 < len(tt.args) {
|
|
joinAddr = tt.args[i+1]
|
|
}
|
|
case "--token":
|
|
if i+1 < len(tt.args) {
|
|
token = tt.args[i+1]
|
|
}
|
|
case "--branch":
|
|
if i+1 < len(tt.args) {
|
|
branch = tt.args[i+1]
|
|
}
|
|
}
|
|
}
|
|
|
|
// Genesis node detection: no --join and no --token
|
|
isFirstNode := joinAddr == "" && token == ""
|
|
|
|
if vpsIP != tt.expectVPSIP {
|
|
t.Errorf("expected vpsIP=%q, got %q", tt.expectVPSIP, vpsIP)
|
|
}
|
|
if domain != tt.expectDomain {
|
|
t.Errorf("expected domain=%q, got %q", tt.expectDomain, domain)
|
|
}
|
|
if joinAddr != tt.expectJoin {
|
|
t.Errorf("expected join=%q, got %q", tt.expectJoin, joinAddr)
|
|
}
|
|
if token != tt.expectToken {
|
|
t.Errorf("expected token=%q, got %q", tt.expectToken, token)
|
|
}
|
|
if branch != tt.expectBranch {
|
|
t.Errorf("expected branch=%q, got %q", tt.expectBranch, branch)
|
|
}
|
|
if isFirstNode != tt.isFirstNode {
|
|
t.Errorf("expected isFirstNode=%v, got %v", tt.isFirstNode, isFirstNode)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestNormalizePeers tests the peer multiaddr normalization
|
|
func TestNormalizePeers(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
expectCount int
|
|
expectError bool
|
|
}{
|
|
{
|
|
name: "empty string",
|
|
input: "",
|
|
expectCount: 0,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "single peer",
|
|
input: "/ip4/10.0.0.1/tcp/4001/p2p/12D3KooWHbcFcrGPXKUrHcxvd8MXEeUzRYyvY8fQcpEBxncSUwhj",
|
|
expectCount: 1,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "multiple peers",
|
|
input: "/ip4/10.0.0.1/tcp/4001/p2p/12D3KooWHbcFcrGPXKUrHcxvd8MXEeUzRYyvY8fQcpEBxncSUwhj,/ip4/10.0.0.2/tcp/4001/p2p/12D3KooWJzL4SHW3o7sZpzjfEPJzC6Ky7gKvJxY8vQVDR2jHc8F1",
|
|
expectCount: 2,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "duplicate peers deduplicated",
|
|
input: "/ip4/10.0.0.1/tcp/4001/p2p/12D3KooWHbcFcrGPXKUrHcxvd8MXEeUzRYyvY8fQcpEBxncSUwhj,/ip4/10.0.0.1/tcp/4001/p2p/12D3KooWHbcFcrGPXKUrHcxvd8MXEeUzRYyvY8fQcpEBxncSUwhj",
|
|
expectCount: 1,
|
|
expectError: false,
|
|
},
|
|
{
|
|
name: "invalid multiaddr",
|
|
input: "not-a-multiaddr",
|
|
expectCount: 0,
|
|
expectError: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
peers, err := utils.NormalizePeers(tt.input)
|
|
|
|
if tt.expectError && err == nil {
|
|
t.Errorf("expected error but got none")
|
|
}
|
|
if !tt.expectError && err != nil {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
if len(peers) != tt.expectCount {
|
|
t.Errorf("expected %d peers, got %d", tt.expectCount, len(peers))
|
|
}
|
|
})
|
|
}
|
|
}
|