Skip to content

Commit b7fb8f6

Browse files
authored
Imp(archiver): leave at least two releases after archiving (#379)
* Imp(archiver): leave at least two releases after archiving * test(archiver): add new test * test(archiver): finish worker after handle * try to fix tests * chore(): typo fix * test(): fix * test(): fix
1 parent cd9bf73 commit b7fb8f6

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

workers/archiver/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ export default class ArchiverWorker extends Worker {
348348
* @param project - project to handle
349349
*/
350350
private async removeOldReleases(project: ProjectDBScheme): Promise<number> {
351+
const RELEASES_COUNT_TO_STAY = 2;
351352
const maxDaysInSeconds = +process.env.MAX_DAYS_NUMBER * HOURS_IN_DAY * MINUTES_IN_HOUR * SECONDS_IN_MINUTE;
352353
/**
353354
* Create timestamp for one month ago
@@ -365,6 +366,7 @@ export default class ArchiverWorker extends Worker {
365366
_id: { $lt: objectIdThreshold },
366367
})
367368
.sort({ _id: -1 })
369+
.skip(RELEASES_COUNT_TO_STAY)
368370
.toArray();
369371

370372
const filesToDelete = releasesToRemove.reduce<ReleaseFileData[]>(

workers/archiver/tests/index.test.ts

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ describe('Archiver worker', () => {
5151
await eventsCollection.insertMany(mockedEvents);
5252
});
5353

54+
beforeEach(async () => {
55+
await db.collection('releases').deleteMany({});
56+
})
57+
5458
test('Should correctly remove old events', async () => {
5559
/**
5660
* Worker initialization
@@ -111,7 +115,9 @@ describe('Archiver worker', () => {
111115
test('Should remove old releases', async () => {
112116
await db.collection('releases').insertMany(mockedReleases);
113117

114-
const releaseToStay = {
118+
const mockedReleasesLength = mockedReleases.length;
119+
120+
const releasesToStay = {
115121
_id: new ObjectId(),
116122
projectId: '5e4ff518628a6c714515f4da',
117123
release: 'releasetostay',
@@ -123,7 +129,7 @@ describe('Archiver worker', () => {
123129
/**
124130
* Insert one release with object id based on current time, it should not be removed
125131
*/
126-
await db.collection('releases').insert(releaseToStay);
132+
await db.collection('releases').insert(releasesToStay)
127133

128134
const worker = new ArchiverWorker();
129135

@@ -136,11 +142,41 @@ describe('Archiver worker', () => {
136142
.find({})
137143
.toArray();
138144

139-
expect(newReleasesCollection).toEqual([ releaseToStay ]);
140-
expect(gridFsDeleteMock).toHaveBeenCalledTimes(mockedReleases.length);
145+
expect(newReleasesCollection).toEqual([
146+
mockedReleases[mockedReleasesLength - 2],
147+
mockedReleases[mockedReleasesLength - 1],
148+
releasesToStay,
149+
]);
150+
151+
expect(gridFsDeleteMock).toHaveBeenCalledTimes(mockedReleases.length - 2);
141152
await worker.finish();
142153
});
143154

155+
test('Should leave two releases if all of the releases are more than month old', async () => {
156+
/**
157+
* Clear collection after previous test
158+
*/
159+
await db.collection('releases').insertMany(mockedReleases);
160+
161+
const mockedReleasesLength = mockedReleases.length;
162+
163+
const worker = new ArchiverWorker();
164+
165+
await worker.start();
166+
167+
await worker['removeOldReleases'](mockedProject);
168+
169+
const newReleasesCollection = await db.collection('releases')
170+
.find({})
171+
.toArray();
172+
173+
expect(newReleasesCollection).toEqual([
174+
mockedReleases[mockedReleasesLength - 2],
175+
mockedReleases[mockedReleasesLength - 1],
176+
])
177+
await worker.finish();
178+
})
179+
144180
afterAll(async () => {
145181
await db.dropCollection('releases');
146182
await db.dropCollection('projects');

0 commit comments

Comments
 (0)