From 4de00ead3887a1dd8307745b1ab46d3e40a1f58a Mon Sep 17 00:00:00 2001 From: Taras Date: Tue, 16 Feb 2021 09:00:17 -0500 Subject: [PATCH] Report errors when creating AzureBlobPublisher and requirements are not satisfied --- .../__mocks__/@azure/storage-blob.ts | 16 ++++++-- .../stages/publish/azureBlobStorage.test.ts | 13 +++++- .../src/stages/publish/azureBlobStorage.ts | 40 ++++++++----------- 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/packages/techdocs-common/__mocks__/@azure/storage-blob.ts b/packages/techdocs-common/__mocks__/@azure/storage-blob.ts index 29f3178efb..6633a71b2c 100644 --- a/packages/techdocs-common/__mocks__/@azure/storage-blob.ts +++ b/packages/techdocs-common/__mocks__/@azure/storage-blob.ts @@ -29,7 +29,9 @@ export class BlockBlobClient { uploadFile(source: string): Promise { return Promise.resolve({ _response: { - request: {} as any, + request: { + url: `https://example.blob.core.windows.net`, + } as any, status: 200, headers: {} as any, }, @@ -45,7 +47,9 @@ class BlockBlobClientFailUpload extends BlockBlobClient { uploadFile(source: string): Promise { return Promise.resolve({ _response: { - request: {} as any, + request: { + url: `https://example.blob.core.windows.net`, + } as any, status: 500, headers: {} as any, }, @@ -63,7 +67,9 @@ export class ContainerClient { getProperties(): Promise { return Promise.resolve({ _response: { - request: {} as any, + request: { + url: `https://example.blob.core.windows.net`, + } as any, status: 200, headers: {} as any, parsedHeaders: {}, @@ -80,7 +86,9 @@ class ContainerClientFailGetProperties extends ContainerClient { getProperties(): Promise { return Promise.resolve({ _response: { - request: {} as any, + request: { + url: `https://example.blob.core.windows.net`, + } as any, status: 404, headers: {} as any, parsedHeaders: {}, diff --git a/packages/techdocs-common/src/stages/publish/azureBlobStorage.test.ts b/packages/techdocs-common/src/stages/publish/azureBlobStorage.test.ts index b37d6c9379..baeb644301 100644 --- a/packages/techdocs-common/src/stages/publish/azureBlobStorage.test.ts +++ b/packages/techdocs-common/src/stages/publish/azureBlobStorage.test.ts @@ -173,10 +173,19 @@ describe('error reporting', () => { const logger = createLogger(); - publisher = await AzureBlobStoragePublish.fromConfig(mockConfig, logger); + let error; + try { + publisher = await AzureBlobStoragePublish.fromConfig(mockConfig, logger); + } catch (e) { + error = e; + } + + expect(error).toBeInstanceOf(Error); expect(logger.error).toHaveBeenCalledWith( - `Could not read Azure Blob Storage container properties`, + expect.stringContaining( + `Could not retrieve metadata about the Azure Blob Storage container bad_container.`, + ), ); }); diff --git a/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts b/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts index b0b2bfd855..f73417156a 100644 --- a/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts +++ b/packages/techdocs-common/src/stages/publish/azureBlobStorage.ts @@ -79,31 +79,25 @@ export class AzureBlobStoragePublish implements PublisherBase { credential, ); - await storageClient - .getContainerClient(containerName) - .getProperties() - .then(result => { - if (result?._response?.status >= 400) { - logger.error( - 'Could not read Azure Blob Storage container properties', - ); - } else { - logger.info( - `Successfully connected to the Azure Blob Storage container ${containerName}.`, - ); - } - }) - .catch(reason => { - logger.error( - `Could not retrieve metadata about the Azure Blob Storage container ${containerName}. ` + - 'Make sure that the Azure project and container exist and the access key is setup correctly ' + - 'techdocs.publisher.azureBlobStorage.credentials defined in app config has correct permissions. ' + - 'Refer to https://backstage.io/docs/features/techdocs/using-cloud-storage', - ); + try { + const metadata = await storageClient + .getContainerClient(containerName) + .getProperties(); + + if (metadata._response.status >= 400) { throw new Error( - `from Azure Blob Storage client library: ${reason.message}`, + `Failed to retrieve metadata from ${metadata._response.request.url} with status code ${metadata._response.status}.`, ); - }); + } + } catch (e) { + logger.error( + `Could not retrieve metadata about the Azure Blob Storage container ${containerName}. ` + + 'Make sure that the Azure project and container exist and the access key is setup correctly ' + + 'techdocs.publisher.azureBlobStorage.credentials defined in app config has correct permissions. ' + + 'Refer to https://backstage.io/docs/features/techdocs/using-cloud-storage', + ); + throw new Error(`from Azure Blob Storage client library: ${e.message}`); + } return new AzureBlobStoragePublish(storageClient, containerName, logger); }