From 0131ccb563d06ccfc91574b0d8eedd866fac98f0 Mon Sep 17 00:00:00 2001 From: Richard Petersen <richard.petersen@open-xchange.com> Date: Thu, 5 May 2022 10:54:11 +0200 Subject: [PATCH] fixed: OXUIB-1621 /meta does not work with disabled redis --- spec/meta_test.js | 33 +++++++++++++++++++++++++++++++++ src/cache.js | 6 ++++++ src/meta.js | 6 +++--- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/spec/meta_test.js b/spec/meta_test.js index 264e8d2..4ff9221 100644 --- a/spec/meta_test.js +++ b/spec/meta_test.js @@ -73,6 +73,7 @@ describe('Responses contain custom headers', function () { }) it('does not have metadata from ui service when unavailable', async function () { + await import('../src/cache.js').then(({ clear }) => clear()) const response = await request(app).get('/meta') expect(response.statusCode).to.equal(200) expect(response.body).to.not.deep.contain({ @@ -81,4 +82,36 @@ describe('Responses contain custom headers', function () { }) }) }) + + describe('without redis disabled', function () { + let prevConfig + + beforeEach(async function () { + td.reset() + mockConfig({ urls: ['http://ui-server/'] }) + mockFetch(fetchConfig = { + 'http://ui-server': { + '/manifest.json': generateSimpleViteManifest({ + 'example.js': {} + }), + '/example.js': () => new Response('this is example', { headers: { 'content-type': 'application/javascript' } }), + '/meta.json': { name: 'sample-service', version: '1.0' } + } + }) + app = await mockApp() + }) + + afterEach(function () { + fetchConfig['http://ui-server'] = prevConfig + }) + + it('has metadata', async function () { + const response = await request(app).get('/meta') + expect(response.statusCode).to.equal(200) + expect(response.body).to.deep.contain({ + name: 'sample-service', + version: '1.0' + }) + }) + }) }) diff --git a/src/cache.js b/src/cache.js index 523b798..a781e29 100644 --- a/src/cache.js +++ b/src/cache.js @@ -14,6 +14,12 @@ export async function getBuffer (key) { return get(key, { method: 'getBuffer' }) } +export async function clear () { + for (const prop of Object.getOwnPropertyNames(cache)) { + delete cache[prop] + } +} + export async function get (key, { method = 'get' } = {}) { if (cache[key]) return cache[key] diff --git a/src/meta.js b/src/meta.js index 5aadcc1..3bc63ab 100644 --- a/src/meta.js +++ b/src/meta.js @@ -1,10 +1,10 @@ import { config } from './config.js' import fetch from 'node-fetch' -import { client } from './redis.js' +import * as cache from './cache.js' import { getRedisKey } from './util.js' export async function getMergedMetadata ({ version }) { - const metadata = await client.get(getRedisKey({ version, name: 'mergedMetadata' })) + const metadata = await cache.get(getRedisKey({ version, name: 'mergedMetadata' })) if (metadata) return JSON.parse(metadata) await config.load() @@ -29,6 +29,6 @@ export async function getMergedMetadata ({ version }) { // only return when contains data const filtered = newMetadata.filter(Boolean) - await client.set(getRedisKey({ version, name: 'mergedMetadata' }), JSON.stringify(filtered)) + await cache.set(getRedisKey({ version, name: 'mergedMetadata' }), JSON.stringify(filtered)) return filtered } -- GitLab