From 2c88ecb383e8b2435f904554bea6b3d4fe9aa4e5 Mon Sep 17 00:00:00 2001 From: Wallace Breza Date: Mon, 24 Jun 2019 16:57:13 -0700 Subject: [PATCH] fix: Ensures the correct SCM domain is found for uploading zip package --- src/armTemplates/resources/appInsights.ts | 2 +- .../resources/hostingEnvironment.ts | 2 +- src/armTemplates/resources/virtualNetwork.ts | 2 +- src/services/functionAppService.test.ts | 38 +++++++++++++++---- src/services/functionAppService.ts | 2 +- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/armTemplates/resources/appInsights.ts b/src/armTemplates/resources/appInsights.ts index 9e7df067..1223062f 100644 --- a/src/armTemplates/resources/appInsights.ts +++ b/src/armTemplates/resources/appInsights.ts @@ -1,5 +1,5 @@ import { ArmResourceTemplateGenerator, ArmResourceTemplate } from "../../models/armTemplates"; -import { ServerlessAzureConfig, ResourceConfig } from "../../models/serverless"; +import { ServerlessAzureConfig } from "../../models/serverless"; export class AppInsightsResource implements ArmResourceTemplateGenerator { public static getResourceName(config: ServerlessAzureConfig) { diff --git a/src/armTemplates/resources/hostingEnvironment.ts b/src/armTemplates/resources/hostingEnvironment.ts index f7854857..0591002e 100644 --- a/src/armTemplates/resources/hostingEnvironment.ts +++ b/src/armTemplates/resources/hostingEnvironment.ts @@ -1,5 +1,5 @@ import { ArmResourceTemplateGenerator, ArmResourceTemplate } from "../../models/armTemplates"; -import { ServerlessAzureConfig, ResourceConfig } from "../../models/serverless"; +import { ServerlessAzureConfig } from "../../models/serverless"; export class HostingEnvironmentResource implements ArmResourceTemplateGenerator { public static getResourceName(config: ServerlessAzureConfig) { diff --git a/src/armTemplates/resources/virtualNetwork.ts b/src/armTemplates/resources/virtualNetwork.ts index b93448b0..9c1feff0 100644 --- a/src/armTemplates/resources/virtualNetwork.ts +++ b/src/armTemplates/resources/virtualNetwork.ts @@ -1,5 +1,5 @@ import { ArmResourceTemplateGenerator, ArmResourceTemplate } from "../../models/armTemplates"; -import { ServerlessAzureConfig, ResourceConfig } from "../../models/serverless"; +import { ServerlessAzureConfig } from "../../models/serverless"; export class VirtualNetworkResource implements ArmResourceTemplateGenerator { public static getResourceName(config: ServerlessAzureConfig) { diff --git a/src/services/functionAppService.test.ts b/src/services/functionAppService.test.ts index 51aa5278..03b135ea 100644 --- a/src/services/functionAppService.test.ts +++ b/src/services/functionAppService.test.ts @@ -13,7 +13,6 @@ import { ArmDeployment, ArmTemplateType } from "../models/armTemplates"; jest.mock("@azure/arm-resources") describe("Function App Service", () => { - const app = MockFactory.createTestSite(); const slsService = MockFactory.createTestService(); const variables = MockFactory.createTestVariables(); @@ -31,12 +30,8 @@ describe("Function App Service", () => { const authKeyUrl = `${baseUrl}${app.id}/functions/admin/token?api-version=2016-08-01`; const syncTriggersUrl = `${baseUrl}${app.id}/syncfunctiontriggers?api-version=2016-08-01`; const listFunctionsUrl = `${baseUrl}${app.id}/functions?api-version=2016-08-01`; - const scmDomain = app.enabledHostNames.find((hostname) => hostname.endsWith("scm.azurewebsites.net")); - const uploadUrl = `https://${scmDomain}/api/zipdeploy/`; beforeAll(() => { - - // TODO: How to spy on default exported function? const axiosMock = new MockAdapter(axios); // Master Key @@ -59,7 +54,6 @@ describe("Function App Service", () => { }); beforeEach(() => { - WebSiteManagementClient.prototype.webApps = { get: jest.fn(() => app), deleteFunction: jest.fn(), @@ -197,11 +191,41 @@ describe("Function App Service", () => { }); it("uploads functions", async () => { + const scmDomain = app.enabledHostNames.find((hostname) => hostname.endsWith("scm.azurewebsites.net")); + const expectedUploadUrl = `https://${scmDomain}/api/zipdeploy/`; + const service = createService(); await service.uploadFunctions(app); + + expect((FunctionAppService.prototype as any).sendFile).toBeCalledWith({ + method: "POST", + uri: expectedUploadUrl, + json: true, + headers: { + Authorization: `Bearer ${variables["azureCredentials"].tokenCache._entries[0].accessToken}`, + Accept: "*/*", + ContentType: "application/octet-stream", + } + }, slsService["artifact"]) + }); + + it("uploads functions with custom SCM domain (aka App service environments)", async () => { + const customApp = { + ...MockFactory.createTestSite("CustomAppWithinASE"), + enabledHostNames: [ + "myapi.customase.p.azurewebsites.net", + "myapi.scm.customase.p.azurewebsites.net" + ], + } + + const expectedUploadUrl = `https://${customApp.enabledHostNames[1]}/api/zipdeploy/`; + + const service = createService(); + await service.uploadFunctions(customApp); + expect((FunctionAppService.prototype as any).sendFile).toBeCalledWith({ method: "POST", - uri: uploadUrl, + uri: expectedUploadUrl, json: true, headers: { Authorization: `Bearer ${variables["azureCredentials"].tokenCache._entries[0].accessToken}`, diff --git a/src/services/functionAppService.ts b/src/services/functionAppService.ts index b4d26f63..e83fd6dc 100644 --- a/src/services/functionAppService.ts +++ b/src/services/functionAppService.ts @@ -241,7 +241,7 @@ export class FunctionAppService extends BaseService { */ private getScmDomain(functionApp: Site) { return functionApp.enabledHostNames.find((hostName: string) => { - return hostName.endsWith("scm.azurewebsites.net"); + return hostName.includes(".scm.") && hostName.endsWith(".azurewebsites.net"); }); } }