From 322a96c57911d779e31a7b997985a1a570311e5e Mon Sep 17 00:00:00 2001 From: Geoffrey Wilson Date: Thu, 2 Nov 2023 16:49:54 -0400 Subject: [PATCH] Enable database import of apps and dashboards (#542) * Enabled import of apps and dashboards for migrating to new db, with integration test verification --- pkg/database/import.go | 4 +- .../golang/database/import_test.go | 46 ++++++++++++------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/pkg/database/import.go b/pkg/database/import.go index ae57b22b8..5e12b82fd 100644 --- a/pkg/database/import.go +++ b/pkg/database/import.go @@ -32,8 +32,8 @@ func NewImporter(input, output *gorm.DB) *Importer { func (s *Importer) Import() error { tables := []string{ "namespaces", - // "apps", - // "dashboards", + "apps", + "dashboards", "experiments", "experiment_tags", "runs", diff --git a/tests/integration/golang/database/import_test.go b/tests/integration/golang/database/import_test.go index 56224da7c..0864af6a1 100644 --- a/tests/integration/golang/database/import_test.go +++ b/tests/integration/golang/database/import_test.go @@ -103,6 +103,8 @@ func (s *ImportTestSuite) SetupTest() { dashboardFixtures, err := fixtures.NewDashboardFixtures(db.GormDB()) assert.Nil(s.T(), err) + + // dashboard 1 _, err = dashboardFixtures.CreateDashboard(context.Background(), &database.Dashboard{ Base: database.Base{ ID: uuid.New(), @@ -113,6 +115,16 @@ func (s *ImportTestSuite) SetupTest() { }) assert.Nil(s.T(), err) + // dashboard 2 + _, err = dashboardFixtures.CreateDashboard(context.Background(), &database.Dashboard{ + Base: database.Base{ + ID: uuid.New(), + CreatedAt: time.Now(), + }, + AppID: &app.ID, + Name: uuid.NewString(), + }) + assert.Nil(s.T(), err) // prepare output database. db, err = database.NewDBProvider( helpers.GetOutputDatabaseUri(), @@ -138,7 +150,7 @@ func (s *ImportTestSuite) SetupTest() { latestMetrics: 20, tags: 10, params: 20, - dashboards: 1, + dashboards: 2, apps: 1, } } @@ -173,8 +185,8 @@ func (s *ImportTestSuite) Test_Ok() { // confirm row-for-row equality for _, table := range []string{ "namespaces", - // "apps", - // "dashboards", + "apps", + "dashboards", "experiment_tags", "runs", "tags", @@ -223,13 +235,13 @@ func validateRowCounts(t *testing.T, db *gorm.DB, counts rowCounts) { assert.Nil(t, tx.Error) assert.Equal(t, counts.distinctRunExperimentIDs, int(countVal), "Runs experiment association incorrect") - // tx = db.DB.Model(&database.App{}).Count(&countVal) - // assert.Nil(t, tx.Error) - // assert.Equal(t, counts.apps, int(countVal), "Apps count incorrect") + tx = db.Model(&database.App{}).Count(&countVal) + assert.Nil(t, tx.Error) + assert.Equal(t, counts.apps, int(countVal), "Apps count incorrect") - // tx = db.DB.Model(&database.Dashboard{}).Count(&countVal) - // assert.Nil(t, tx.Error) - // assert.Equal(t, counts.dashboards, int(countVal), "Dashboard count incorrect") + tx = db.Model(&database.Dashboard{}).Count(&countVal) + assert.Nil(t, tx.Error) + assert.Equal(t, counts.dashboards, int(countVal), "Dashboard count incorrect") } // validateTable will scan source and dest table and confirm they are identical @@ -246,22 +258,22 @@ func validateTable(t *testing.T, source, dest *gorm.DB, table string) { defer destRows.Close() for sourceRows.Next() { - var sourceItem, destItem map[string]any + var sourceRow, destRow map[string]any - err := source.ScanRows(sourceRows, &sourceItem) + err := source.ScanRows(sourceRows, &sourceRow) assert.Nil(t, err) destRows.Next() - err = dest.ScanRows(destRows, &destItem) + err = dest.ScanRows(destRows, &destRow) assert.Nil(t, err) // TODO:DSuhinin delete this fields right now, because they // cause comparison error when we compare `namespace` entities. Let's find smarter way to do that. - delete(destItem, "updated_at") - delete(destItem, "created_at") - delete(sourceItem, "updated_at") - delete(sourceItem, "created_at") + delete(destRow, "updated_at") + delete(destRow, "created_at") + delete(sourceRow, "updated_at") + delete(sourceRow, "created_at") - assert.Equal(t, sourceItem, destItem) + assert.Equal(t, sourceRow, destRow) } }