Add HostConfig + Cluster fields to models and update docs
This commit is contained in:
parent
960ef62342
commit
00c4472d6c
9 changed files with 1805 additions and 9 deletions
125
src/frontend/apiserver/models/clusters_test.go
Normal file
125
src/frontend/apiserver/models/clusters_test.go
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestClusterInfo_NewFields(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
cluster ClusterInfo
|
||||
field string
|
||||
want interface{}
|
||||
}{
|
||||
{
|
||||
name: "HeartbeatInterval field exists and serializes",
|
||||
cluster: ClusterInfo{ClusterName: "test", HeartbeatInterval: 30},
|
||||
field: "heartbeat_interval",
|
||||
want: float64(30),
|
||||
},
|
||||
{
|
||||
name: "Vcpus field exists and serializes",
|
||||
cluster: ClusterInfo{ClusterName: "test", Vcpus: 16},
|
||||
field: "vcpus",
|
||||
want: float64(16),
|
||||
},
|
||||
{
|
||||
name: "InactiveHeartbeatCount field exists and serializes",
|
||||
cluster: ClusterInfo{ClusterName: "test", InactiveHeartbeatCount: 3},
|
||||
field: "inactive_heartbeat_count",
|
||||
want: float64(3),
|
||||
},
|
||||
{
|
||||
name: "HeartbeatInterval zero value serializes as 0 not omitted",
|
||||
cluster: ClusterInfo{ClusterName: "test", HeartbeatInterval: 0, Vcpus: 0, InactiveHeartbeatCount: 0},
|
||||
field: "heartbeat_interval",
|
||||
want: float64(0),
|
||||
},
|
||||
{
|
||||
name: "Vcpus zero value serializes as 0 not omitted",
|
||||
cluster: ClusterInfo{ClusterName: "test", HeartbeatInterval: 0, Vcpus: 0, InactiveHeartbeatCount: 0},
|
||||
field: "vcpus",
|
||||
want: float64(0),
|
||||
},
|
||||
{
|
||||
name: "InactiveHeartbeatCount zero value serializes as 0 not omitted",
|
||||
cluster: ClusterInfo{ClusterName: "test", HeartbeatInterval: 0, Vcpus: 0, InactiveHeartbeatCount: 0},
|
||||
field: "inactive_heartbeat_count",
|
||||
want: float64(0),
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
data, err := json.Marshal(tt.cluster)
|
||||
if err != nil {
|
||||
t.Fatalf("json.Marshal failed: %v", err)
|
||||
}
|
||||
var m map[string]interface{}
|
||||
if err := json.Unmarshal(data, &m); err != nil {
|
||||
t.Fatalf("json.Unmarshal failed: %v", err)
|
||||
}
|
||||
got, ok := m[tt.field]
|
||||
if !ok {
|
||||
t.Errorf("field %q not found in JSON output; available keys: %v", tt.field, mapKeys(m))
|
||||
} else if got != tt.want {
|
||||
t.Errorf("field %q = %v, want %v", tt.field, got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestClusterInfo_ExistingFieldsUnchanged(t *testing.T) {
|
||||
c := ClusterInfo{
|
||||
ClusterName: "mycluster",
|
||||
Version: "1.0",
|
||||
Status: 1,
|
||||
ControllerName: "ctrl1",
|
||||
NumServers: 5,
|
||||
Resources: `{"res1":"val1"}`,
|
||||
HostTypes: "LINUX64",
|
||||
HostModels: "modelA",
|
||||
ClusterAdmins: "admin1,admin2",
|
||||
}
|
||||
|
||||
data, err := json.Marshal(c)
|
||||
if err != nil {
|
||||
t.Fatalf("json.Marshal failed: %v", err)
|
||||
}
|
||||
var m map[string]interface{}
|
||||
if err := json.Unmarshal(data, &m); err != nil {
|
||||
t.Fatalf("json.Unmarshal failed: %v", err)
|
||||
}
|
||||
|
||||
// Verify all existing fields still serialize correctly
|
||||
existing := map[string]string{
|
||||
"cluster_name": c.ClusterName,
|
||||
"version": c.Version,
|
||||
"controller_name": c.ControllerName,
|
||||
"resources": c.Resources,
|
||||
"host_types": c.HostTypes,
|
||||
"host_models": c.HostModels,
|
||||
"cluster_admins": c.ClusterAdmins,
|
||||
}
|
||||
for jsonKey, wantVal := range existing {
|
||||
got, _ := m[jsonKey].(string)
|
||||
if got != wantVal {
|
||||
t.Errorf("existing field %q = %q, want %q", jsonKey, got, wantVal)
|
||||
}
|
||||
}
|
||||
if got, _ := m["status"].(float64); int(got) != c.Status {
|
||||
t.Errorf("existing field status = %v, want %d", got, c.Status)
|
||||
}
|
||||
if got, _ := m["num_servers"].(float64); int(got) != c.NumServers {
|
||||
t.Errorf("existing field num_servers = %v, want %d", got, c.NumServers)
|
||||
}
|
||||
}
|
||||
|
||||
func mapKeys(m map[string]interface{}) []string {
|
||||
keys := make([]string, 0, len(m))
|
||||
for k := range m {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
return keys
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue