Add unit tests for AWS URL reader read and readURL methods

Signed-off-by: Kiera Jost <kjost@splunk.com>
This commit is contained in:
Kiera Jost
2021-08-03 16:42:04 -06:00
committed by Sean Tan
parent 7a4b204780
commit 8f1b8587af
3 changed files with 122 additions and 0 deletions
+1
View File
@@ -93,6 +93,7 @@
"@types/tar": "^4.0.3",
"@types/unzipper": "^0.10.3",
"@types/webpack-env": "^1.15.2",
"aws-sdk-mock": "^5.2.1",
"get-port": "^5.1.1",
"http-errors": "^1.7.3",
"jest": "^26.0.1",
@@ -17,7 +17,14 @@ import { ConfigReader, JsonObject } from '@backstage/config';
import { getVoidLogger } from '../logging';
import { DefaultReadTreeResponseFactory } from './tree';
import { AwsS3UrlReader } from './AwsS3UrlReader';
import {
AwsS3Integration,
readAwsS3IntegrationConfig,
} from '@backstage/integration';
import { UrlReaderPredicateTuple } from './types';
import AWSMock from 'aws-sdk-mock';
import aws from 'aws-sdk';
import path from 'path';
describe('AwsS3UrlReader', () => {
const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => {
@@ -30,10 +37,15 @@ describe('AwsS3UrlReader', () => {
});
};
afterEach(() => {
AWSMock.restore();
});
it('creates a dummy reader without the awsS3 field', () => {
const entries = createReader({
integrations: {},
});
expect(entries).toHaveLength(1);
});
@@ -44,11 +56,13 @@ describe('AwsS3UrlReader', () => {
accessKeyId: 'fakekey',
secretAccessKey: 'fakekey',
});
const entries = createReader({
integrations: {
awsS3: awsS3Integrations,
},
});
expect(entries).toHaveLength(2);
});
@@ -57,11 +71,13 @@ describe('AwsS3UrlReader', () => {
awsS3Integrations.push({
host: 'amazonaws.com',
});
const entries = createReader({
integrations: {
awsS3: awsS3Integrations,
},
});
expect(entries).toHaveLength(2);
});
@@ -109,4 +125,108 @@ describe('AwsS3UrlReader', () => {
).toBe(true);
});
});
describe('read', () => {
AWSMock.setSDKInstance(aws);
AWSMock.mock(
'S3',
'getObject',
Buffer.from(
require('fs').readFileSync(
path.resolve(
'src',
'reading',
'__fixtures__',
'awsS3-mock-object.yaml',
),
),
),
);
const s3 = new aws.S3();
const awsS3UrlReader = new AwsS3UrlReader(
new AwsS3Integration(
readAwsS3IntegrationConfig(
new ConfigReader({
host: '.amazonaws.com',
accessKeyId: 'fake-access-key',
secretAccessKey: 'fake-secret-key',
}),
),
),
s3,
);
it('returns contents of an object in a bucket', async () => {
const response = await awsS3UrlReader.read(
'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml',
);
expect(response.toString()).toBe('site_name: Test\n');
});
it('rejects unknown targets', async () => {
await expect(
awsS3UrlReader.read(
'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml',
),
).rejects.toThrow(
Error(
`Could not retrieve file from S3: not a valid AWS S3 URL: https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`,
),
);
});
});
describe('readUrl', () => {
AWSMock.setSDKInstance(aws);
AWSMock.mock(
'S3',
'getObject',
Buffer.from(
require('fs').readFileSync(
path.resolve(
'src',
'reading',
'__fixtures__',
'awsS3-mock-object.yaml',
),
),
),
);
const s3 = new aws.S3();
const awsS3UrlReader = new AwsS3UrlReader(
new AwsS3Integration(
readAwsS3IntegrationConfig(
new ConfigReader({
host: '.amazonaws.com',
accessKeyId: 'fake-access-key',
secretAccessKey: 'fake-secret-key',
}),
),
),
s3,
);
it('returns contents of an object in a bucket', async () => {
const response = await awsS3UrlReader.readUrl(
'https://test-bucket.s3.us-east-2.amazonaws.com/awsS3-mock-object.yaml',
);
const buffer = await response.buffer();
expect(buffer.toString()).toBe('site_name: Test\n');
});
it('rejects unknown targets', async () => {
await expect(
awsS3UrlReader.readUrl(
'https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml',
),
).rejects.toThrow(
Error(
`Could not retrieve file from S3: not a valid AWS S3 URL: https://test-bucket.s3.us-east-2.NOTamazonaws.com/file.yaml`,
),
);
});
});
});
@@ -0,0 +1 @@
site_name: Test