cloudcost_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package cloudcost
  2. import (
  3. "errors"
  4. "testing"
  5. "time"
  6. "github.com/opencost/opencost/core/pkg/autocomplete"
  7. "github.com/opencost/opencost/core/pkg/opencost"
  8. "github.com/opencost/opencost/core/pkg/util/httputil"
  9. )
  10. func TestValidateField(t *testing.T) {
  11. got, err := ValidateField("accountID")
  12. if err != nil || got != "accountID" {
  13. t.Fatalf("ValidateField(accountID) = %q, %v", got, err)
  14. }
  15. got, err = ValidateField("label:App")
  16. if err != nil || got != "label:App" {
  17. t.Fatalf("ValidateField(label:App) = %q, %v", got, err)
  18. }
  19. got, err = ValidateField("label")
  20. if err != nil || got != "label" {
  21. t.Fatalf("ValidateField(label) = %q, %v", got, err)
  22. }
  23. _, err = ValidateField("")
  24. if err == nil {
  25. t.Fatal("expected error for empty field")
  26. }
  27. _, err = ValidateField("bad")
  28. if err == nil {
  29. t.Fatal("expected error for unrecognized field")
  30. }
  31. }
  32. func TestNormalizeRequest(t *testing.T) {
  33. start := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
  34. req := &autocomplete.Request{
  35. Field: "accountID",
  36. Search: " x ",
  37. Limit: 0,
  38. Window: opencost.NewClosedWindow(start, start.Add(24*time.Hour)),
  39. }
  40. field, err := autocomplete.NormalizeRequest(req, ValidateField, autocomplete.NormalizeOptions{})
  41. if err != nil {
  42. t.Fatalf("unexpected error: %v", err)
  43. }
  44. if field != "accountID" || req.Search != "x" {
  45. t.Fatalf("unexpected normalized request: %+v", req)
  46. }
  47. openReq := &autocomplete.Request{Field: "accountID", Window: opencost.NewWindow(&start, nil)}
  48. _, err = autocomplete.NormalizeRequest(openReq, ValidateField, autocomplete.NormalizeOptions{})
  49. if err == nil || !errors.Is(err, autocomplete.ErrBadRequest) {
  50. t.Fatalf("expected open window error, got %v", err)
  51. }
  52. }
  53. func TestParseRequest(t *testing.T) {
  54. windowStr := "2023-01-01T00:00:00Z,2023-01-02T00:00:00Z"
  55. qp := httputil.NewQueryParams(map[string][]string{
  56. "window": {windowStr},
  57. "field": {"accountID"},
  58. "search": {" aws "},
  59. })
  60. got, err := ParseRequest(qp, autocomplete.ParseOptions{})
  61. if err != nil {
  62. t.Fatalf("ParseRequest() error = %v", err)
  63. }
  64. if got.Field != "accountID" || got.Search != "aws" {
  65. t.Fatalf("unexpected request: %+v", got)
  66. }
  67. _, err = ParseRequest(httputil.NewQueryParams(map[string][]string{"field": {"accountID"}}), autocomplete.ParseOptions{})
  68. if err == nil || !errors.Is(err, autocomplete.ErrBadRequest) {
  69. t.Fatalf("expected missing window error, got %v", err)
  70. }
  71. }