mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2024-11-14 14:07:26 +01:00
127 lines
2.9 KiB
Go
127 lines
2.9 KiB
Go
package hostlist
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestExpand(t *testing.T) {
|
|
|
|
// Compare two slices of strings
|
|
equal := func(a, b []string) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i, v := range a {
|
|
if v != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
type testDefinition struct {
|
|
input string
|
|
resultExpected []string
|
|
errorExpected bool
|
|
}
|
|
|
|
expandTests := []testDefinition{
|
|
{
|
|
// Single node
|
|
input: "n1",
|
|
resultExpected: []string{"n1"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Single node, duplicated
|
|
input: "n1,n1",
|
|
resultExpected: []string{"n1"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Single node with padding
|
|
input: "n[01]",
|
|
resultExpected: []string{"n01"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Single node with suffix
|
|
input: "n[01]-p",
|
|
resultExpected: []string{"n01-p"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Multiple nodes with a single range
|
|
input: "n[1-2]",
|
|
resultExpected: []string{"n1", "n2"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Multiple nodes with a single range and a single index
|
|
input: "n[1-2,3]",
|
|
resultExpected: []string{"n1", "n2", "n3"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Multiple nodes with different prefixes
|
|
input: "n[1-2],m[1,2]",
|
|
resultExpected: []string{"m1", "m2", "n1", "n2"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Multiple nodes with different suffixes
|
|
input: "n[1-2]-p,n[1,2]-q",
|
|
resultExpected: []string{"n1-p", "n1-q", "n2-p", "n2-q"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Multiple nodes with and without node ranges
|
|
input: " n09, n[01-04,06-07,09] , , n10,n04",
|
|
resultExpected: []string{"n01", "n02", "n03", "n04", "n06", "n07", "n09", "n10"},
|
|
errorExpected: false,
|
|
},
|
|
{
|
|
// Forbidden DNS character
|
|
input: "n@",
|
|
resultExpected: []string{},
|
|
errorExpected: true,
|
|
},
|
|
{
|
|
// Forbidden range
|
|
input: "n[1-2-2,3]",
|
|
resultExpected: []string{},
|
|
errorExpected: true,
|
|
},
|
|
{
|
|
// Forbidden range limits
|
|
input: "n[2-1]",
|
|
resultExpected: []string{},
|
|
errorExpected: true,
|
|
},
|
|
}
|
|
|
|
for _, expandTest := range expandTests {
|
|
result, err := Expand(expandTest.input)
|
|
|
|
hasError := err != nil
|
|
if hasError != expandTest.errorExpected && hasError {
|
|
t.Errorf("Expand('%s') failed: unexpected error '%v'",
|
|
expandTest.input, err)
|
|
continue
|
|
}
|
|
if hasError != expandTest.errorExpected && !hasError {
|
|
t.Errorf("Expand('%s') did not fail as expected: got result '%+v'",
|
|
expandTest.input, result)
|
|
continue
|
|
}
|
|
if !hasError && !equal(result, expandTest.resultExpected) {
|
|
t.Errorf("Expand('%s') failed: got result '%+v', expected result '%v'",
|
|
expandTest.input, result, expandTest.resultExpected)
|
|
continue
|
|
}
|
|
|
|
t.Logf("Checked hostlist.Expand('%s'): result = '%+v', err = '%v'",
|
|
expandTest.input, result, err)
|
|
}
|
|
}
|