Browse Source

Update crons service tests

tumao 3 years ago
parent
commit
7a85f16fe6

+ 39 - 12
express/src/__tests__/crons/crons.service.test.ts

@@ -24,6 +24,9 @@ jest.mock('node-cron', () => {
 const mockCronFrequency = '30 00 * * *';
 const mockCronFrequency = '30 00 * * *';
 const mockCronEverySec = '* * * * * *';
 const mockCronEverySec = '* * * * * *';
 const mockCb = jest.fn();
 const mockCb = jest.fn();
+const mockErrCb = jest.fn(() => {
+  throw new Error('error');
+});
 const mockName = 'j1';
 const mockName = 'j1';
 const mockSecName = 'everySec';
 const mockSecName = 'everySec';
 
 
@@ -36,14 +39,18 @@ describe('test crons service', () => {
   const handleStartTask = jest.fn();
   const handleStartTask = jest.fn();
   const handleEndTask = jest.fn();
   const handleEndTask = jest.fn();
 
 
-  beforeAll(async () => {
-    // setup Milvus service and connect to mock Milvus client
+  const setup = async () => {
     milvusService = new MilvusService();
     milvusService = new MilvusService();
     await milvusService.connectMilvus(mockAddress);
     await milvusService.connectMilvus(mockAddress);
     collectionService = new CollectionsService(milvusService);
     collectionService = new CollectionsService(milvusService);
 
 
     schedulerRegistry = new SchedulerRegistry([]);
     schedulerRegistry = new SchedulerRegistry([]);
     cronsService = new CronsService(collectionService, schedulerRegistry);
     cronsService = new CronsService(collectionService, schedulerRegistry);
+  };
+
+  beforeAll(async () => {
+    // setup Milvus service and connect to mock Milvus client
+    await setup();
   });
   });
 
 
   beforeEach(() => {
   beforeEach(() => {
@@ -85,6 +92,13 @@ describe('test crons service', () => {
 
 
     schedulerRegistry.setCronJob(mockName, mockCronFrequency, () => mockCb());
     schedulerRegistry.setCronJob(mockName, mockCronFrequency, () => mockCb());
     expect(handleEndTask).toBeCalled();
     expect(handleEndTask).toBeCalled();
+
+    schedulerRegistry.setCronJob(mockName, mockCronFrequency, () =>
+      mockErrCb()
+    );
+    expect(() => {
+      mockErrCb();
+    }).toThrow();
   });
   });
 
 
   test('test CronService related methods', async () => {
   test('test CronService related methods', async () => {
@@ -130,17 +144,30 @@ describe('test crons service', () => {
 
 
   test('test getCollections error', async () => {
   test('test getCollections error', async () => {
     // reset setup to trigger error
     // reset setup to trigger error
-    cronsService = new CronsService(null, schedulerRegistry);
-
-    try {
-      await cronsService.toggleCronJobByName({
-        name: WS_EVENTS.COLLECTION,
-        type: WS_EVENTS_TYPE.START,
-      });
-    } catch (err) {
-      expect(err).toBeDefined();
-    }
+    // jest.mock('../../collections/collections.service', () => {
+    //   return {
+    //     CollectionService: jest.fn().mockImplementation((milvusService) => ({
+    //       getAllCollections: () => {
+    //         throw new Error('error');
+    //       },
+    //     })),
+    //   };
+    // });
+
+    // await setup();
+
+    const newCollectionService = new CollectionsService(milvusService);
+    const newSchedulerRegistry = new SchedulerRegistry([]);
+    newCollectionService.getAllCollections = () => {
+      throw new Error('error');
+    };
+
+    const newCronsService = new CronsService(
+      newCollectionService,
+      newSchedulerRegistry
+    );
 
 
+    await newCronsService.getCollections(WS_EVENTS.COLLECTION);
     expect(schedule).toBeCalledWith(mockCronEverySec, expect.any(Function));
     expect(schedule).toBeCalledWith(mockCronEverySec, expect.any(Function));
   });
   });
 });
 });

+ 6 - 4
express/src/crons/crons.service.ts

@@ -42,10 +42,12 @@ export class CronsService {
         return res;
         return res;
       } catch (error) {
       } catch (error) {
         // When user not connect milvus, stop cron
         // When user not connect milvus, stop cron
-        this.toggleCronJobByName({
-          name: WS_EVENTS.COLLECTION,
-          type: WS_EVENTS_TYPE.STOP,
-        });
+        // this.toggleCronJobByName({
+        //   name: WS_EVENTS.COLLECTION,
+        //   type: WS_EVENTS_TYPE.STOP,
+        // });
+        const cronJobEntity = this.schedulerRegistry.getCronJob(name);
+        cronJobEntity && cronJobEntity.stop();
         throw new Error(error);
         throw new Error(error);
       }
       }
     };
     };