From f846deaae3f311c35a774caf005b7718d1735f92 Mon Sep 17 00:00:00 2001 From: jack092123 Date: Tue, 26 Jan 2021 01:04:19 +0800 Subject: [PATCH] Fix schemaCacheTTL ParseServerOption is not working (#7138) * Add Test case for checking SchemaCacheTTL * Fix schemaCacheTTL not working issue * Add Test case for TTL expires Co-authored-by: Roach Chang --- spec/SchemaCache.spec.js | 29 +++++++++++++++++++++++++++++ src/Controllers/SchemaCache.js | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/spec/SchemaCache.spec.js b/spec/SchemaCache.spec.js index 5a4a5173..e62ac8ab 100644 --- a/spec/SchemaCache.spec.js +++ b/spec/SchemaCache.spec.js @@ -72,4 +72,33 @@ describe('SchemaCache', () => { const schemaCache = new SchemaCache(cacheController, ttl); expect(schemaCache.ttl).toBe(5000); }); + + it('should use the SchemaCache ttl', async () => { + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + + const anotherCacheAdapter = new InMemoryCacheAdapter({ ttl: 2000 }); + const anotherCacheController = new CacheController(anotherCacheAdapter, 'appId'); + + const schemaCacheTTL = 5000; + const schemaCache = new SchemaCache(anotherCacheController, schemaCacheTTL, true); + const schema = { + className: 'Class1', + }; + await schemaCache.setAllClasses([schema]); + await sleep(4000); + expect(await schemaCache.getOneSchema(schema.className)).not.toBeNull(); + }); + + it('should be expired', async () => { + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + + const schemaCacheTTL = 2000; + const schemaCache = new SchemaCache(cacheController, schemaCacheTTL, true); + const schema = { + className: 'Class1', + }; + await schemaCache.setAllClasses([schema]); + await sleep(3000); + expect(await schemaCache.getOneSchema(schema.className)).toBeNull(); + }); }); diff --git a/src/Controllers/SchemaCache.js b/src/Controllers/SchemaCache.js index 9fe79daa..48f1f77f 100644 --- a/src/Controllers/SchemaCache.js +++ b/src/Controllers/SchemaCache.js @@ -30,7 +30,7 @@ export default class SchemaCache { if (!this.ttl) { return Promise.resolve(null); } - return this.cache.put(this.prefix + MAIN_SCHEMA, schema); + return this.cache.put(this.prefix + MAIN_SCHEMA, schema, this.ttl); } getOneSchema(className) {