Skip to content

Commit 72343d7

Browse files
committed
RHINENG-19880: update tests for system delete event
systems are marked as stale and culled instead of being removed from database
1 parent 794895c commit 72343d7

3 files changed

Lines changed: 93 additions & 3 deletions

File tree

listener/common_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func deleteData(t *testing.T) {
3737
Delete(&models.Repo{}).Error)
3838
assert.Nil(t, database.DB.Unscoped().Where("inventory_id = ?::uuid", id).Delete(&models.SystemPlatform{}).Error)
3939
assert.Nil(t, database.DB.Unscoped().Where("name = ?", id).Delete(&models.RhAccount{}).Error)
40+
assert.Nil(t, database.DB.Unscoped().Where("inventory_id = ?", id).Delete(&models.DeletedSystem{}).Error)
4041
}
4142

4243
// nolint: unparam
@@ -68,7 +69,17 @@ func assertSystemNotInDB(t *testing.T) {
6869
assert.Nil(t, database.DB.Model(models.SystemPlatform{}).
6970
Where("inventory_id = ?::uuid", id).Count(&systemCount).Error)
7071

71-
assert.Equal(t, int(systemCount), 0)
72+
assert.Equal(t, 0, int(systemCount))
73+
}
74+
75+
func assertSystemStaleAndCulled(t *testing.T) {
76+
var systemCount int64
77+
now := time.Now()
78+
assert.Nil(t, database.DB.Model(models.SystemPlatform{}).
79+
Where("stale = true AND stale_timestamp < ? AND culled_timestamp < ?", now, now).
80+
Where("inventory_id = ?::uuid", id).Count(&systemCount).Error)
81+
82+
assert.Equal(t, 1, int(systemCount))
7283
}
7384

7485
func getOrCreateTestAccount(t *testing.T) int {

listener/events_test.go

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ func TestDeleteSystem(t *testing.T) {
4949

5050
deleteEvent := createTestDeleteEvent(id)
5151
err := HandleDelete(deleteEvent)
52-
assertSystemNotInDB(t)
5352
assert.NoError(t, err)
53+
assertSystemStaleAndCulled(t)
54+
deleteData(t)
5455
}
5556

5657
func TestDeleteSystemWarn1(t *testing.T) {
@@ -103,11 +104,51 @@ func TestUploadAfterDelete(t *testing.T) {
103104
utils.SkipWithoutDB(t)
104105
core.SetupTestEnvironment()
105106
configure()
107+
deleteData(t)
108+
109+
// system is not in database and the first event is delete
110+
deleteEvent := createTestDeleteEvent(id)
111+
err := HandleDelete(deleteEvent)
112+
assert.NoError(t, err)
106113

114+
// upload will be skipped and system won't be created
107115
uploadEvent := createTestUploadEvent("1", id, "puptoo", true, false)
108-
err := HandleUpload(uploadEvent)
116+
err = HandleUpload(uploadEvent)
109117
assert.NoError(t, err)
110118
assertSystemNotInDB(t)
119+
120+
deleteData(t)
121+
}
122+
123+
func TestCreateDeleteUpload(t *testing.T) {
124+
utils.SkipWithoutDB(t)
125+
core.SetupTestEnvironment()
126+
configure()
127+
deleteData(t)
128+
129+
uploadEvent := createTestUploadEvent("1", id, "puptoo", true, false)
130+
originalName := "UPLOADED"
131+
uploadEvent.Host.DisplayName = &originalName
132+
err := HandleUpload(uploadEvent)
133+
assert.NoError(t, err)
134+
135+
// delete marks the system but not physically delete it
136+
deleteEvent := createTestDeleteEvent(id)
137+
err = HandleDelete(deleteEvent)
138+
assert.NoError(t, err)
139+
assertSystemStaleAndCulled(t)
140+
141+
// second upload of now deleted system should not change anything
142+
changedName := "UPDATED"
143+
uploadEvent.Host.DisplayName = &changedName
144+
err = HandleUpload(uploadEvent)
145+
assert.NoError(t, err)
146+
147+
var system models.SystemPlatform
148+
assert.NoError(t, database.DB.Order("ID DESC").Find(&system, "inventory_id = ?::uuid", id).Error)
149+
assert.Equal(t, originalName, system.DisplayName)
150+
151+
deleteData(t)
111152
}
112153

113154
func TestDeleteCleanup(t *testing.T) {

tasks/system_culling/system_culling_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,41 @@ func TestCullSystems(t *testing.T) {
172172
assert.Equal(t, cnt-int64(nToDelete), cntAfter)
173173
})
174174
}
175+
176+
func TestPruneDeletedSystems(t *testing.T) {
177+
utils.SkipWithoutDB(t)
178+
core.SetupTestEnvironment()
179+
180+
nToDelete := 4
181+
for i := 0; i < nToDelete; i++ {
182+
invID := fmt.Sprintf("00000000-0000-0000-0000-000000000de%d", i+1)
183+
assert.NoError(t, database.DB.Create(&models.DeletedSystem{
184+
InventoryID: invID,
185+
WhenDeleted: staleDate,
186+
}).Error)
187+
}
188+
assert.NoError(t, database.DB.Create(&models.DeletedSystem{
189+
InventoryID: "00000000-0000-0000-0000-000000000deff",
190+
WhenDeleted: time.Now(),
191+
}).Error)
192+
193+
var cnt int64
194+
var cntAfter int64
195+
assert.NoError(t, database.DB.Model(&models.DeletedSystem{}).Count(&cnt).Error)
196+
assert.Equal(t, int64(nToDelete+1), cnt)
197+
198+
nDeleted, err := pruneDeletedSystems(database.DB, 3)
199+
assert.Nil(t, err)
200+
assert.Equal(t, int64(3), nDeleted)
201+
202+
// remove rest except last system (below threshold)
203+
nDeleted, err = pruneDeletedSystems(database.DB, 3)
204+
assert.Nil(t, err)
205+
assert.Equal(t, int64(1), nDeleted)
206+
207+
assert.NoError(t, database.DB.Model(&models.DeletedSystem{}).Count(&cntAfter).Error)
208+
assert.Equal(t, int64(1), cntAfter)
209+
210+
// clean data from table
211+
assert.NoError(t, database.DB.Delete(&models.DeletedSystem{}, "1=1").Error)
212+
}

0 commit comments

Comments
 (0)