result_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package prom
  2. import (
  3. "fmt"
  4. "strings"
  5. "testing"
  6. )
  7. func TestErrorFunctions(t *testing.T) {
  8. testCases := []struct {
  9. name string
  10. fn func(string, interface{}) error
  11. query string
  12. response interface{}
  13. }{
  14. {
  15. name: "DataFieldFormatErr",
  16. fn: DataFieldFormatErr,
  17. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  18. response: map[string]string{"foo": "bar"},
  19. },
  20. {
  21. name: "DataPointFormatErr",
  22. fn: DataPointFormatErr,
  23. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  24. response: []string{"invalid"},
  25. },
  26. {
  27. name: "MetricFieldDoesNotExistErr",
  28. fn: MetricFieldDoesNotExistErr,
  29. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  30. response: map[string]interface{}{"values": []interface{}{}},
  31. },
  32. {
  33. name: "MetricFieldFormatErr",
  34. fn: MetricFieldFormatErr,
  35. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  36. response: "invalid",
  37. },
  38. {
  39. name: "PromUnexpectedResponseErr",
  40. fn: PromUnexpectedResponseErr,
  41. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  42. response: nil,
  43. },
  44. {
  45. name: "ResultFieldDoesNotExistErr",
  46. fn: ResultFieldDoesNotExistErr,
  47. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  48. response: map[string]interface{}{"resultType": "matrix"},
  49. },
  50. {
  51. name: "ResultFieldFormatErr",
  52. fn: ResultFieldFormatErr,
  53. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  54. response: "invalid",
  55. },
  56. {
  57. name: "ResultFormatErr",
  58. fn: ResultFormatErr,
  59. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  60. response: 123,
  61. },
  62. {
  63. name: "ValueFieldDoesNotExistErr",
  64. fn: ValueFieldDoesNotExistErr,
  65. query: "avg(node_total_hourly_cost{}) by (node, cluster, provider_id)[24h:5m]",
  66. response: map[string]interface{}{"metric": map[string]interface{}{}},
  67. },
  68. }
  69. for _, tc := range testCases {
  70. t.Run(tc.name, func(t *testing.T) {
  71. err := tc.fn(tc.query, tc.response)
  72. if err == nil {
  73. t.Errorf("Expected error, got nil")
  74. return
  75. }
  76. // Verify error contains key components without being overly strict about exact wording
  77. if !strings.Contains(err.Error(), tc.query) {
  78. t.Errorf("Error message missing query string '%s': %s", tc.query, err.Error())
  79. }
  80. if !strings.Contains(err.Error(), fmt.Sprintf("%+v", tc.response)) {
  81. t.Errorf("Error message missing response value '%+v': %s", tc.response, err.Error())
  82. }
  83. })
  84. }
  85. }