Merge pull request #577 from mslacken/fixTests

fix tests
This commit is contained in:
Christian Goll
2022-11-29 14:33:38 +01:00
committed by GitHub
4 changed files with 66 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package node
import ( import (
"fmt" "fmt"
"reflect"
"regexp" "regexp"
"strings" "strings"
@@ -347,3 +348,19 @@ func NewInfo() (nodeInfo NodeInfo) {
nodeInfo.NetDevs = make(map[string]*NetDevEntry) nodeInfo.NetDevs = make(map[string]*NetDevEntry)
return nodeInfo return nodeInfo
} }
/*
Get a entry by its name
*/
func GetByName(node interface{}, name string) (string, error) {
valEntry := reflect.ValueOf(node)
entryField := valEntry.Elem().FieldByName(name)
if entryField == (reflect.Value{}) {
return "", fmt.Errorf("couldn't find field with name: %s", name)
}
if entryField.Type() != reflect.TypeOf(Entry{}) {
return "", fmt.Errorf("field %s is not of type node.Entry", name)
}
myEntry := entryField.Interface().(Entry)
return myEntry.Get(), nil
}

View File

@@ -0,0 +1,37 @@
package node
import (
"reflect"
"testing"
)
func Test_nodeYaml_SetFrom(t *testing.T) {
c, _ := NewTestNode()
singleNodeConf := c.Nodes["test_node"]
singleNodeInfo := NewInfo()
singleNodeInfo.SetFrom(singleNodeConf)
tests := []struct {
name string
arg string
want string
wantErr bool
}{
{"Right comment", "Comment", "Node Comment", false},
{"FieldName", "comment", "NodeComment", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := GetByName(&singleNodeInfo, tt.arg)
if (err != nil) != tt.wantErr {
t.Errorf("GetByName(%s,%s) error = %v, wantErr %v",
reflect.TypeOf(singleNodeConf), tt.arg, err, tt.wantErr)
return
}
if (got != tt.want) != tt.wantErr {
t.Errorf("GetByName(%s,%s) got = %v, want = %v",
reflect.TypeOf(singleNodeConf), tt.arg, got, tt.want)
return
}
})
}
}

View File

@@ -72,7 +72,8 @@ func (nodeConf *NodeConf) getterFrom(nodeInfo NodeInfo,
for key, val := range entryMap { for key, val := range entryMap {
confMap[key] = getter(val) confMap[key] = getter(val)
} }
} else if nodeInfoVal.Field(i).Type().Kind() == reflect.Ptr { } else if nodeInfoVal.Field(i).Type().Kind() == reflect.Ptr && !nodeInfoVal.Field(i).IsNil() {
// initialize the nested NodeConf structs, but only if these will be set
if confField.Addr().Elem().IsZero() { if confField.Addr().Elem().IsZero() {
switch confField.Addr().Elem().Type() { switch confField.Addr().Elem().Type() {
case reflect.TypeOf((*KernelConf)(nil)): case reflect.TypeOf((*KernelConf)(nil)):
@@ -341,6 +342,11 @@ func (node *NodeInfo) setterFrom(n *NodeConf, nameArg string,
if node.Ipmi == nil { if node.Ipmi == nil {
node.Ipmi = new(IpmiEntry) node.Ipmi = new(IpmiEntry)
} }
// also n could be nil
if n == nil {
myn := NewConf()
n = &myn
}
nodeInfoVal := reflect.ValueOf(node) nodeInfoVal := reflect.ValueOf(node)
nodeInfoType := reflect.TypeOf(node) nodeInfoType := reflect.TypeOf(node)
nodeConfVal := reflect.ValueOf(n) nodeConfVal := reflect.ValueOf(n)
@@ -509,6 +515,10 @@ Abstract function for setting a NetDevEntry from a NetDevs
func (netDev *NetDevEntry) setterFrom(netYaml *NetDevs, nameArg string, func (netDev *NetDevEntry) setterFrom(netYaml *NetDevs, nameArg string,
setter func(*Entry, string, string), setter func(*Entry, string, string),
setterSlice func(*Entry, []string, string)) { setterSlice func(*Entry, []string, string)) {
// check if netYaml is empty
if netYaml == nil {
netYaml = new(NetDevs)
}
netValues := reflect.ValueOf(netDev) netValues := reflect.ValueOf(netDev)
netInfoType := reflect.TypeOf(*netYaml) netInfoType := reflect.TypeOf(*netYaml)
netInfoVal := reflect.ValueOf(*netYaml) netInfoVal := reflect.ValueOf(*netYaml)

View File

@@ -13,6 +13,7 @@ nodeprofiles:
comment: This profile is automatically included for each node comment: This profile is automatically included for each node
nodes: nodes:
test_node: test_node:
comment: Node Comment
profiles: profiles:
- default - default
network devices: network devices: