autocompletequeryservice_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package asset
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/opencost/opencost/core/pkg/autocomplete"
  6. "github.com/opencost/opencost/core/pkg/filter/ast"
  7. "github.com/opencost/opencost/core/pkg/opencost"
  8. )
  9. func TestQueryAssetAutocompleteFromSet(t *testing.T) {
  10. start := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
  11. end := start.Add(24 * time.Hour)
  12. window := opencost.NewClosedWindow(start, end)
  13. nodeA := opencost.NewNode("node-a", "cluster-a", "provider-a", start, end, window)
  14. nodeA.SetLabels(map[string]string{"team": "platform", "app": "api"})
  15. nodeA.GetProperties().Account = "acct-a"
  16. nodeA.GetProperties().Category = opencost.ComputeCategory
  17. nodeB := opencost.NewNode("node-b", "cluster-b", "provider-b", start, end, window)
  18. nodeB.SetLabels(map[string]string{"team": "data", "app": "db"})
  19. nodeB.GetProperties().Account = "acct-b"
  20. nodeB.GetProperties().Category = opencost.ComputeCategory
  21. assetSet := opencost.NewAssetSet(start, end, nodeA, nodeB)
  22. resp, err := QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  23. TenantID: "opencost",
  24. Field: "cluster",
  25. Window: window,
  26. Filter: &ast.VoidOp{},
  27. })
  28. if err != nil {
  29. t.Fatalf("unexpected error: %v", err)
  30. }
  31. if len(resp.Data) != 2 || resp.Data[0] != "cluster-a" || resp.Data[1] != "cluster-b" {
  32. t.Fatalf("unexpected cluster autocomplete response: %+v", resp.Data)
  33. }
  34. labelResp, err := QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  35. TenantID: "opencost",
  36. Field: "label:team",
  37. Search: "plat",
  38. Window: window,
  39. })
  40. if err != nil {
  41. t.Fatalf("unexpected error: %v", err)
  42. }
  43. if len(labelResp.Data) != 1 || labelResp.Data[0] != "platform" {
  44. t.Fatalf("unexpected label autocomplete response: %+v", labelResp.Data)
  45. }
  46. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  47. Field: "cluster",
  48. })
  49. if err == nil {
  50. t.Fatal("expected error when tenant ID is missing")
  51. }
  52. if !autocomplete.IsBadRequest(err) {
  53. t.Fatalf("expected bad request error, got: %v", err)
  54. }
  55. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  56. TenantID: "opencost",
  57. Field: "labels",
  58. Window: window,
  59. })
  60. if err == nil {
  61. t.Fatal("expected error for invalid field prefix")
  62. }
  63. if !autocomplete.IsBadRequest(err) {
  64. t.Fatalf("expected bad request error, got: %v", err)
  65. }
  66. openWindow := opencost.NewWindow(&start, nil)
  67. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  68. TenantID: "opencost",
  69. Field: "name",
  70. Window: openWindow,
  71. })
  72. if err == nil {
  73. t.Fatal("expected error for open window")
  74. }
  75. if !autocomplete.IsBadRequest(err) {
  76. t.Fatalf("expected bad request error, got: %v", err)
  77. }
  78. }