diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.test.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.test.ts index af38b09935c77..88ebe4ac1284c 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.test.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.test.ts @@ -10,7 +10,7 @@ import type { DomainDeprecationDetails } from '@kbn/core/server'; import { getKibanaUpgradeStatus } from './kibana_status'; -const mockKibanaDeprecations: DomainDeprecationDetails[] = [ +const mockKibanaDeprecations = (): DomainDeprecationDetails[] => [ { title: 'mock-deprecation-title', correctiveActions: { @@ -31,7 +31,7 @@ const mockKibanaDeprecations: DomainDeprecationDetails[] = [ describe('getKibanaUpgradeStatus', () => { const deprecationsClient = deprecationsServiceMock.createClient(); - deprecationsClient.getAllDeprecations.mockResolvedValue(mockKibanaDeprecations); + deprecationsClient.getAllDeprecations.mockResolvedValue(mockKibanaDeprecations()); it('returns the correct shape of data', async () => { const resp = await getKibanaUpgradeStatus(deprecationsClient); @@ -39,7 +39,7 @@ describe('getKibanaUpgradeStatus', () => { }); it('returns totalCriticalDeprecations > 0 when critical issues found', async () => { - deprecationsClient.getAllDeprecations.mockResolvedValue(mockKibanaDeprecations); + deprecationsClient.getAllDeprecations.mockResolvedValue(mockKibanaDeprecations()); await expect(getKibanaUpgradeStatus(deprecationsClient)).resolves.toHaveProperty( 'totalCriticalDeprecations', @@ -55,4 +55,98 @@ describe('getKibanaUpgradeStatus', () => { 0 ); }); + + it('returns totalCriticalDeprecations > 0, but ignores API deprecations', async () => { + deprecationsClient.getAllDeprecations.mockResolvedValue([ + ...mockKibanaDeprecations(), + ...mockKibanaDeprecations(), + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'warning', + message: 'testMessage', + domainId: 'security', + }, + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'critical', + message: 'testMessage', + domainId: 'security', + }, + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'critical', + message: 'testMessage', + domainId: 'security', + }, + ]); + + await expect(getKibanaUpgradeStatus(deprecationsClient)).resolves.toHaveProperty( + 'totalCriticalDeprecations', + 2 + ); + }); + + it('returns totalCriticalDeprecations === 0 when only critical API deprecations', async () => { + deprecationsClient.getAllDeprecations.mockResolvedValue([ + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'warning', + message: 'testMessage', + domainId: 'security', + }, + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'critical', + message: 'testMessage', + domainId: 'security', + }, + { + title: 'mock-deprecation-title', + correctiveActions: { + manualSteps: [], + }, + apiId: 'foo', + deprecationType: 'api', + documentationUrl: 'testDocUrl', + level: 'critical', + message: 'testMessage', + domainId: 'security', + }, + ]); + + await expect(getKibanaUpgradeStatus(deprecationsClient)).resolves.toHaveProperty( + 'totalCriticalDeprecations', + 0 + ); + }); }); diff --git a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.ts b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.ts index dd07e2761b5cc..3b8b34fd573bd 100644 --- a/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.ts +++ b/x-pack/platform/plugins/private/upgrade_assistant/server/lib/kibana_status.ts @@ -11,7 +11,9 @@ export const getKibanaUpgradeStatus = async (deprecationsClient: DeprecationsCli const kibanaDeprecations: DomainDeprecationDetails[] = await deprecationsClient.getAllDeprecations(); - const totalCriticalDeprecations = kibanaDeprecations.filter((d) => d.level === 'critical').length; + const totalCriticalDeprecations = kibanaDeprecations.filter( + (d) => d.deprecationType !== 'api' && d.level === 'critical' + ).length; return { totalCriticalDeprecations, diff --git a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/api_deprecations.ts b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/api_deprecations.ts index 6a0f8aad4686e..d29435ce35843 100644 --- a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/api_deprecations.ts +++ b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/api_deprecations.ts @@ -42,13 +42,13 @@ export default function ({ getService }: FtrProviderContext) { // await kibanaServer.savedObjects.cleanStandardList(); await esArchiver.emptyKibanaIndex(); }); - it('returns does not return api deprecations if the routes are not called', async () => { + it('does not return api deprecations if deprecated routes are not called', async () => { const { deprecations } = (await supertest.get(`/api/deprecations/`).expect(200)).body; const apiDeprecations = getApiDeprecations(deprecations); expect(apiDeprecations.length).to.equal(0); }); - it('returns deprecated APIs when the api is called', async () => { + it('returns deprecated APIs when a deprecated api is called', async () => { await supertest .get(`/internal/routing_example/d/internal_versioned_route?apiVersion=1`) .expect(200); @@ -206,6 +206,25 @@ export default function ({ getService }: FtrProviderContext) { ); }); }); + it('GET /api/upgrade_assistant/status does not return { readyForUpgrade: false } if there are only critical API deprecations', async () => { + /** Throw in another critical deprecation... */ + await supertest.get(`/api/routing_example/d/removed_route`).expect(200); + // sleep a little until the usage counter is synced into ES + await setTimeoutAsync(3000); + await retry.tryForTime( + 15 * 1000, + async () => { + const { deprecations } = (await supertest.get(`/api/deprecations/`).expect(200)).body; + const apiDeprecations = getApiDeprecations(deprecations); + // confirm there is at least one CRITICAL deprecated API usage present + expect(apiDeprecations.some(({ level }) => level === 'critical')).to.be(true); + }, + undefined, + 2000 + ); + const { body } = await supertest.get(`/api/upgrade_assistant/status`).expect(200); + expect(body.readyForUpgrade).to.be(true); + }); }); } diff --git a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.ts b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.ts index ddc03dbde297a..b0676359409ec 100644 --- a/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.ts +++ b/x-pack/test/upgrade_assistant_integration/upgrade_assistant/index.ts @@ -8,9 +8,9 @@ import { FtrProviderContext } from '../../common/ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { - // FAILING VERSION BUMP: https://github.com/elastic/kibana/issues/209048 - describe.skip('upgrade assistant', function () { - loadTestFile(require.resolve('./reindexing')); + describe('upgrade assistant', function () { + // FAILING VERSION BUMP: https://github.com/elastic/kibana/issues/209048 + // loadTestFile(require.resolve('./reindexing')); loadTestFile(require.resolve('./api_deprecations')); }); }