helper_test.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package model
  2. import (
  3. "github.com/opencost/opencost/core/pkg/model/pb"
  4. "github.com/opencost/opencost/core/pkg/opencost"
  5. "github.com/opencost/opencost/core/pkg/util/timeutil"
  6. "google.golang.org/protobuf/types/known/timestamppb"
  7. "reflect"
  8. "testing"
  9. "time"
  10. )
  11. func TestConvertWindow(t *testing.T) {
  12. timeDay := time.Date(2025, 9, 1, 0, 0, 0, 0, time.UTC)
  13. timeHour := timeDay.Add(time.Hour)
  14. timeTenMinute := timeHour.Add(time.Minute * 10)
  15. invalidTime := timeTenMinute.Add(time.Second)
  16. tests := []struct {
  17. name string
  18. window *pb.Window
  19. want opencost.Window
  20. wantErr bool
  21. }{
  22. {
  23. name: "nil window",
  24. window: nil,
  25. want: opencost.Window{},
  26. wantErr: true,
  27. },
  28. {
  29. name: "invalid resolution",
  30. window: &pb.Window{
  31. Resolution: 999,
  32. Start: timestamppb.New(timeDay),
  33. },
  34. want: opencost.Window{},
  35. wantErr: true,
  36. },
  37. {
  38. name: "invalid time",
  39. window: &pb.Window{
  40. Resolution: pb.Resolution_RESOLUTION_1D,
  41. Start: timestamppb.New(invalidTime),
  42. },
  43. want: opencost.Window{},
  44. wantErr: true,
  45. },
  46. {
  47. name: "valid 1d",
  48. window: &pb.Window{
  49. Resolution: pb.Resolution_RESOLUTION_1D,
  50. Start: timestamppb.New(timeDay),
  51. },
  52. want: opencost.NewClosedWindow(timeDay, timeDay.Add(timeutil.Day)),
  53. wantErr: false,
  54. },
  55. {
  56. name: "valid 1h",
  57. window: &pb.Window{
  58. Resolution: pb.Resolution_RESOLUTION_1H,
  59. Start: timestamppb.New(timeHour),
  60. },
  61. want: opencost.NewClosedWindow(timeHour, timeHour.Add(time.Hour)),
  62. wantErr: false,
  63. },
  64. {
  65. name: "valid 10m",
  66. window: &pb.Window{
  67. Resolution: pb.Resolution_RESOLUTION_10M,
  68. Start: timestamppb.New(timeTenMinute),
  69. },
  70. want: opencost.NewClosedWindow(timeTenMinute, timeTenMinute.Add(10*time.Minute)),
  71. wantErr: false,
  72. },
  73. }
  74. for _, tt := range tests {
  75. t.Run(tt.name, func(t *testing.T) {
  76. got, err := ConvertWindow(tt.window)
  77. if (err != nil) != tt.wantErr {
  78. t.Errorf("ConvertWindow() error = %v, wantErr %v", err, tt.wantErr)
  79. return
  80. }
  81. if !reflect.DeepEqual(got, tt.want) {
  82. t.Errorf("ConvertWindow() got = %v, want %v", got, tt.want)
  83. }
  84. })
  85. }
  86. }