[release-12.0.0] Dashboards and Folders: cleanup timestamps and error codes (#104712)

K8s: Fix timestamps and error codes
pull/104790/head
Stephanie Hingtgen 2 months ago committed by GitHub
parent 85b1813e75
commit f148a5eea5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 3
      pkg/registry/apis/dashboard/legacy/sql_dashboards.go
  2. 2
      pkg/registry/apis/folders/legacy_storage.go
  3. 4
      pkg/services/dashboards/service/dashboard_service.go
  4. 4
      pkg/services/folder/folderimpl/conversions.go
  5. 4
      pkg/services/folder/folderimpl/conversions_test.go
  6. 28
      pkg/services/folder/folderimpl/folder_unifiedstorage_test.go

@ -10,6 +10,7 @@ import (
"sync" "sync"
"time" "time"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/ptr" "k8s.io/utils/ptr"
@ -434,7 +435,7 @@ func (a *dashboardSqlAccess) SaveDashboard(ctx context.Context, orgId int64, das
return nil, created, err return nil, created, err
} }
if failOnExisting && !created { if failOnExisting && !created {
return nil, created, dashboards.ErrDashboardWithSameUIDExists return nil, created, apierrors.NewConflict(dashboardV1.DashboardResourceInfo.GroupResource(), dash.Name, dashboards.ErrDashboardWithSameUIDExists)
} }
out, err := a.dashStore.SaveDashboard(ctx, *cmd) out, err := a.dashStore.SaveDashboard(ctx, *cmd)

@ -273,7 +273,7 @@ func (s *legacyStorage) Update(ctx context.Context,
NewParentUID: newParent, NewParentUID: newParent,
}) })
if err != nil { if err != nil {
return nil, created, fmt.Errorf("error changing parent folder spec") return nil, created, err
} }
} }

@ -2274,7 +2274,9 @@ func (dr *DashboardServiceImpl) unstructuredToLegacyDashboardWithUsers(item *uns
out.Created = obj.GetCreationTimestamp().Time out.Created = obj.GetCreationTimestamp().Time
updated, err := obj.GetUpdatedTimestamp() updated, err := obj.GetUpdatedTimestamp()
if err == nil && updated != nil { if err == nil && updated != nil {
out.Updated = *updated // old apis return in local time, created is already doing that
localTime := updated.Local()
out.Updated = localTime
} else { } else {
// by default, set updated to created // by default, set updated to created
out.Updated = out.Created out.Updated = out.Created

@ -36,12 +36,12 @@ func parseUnstructuredToLegacyFolder(item *unstructured.Unstructured) (*folder.F
url = dashboards.GetFolderURL(uid, slug) url = dashboards.GetFolderURL(uid, slug)
} }
created := meta.GetCreationTimestamp().UTC() created := meta.GetCreationTimestamp().Local()
updated, _ := meta.GetUpdatedTimestamp() updated, _ := meta.GetUpdatedTimestamp()
if updated == nil { if updated == nil {
updated = &created updated = &created
} else { } else {
tmp := updated.UTC() tmp := updated.Local()
updated = &tmp updated = &tmp
} }

@ -45,7 +45,7 @@ func TestFolderConversions(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
created, err := time.Parse(time.RFC3339, "2022-12-02T02:02:02Z") created, err := time.Parse(time.RFC3339, "2022-12-02T02:02:02Z")
created = created.UTC() created = created.Local()
require.NoError(t, err) require.NoError(t, err)
fake := usertest.NewUserServiceFake() fake := usertest.NewUserServiceFake()
@ -232,7 +232,7 @@ func TestFolderListConversions(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
created, err := time.Parse(time.RFC3339, "2022-12-02T02:02:02Z") created, err := time.Parse(time.RFC3339, "2022-12-02T02:02:02Z")
created = created.UTC() created = created.Local()
require.NoError(t, err) require.NoError(t, err)
fake := usertest.NewUserServiceFake() fake := usertest.NewUserServiceFake()

@ -54,6 +54,24 @@ func (r rcp) GetRestConfig(ctx context.Context) (*clientrest.Config, error) {
}, nil }, nil
} }
func compareFoldersNormalizeTime(t *testing.T, expected, actual *folder.Folder) {
require.Equal(t, expected.Title, actual.Title)
require.Equal(t, expected.UID, actual.UID)
require.Equal(t, expected.OrgID, actual.OrgID)
require.Equal(t, expected.URL, actual.URL)
require.Equal(t, expected.Fullpath, actual.Fullpath)
require.Equal(t, expected.FullpathUIDs, actual.FullpathUIDs)
require.Equal(t, expected.CreatedByUID, actual.CreatedByUID)
require.Equal(t, expected.UpdatedByUID, actual.UpdatedByUID)
require.Equal(t, expected.ParentUID, actual.ParentUID)
require.Equal(t, expected.Description, actual.Description)
require.Equal(t, expected.HasACL, actual.HasACL)
require.Equal(t, expected.Version, actual.Version)
require.Equal(t, expected.ManagedBy, actual.ManagedBy)
require.Equal(t, expected.Created.Local(), actual.Created.Local())
require.Equal(t, expected.Updated.Local(), actual.Updated.Local())
}
func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) { func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
if testing.Short() { if testing.Short() {
t.Skip("skipping integration test") t.Skip("skipping integration test")
@ -313,7 +331,7 @@ func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
SignedInUser: usr, SignedInUser: usr,
}) })
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, f, actualFolder) compareFoldersNormalizeTime(t, f, actualFolder)
}) })
t.Run("When creating folder should return error if uid is general", func(t *testing.T) { t.Run("When creating folder should return error if uid is general", func(t *testing.T) {
@ -403,8 +421,8 @@ func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
OrgID: fooFolder.OrgID, OrgID: fooFolder.OrgID,
SignedInUser: usr, SignedInUser: usr,
}) })
require.Equal(t, fooFolder, actual)
require.NoError(t, err) require.NoError(t, err)
compareFoldersNormalizeTime(t, fooFolder, actual)
}) })
t.Run("When get folder by uid and uid is general should return the root folder object", func(t *testing.T) { t.Run("When get folder by uid and uid is general should return the root folder object", func(t *testing.T) {
@ -437,8 +455,8 @@ func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
} }
actual, err := folderService.Get(context.Background(), query) actual, err := folderService.Get(context.Background(), query)
require.Equal(t, fooFolder, actual)
require.NoError(t, err) require.NoError(t, err)
compareFoldersNormalizeTime(t, fooFolder, actual)
}) })
t.Run("When get folder by non existing ID should return not found error", func(t *testing.T) { t.Run("When get folder by non existing ID should return not found error", func(t *testing.T) {
@ -471,8 +489,8 @@ func TestIntegrationFolderServiceViaUnifiedStorage(t *testing.T) {
} }
actual, err := folderService.Get(context.Background(), query) actual, err := folderService.Get(context.Background(), query)
require.Equal(t, fooFolder, actual)
require.NoError(t, err) require.NoError(t, err)
compareFoldersNormalizeTime(t, fooFolder, actual)
}) })
t.Run("When get folder by non existing Title should return not found error", func(t *testing.T) { t.Run("When get folder by non existing Title should return not found error", func(t *testing.T) {
@ -847,7 +865,7 @@ func TestGetFoldersFromApiServer(t *testing.T) {
CreatedByUID: ":0", CreatedByUID: ":0",
UpdatedByUID: ":0", UpdatedByUID: ":0",
} }
require.Equal(t, expectedResult, result) compareFoldersNormalizeTime(t, expectedResult, result)
fakeK8sClient.AssertExpectations(t) fakeK8sClient.AssertExpectations(t)
}) })
} }

Loading…
Cancel
Save