diff --git a/check/test.go b/check/test.go index 2f7a288..b6bed04 100644 --- a/check/test.go +++ b/check/test.go @@ -23,6 +23,7 @@ import ( "strconv" "strings" + "github.com/golang/glog" yaml "gopkg.in/yaml.v2" "k8s.io/client-go/util/jsonpath" ) @@ -123,8 +124,8 @@ func (t *testItem) execute(s string) *testOutput { } } } else { - fmt.Fprintf(os.Stderr, "invalid flag in testitem definition") - os.Exit(1) + glog.V(1).Infof(fmt.Sprintf("invalid flag in testitem definition")) + return failTestItem("error invalid flag in testitem definition") } } @@ -170,8 +171,8 @@ func compareOp(tCompareOp string, flagVal string, tCompareValue string) (string, case "gt", "gte", "lt", "lte": a, b, err := toNumeric(flagVal, tCompareValue) if err != nil { - fmt.Fprintf(os.Stderr, "Not numeric value - flag: %q - compareValue: %q %v\n", flagVal, tCompareValue, err) - os.Exit(1) + glog.V(1).Infof(fmt.Sprintf("Not numeric value - flag: %q - compareValue: %q %v\n", flagVal, tCompareValue, err)) + return "Invalid Number(s) used for comparison", false } switch tCompareOp { case "gt": @@ -213,10 +214,14 @@ func compareOp(tCompareOp string, flagVal string, tCompareValue string) (string, case "bitmask": expectedResultPattern = "bitmask '%s' AND '%s'" requested, err := strconv.ParseInt(flagVal, 8, 64) + if err != nil { + glog.V(1).Infof(fmt.Sprintf("Not numeric value - flag: %q - compareValue: %q %v\n", flagVal, tCompareValue, err)) + return fmt.Sprintf("Not numeric value - flag: %s", flagVal), false + } max, err := strconv.ParseInt(tCompareValue, 8, 64) if err != nil { - fmt.Fprintf(os.Stderr, "Not numeric value - flag: %q - compareValue: %q %v\n", flagVal, tCompareValue, err) - os.Exit(1) + glog.V(1).Infof(fmt.Sprintf("Not numeric value - flag: %q - compareValue: %q %v\n", flagVal, tCompareValue, err)) + return fmt.Sprintf("Not numeric value - flag: %s", tCompareValue), false } testResult = (max & requested) == requested } @@ -330,8 +335,9 @@ func (ts *tests) execute(s string) *testOutput { // If no binary operation is specified, default to AND switch ts.BinOp { default: - fmt.Fprintf(os.Stderr, "unknown binary operator for tests %s\n", ts.BinOp) - os.Exit(1) + glog.V(2).Info(fmt.Sprintf("unknown binary operator for tests %s\n", ts.BinOp)) + finalOutput.actualResult = fmt.Sprintf("unknown binary operator for tests %s\n", ts.BinOp) + return finalOutput case and, "": result = true for i := range res { diff --git a/check/test_test.go b/check/test_test.go index ccd596f..55c3e1e 100644 --- a/check/test_test.go +++ b/check/test_test.go @@ -531,11 +531,9 @@ func TestCompareOp(t *testing.T) { testResult: true}, // Test Op "gt" - // TODO: test for non-numeric values. - // toNumeric function currently uses os.Exit, which stops tests. - // {label: "op=gt, both empty", op: "gt", flagVal: "", - // compareValue: "", expectedResultPattern: "'' is greater than ''", - // testResult: true}, + {label: "op=gt, both empty", op: "gt", flagVal: "", + compareValue: "", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, {label: "op=gt, 0 > 0", op: "gt", flagVal: "0", compareValue: "0", expectedResultPattern: "0 is greater than 0", testResult: false}, @@ -548,109 +546,124 @@ func TestCompareOp(t *testing.T) { {label: "op=gt, 5 > 5", op: "gt", flagVal: "5", compareValue: "5", expectedResultPattern: "5 is greater than 5", testResult: false}, - + {label: "op=gt, Pikachu > 5", op: "gt", flagVal: "Pikachu", + compareValue: "5", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=gt, 5 > Bulbasaur", op: "gt", flagVal: "5", + compareValue: "Bulbasaur", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, // Test Op "lt" - // TODO: test for non-numeric values. - // toNumeric function currently uses os.Exit, which stops tests. - // {label: "op=lt, both empty", op: "lt", flagVal: "", - // compareValue: "", expectedResultPattern: "'' is lower than ''", - // testResult: true}, - {label: "op=gt, 0 < 0", op: "lt", flagVal: "0", + {label: "op=lt, both empty", op: "lt", flagVal: "", + compareValue: "", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=lt, 0 < 0", op: "lt", flagVal: "0", compareValue: "0", expectedResultPattern: "0 is lower than 0", testResult: false}, - {label: "op=gt, 4 < 5", op: "lt", flagVal: "4", + {label: "op=lt, 4 < 5", op: "lt", flagVal: "4", compareValue: "5", expectedResultPattern: "4 is lower than 5", testResult: true}, - {label: "op=gt, 5 < 4", op: "lt", flagVal: "5", + {label: "op=lt, 5 < 4", op: "lt", flagVal: "5", compareValue: "4", expectedResultPattern: "5 is lower than 4", testResult: false}, - {label: "op=gt, 5 < 5", op: "lt", flagVal: "5", + {label: "op=lt, 5 < 5", op: "lt", flagVal: "5", compareValue: "5", expectedResultPattern: "5 is lower than 5", testResult: false}, - + {label: "op=lt, Charmander < 5", op: "lt", flagVal: "Charmander", + compareValue: "5", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=lt, 5 < Charmeleon", op: "lt", flagVal: "5", + compareValue: "Charmeleon", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, // Test Op "gte" - // TODO: test for non-numeric values. - // toNumeric function currently uses os.Exit, which stops tests. - // {label: "op=gt, both empty", op: "gte", flagVal: "", - // compareValue: "", expectedResultPattern: "'' is greater or equal to ''", - // testResult: true}, - {label: "op=gt, 0 >= 0", op: "gte", flagVal: "0", + {label: "op=gte, both empty", op: "gte", flagVal: "", + compareValue: "", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=gte, 0 >= 0", op: "gte", flagVal: "0", compareValue: "0", expectedResultPattern: "0 is greater or equal to 0", testResult: true}, - {label: "op=gt, 4 >= 5", op: "gte", flagVal: "4", + {label: "op=gte, 4 >= 5", op: "gte", flagVal: "4", compareValue: "5", expectedResultPattern: "4 is greater or equal to 5", testResult: false}, - {label: "op=gt, 5 >= 4", op: "gte", flagVal: "5", + {label: "op=gte, 5 >= 4", op: "gte", flagVal: "5", compareValue: "4", expectedResultPattern: "5 is greater or equal to 4", testResult: true}, - {label: "op=gt, 5 >= 5", op: "gte", flagVal: "5", + {label: "op=gte, 5 >= 5", op: "gte", flagVal: "5", compareValue: "5", expectedResultPattern: "5 is greater or equal to 5", testResult: true}, - + {label: "op=gte, Ekans >= 5", op: "gte", flagVal: "Ekans", + compareValue: "5", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=gte, 4 >= Zubat", op: "gte", flagVal: "4", + compareValue: "Zubat", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, // Test Op "lte" - // TODO: test for non-numeric values. - // toNumeric function currently uses os.Exit, which stops tests. - // {label: "op=gt, both empty", op: "lte", flagVal: "", - // compareValue: "", expectedResultPattern: "'' is lower or equal to ''", - // testResult: true}, - {label: "op=gt, 0 <= 0", op: "lte", flagVal: "0", + {label: "op=lte, both empty", op: "lte", flagVal: "", + compareValue: "", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=lte, 0 <= 0", op: "lte", flagVal: "0", compareValue: "0", expectedResultPattern: "0 is lower or equal to 0", testResult: true}, - {label: "op=gt, 4 <= 5", op: "lte", flagVal: "4", + {label: "op=lte, 4 <= 5", op: "lte", flagVal: "4", compareValue: "5", expectedResultPattern: "4 is lower or equal to 5", testResult: true}, - {label: "op=gt, 5 <= 4", op: "lte", flagVal: "5", + {label: "op=lte, 5 <= 4", op: "lte", flagVal: "5", compareValue: "4", expectedResultPattern: "5 is lower or equal to 4", testResult: false}, - {label: "op=gt, 5 <= 5", op: "lte", flagVal: "5", + {label: "op=lte, 5 <= 5", op: "lte", flagVal: "5", compareValue: "5", expectedResultPattern: "5 is lower or equal to 5", testResult: true}, + {label: "op=lte, Venomoth <= 4", op: "lte", flagVal: "Venomoth", + compareValue: "4", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, + {label: "op=lte, 5 <= Meowth", op: "lte", flagVal: "5", + compareValue: "Meowth", expectedResultPattern: "Invalid Number(s) used for comparison", + testResult: false}, // Test Op "has" - {label: "op=gt, both empty", op: "has", flagVal: "", + {label: "op=has, both empty", op: "has", flagVal: "", compareValue: "", expectedResultPattern: "'' has ''", testResult: true}, - {label: "op=gt, flagVal=empty", op: "has", flagVal: "", + {label: "op=has, flagVal=empty", op: "has", flagVal: "", compareValue: "blah", expectedResultPattern: "'' has 'blah'", testResult: false}, - {label: "op=gt, compareValue=empty", op: "has", flagVal: "blah", + {label: "op=has, compareValue=empty", op: "has", flagVal: "blah", compareValue: "", expectedResultPattern: "'blah' has ''", testResult: true}, - {label: "op=gt, 'blah' has 'la'", op: "has", flagVal: "blah", + {label: "op=has, 'blah' has 'la'", op: "has", flagVal: "blah", compareValue: "la", expectedResultPattern: "'blah' has 'la'", testResult: true}, - {label: "op=gt, 'blah' has 'LA'", op: "has", flagVal: "blah", + {label: "op=has, 'blah' has 'LA'", op: "has", flagVal: "blah", compareValue: "LA", expectedResultPattern: "'blah' has 'LA'", testResult: false}, - {label: "op=gt, 'blah' has 'lo'", op: "has", flagVal: "blah", + {label: "op=has, 'blah' has 'lo'", op: "has", flagVal: "blah", compareValue: "lo", expectedResultPattern: "'blah' has 'lo'", testResult: false}, // Test Op "nothave" - {label: "op=gt, both empty", op: "nothave", flagVal: "", + {label: "op=nothave, both empty", op: "nothave", flagVal: "", compareValue: "", expectedResultPattern: " '' not have ''", testResult: false}, - {label: "op=gt, flagVal=empty", op: "nothave", flagVal: "", + {label: "op=nothave, flagVal=empty", op: "nothave", flagVal: "", compareValue: "blah", expectedResultPattern: " '' not have 'blah'", testResult: true}, - {label: "op=gt, compareValue=empty", op: "nothave", flagVal: "blah", + {label: "op=nothave, compareValue=empty", op: "nothave", flagVal: "blah", compareValue: "", expectedResultPattern: " 'blah' not have ''", testResult: false}, - {label: "op=gt, 'blah' not have 'la'", op: "nothave", flagVal: "blah", + {label: "op=nothave, 'blah' not have 'la'", op: "nothave", flagVal: "blah", compareValue: "la", expectedResultPattern: " 'blah' not have 'la'", testResult: false}, - {label: "op=gt, 'blah' not have 'LA'", op: "nothave", flagVal: "blah", + {label: "op=nothave, 'blah' not have 'LA'", op: "nothave", flagVal: "blah", compareValue: "LA", expectedResultPattern: " 'blah' not have 'LA'", testResult: true}, - {label: "op=gt, 'blah' not have 'lo'", op: "nothave", flagVal: "blah", + {label: "op=nothave, 'blah' not have 'lo'", op: "nothave", flagVal: "blah", compareValue: "lo", expectedResultPattern: " 'blah' not have 'lo'", testResult: true}, // Test Op "regex" - {label: "op=gt, both empty", op: "regex", flagVal: "", + {label: "op=regex, both empty", op: "regex", flagVal: "", compareValue: "", expectedResultPattern: " '' matched by ''", testResult: true}, - {label: "op=gt, flagVal=empty", op: "regex", flagVal: "", + {label: "op=regex, flagVal=empty", op: "regex", flagVal: "", compareValue: "blah", expectedResultPattern: " '' matched by 'blah'", testResult: false}, @@ -679,6 +692,12 @@ func TestCompareOp(t *testing.T) { {label: "op=bitmask, 644 AND 211", op: "bitmask", flagVal: "211", compareValue: "644", expectedResultPattern: "bitmask '211' AND '644'", testResult: false}, + {label: "op=bitmask, Harry AND 211", op: "bitmask", flagVal: "Harry", + compareValue: "644", expectedResultPattern: "Not numeric value - flag: Harry", + testResult: false}, + {label: "op=bitmask, 644 AND Potter", op: "bitmask", flagVal: "211", + compareValue: "Potter", expectedResultPattern: "Not numeric value - flag: Potter", + testResult: false}, } for _, c := range cases {