Skip to content

Commit a721f97

Browse files
committed
Misc
1 parent d689816 commit a721f97

File tree

5 files changed

+56
-44
lines changed

5 files changed

+56
-44
lines changed

src/commands/ingress/tryConfigureIngressUsingDockerfile.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export async function tryConfigureIngressUsingDockerfile(context: IngressContext
1414
return;
1515
}
1616

17-
context.dockerfileExposePorts = await getDockerfileExposePort(context.dockerfilePath);
17+
context.dockerfileExposePorts = await getDockerfileExposePorts(context.dockerfilePath);
1818

1919
if (context.alwaysPromptIngress) {
2020
return;
@@ -70,7 +70,7 @@ export class PortRange {
7070
}
7171
}
7272

73-
export async function getDockerfileExposePort(dockerfilePath: string): Promise<PortRange[] | undefined> {
73+
export async function getDockerfileExposePorts(dockerfilePath: string): Promise<PortRange[] | undefined> {
7474
if (!await AzExtFsExtra.pathExists(dockerfilePath)) {
7575
return undefined;
7676
}
@@ -80,19 +80,21 @@ export async function getDockerfileExposePort(dockerfilePath: string): Promise<P
8080

8181
const portRanges: PortRange[] = [];
8282
for (const line of lines) {
83-
if (/^EXPOSE/i.test(line.trim())) {
84-
// Identify all single port numbers that aren't for udp
85-
const singlePorts: string[] = line.match(/(?<=\s)\d{2,5}(?!(\-)|(\/udp))\b/g) ?? [];
86-
for (const sp of singlePorts) {
87-
portRanges.push(new PortRange(parseInt(sp)));
88-
}
89-
90-
// Identify all port ranges
91-
const portRange: string[] = line.match(/\d{2,5}\-\d{2,5}/g) ?? [];
92-
for (const pr of portRange) {
93-
const [start, end] = pr.split('-');
94-
portRanges.push(new PortRange(parseInt(start), parseInt(end)));
95-
}
83+
if (!/^EXPOSE/i.test(line.trim())) {
84+
continue;
85+
}
86+
87+
// Identify all single port numbers that aren't for udp
88+
const singlePorts: string[] = line.match(/(?<=\s)\d{2,5}(?!(\-)|(\/udp))\b/g) ?? [];
89+
for (const sp of singlePorts) {
90+
portRanges.push(new PortRange(parseInt(sp)));
91+
}
92+
93+
// Identify all port ranges
94+
const portRange: string[] = line.match(/\d{2,5}\-\d{2,5}/g) ?? [];
95+
for (const pr of portRange) {
96+
const [start, end] = pr.split('-');
97+
portRanges.push(new PortRange(parseInt(start), parseInt(end)));
9698
}
9799
}
98100

test/ingress/dockerfileSamples/sample1.Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ FROM node:15-alpine
33

44
COPY . /src
55
RUN cd /src && npm install
6-
EXPOSE 80 443
6+
EXPOSE 443 80
77
CMD ["node", "/src/server.js"]

test/ingress/dockerfileSamples/sample5.Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ FROM node:15-alpine
33

44
COPY . /src
55
RUN cd /src && npm install
6-
EXPOSE 80/tcp
6+
EXPOSE 443/tcp
77
EXPOSE 5000/udp
88
CMD ["node", "/src/server.js"]

test/ingress/getDefaultPort.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,29 @@ import { IngressContext, PortRange, getDefaultPort } from "../../extension.bundl
88
import type { MockIngressContext } from "./MockIngressContext";
99

1010
suite('getDefaultPort', async () => {
11-
test('correctly suggests a new port when Dockerfile expose ports are detected with no existing container app port', async () => {
11+
test('Correctly suggests a new port when Dockerfile expose ports are detected with no existing container app port', async () => {
1212
const context: MockIngressContext = {
1313
dockerfileExposePorts: [new PortRange(443), new PortRange(8080, 8090)]
1414
};
1515
assert.equal(getDefaultPort(context as IngressContext), 443);
1616
});
1717

18-
test('correctly suggests deployed port when Dockerfile expose ports are detected that overlap with existing container app port', async () => {
18+
test('Correctly suggests deployed port when Dockerfile expose ports are detected that overlap with existing container app port', async () => {
1919
const context: MockIngressContext = {
2020
containerApp: { configuration: { ingress: { targetPort: 8081 } } },
2121
dockerfileExposePorts: [new PortRange(80), new PortRange(443), new PortRange(8080, 8090)]
2222
};
2323
assert.equal(getDefaultPort(context as IngressContext), 8081);
2424
});
2525

26-
test('correctly suggests existing deploy port when no expose ports are detected', async () => {
26+
test('Correctly suggests existing deploy port when no expose ports are detected', async () => {
2727
const context: MockIngressContext = {
2828
containerApp: { configuration: { ingress: { targetPort: 3000 } } },
2929
};
3030
assert.equal(getDefaultPort(context as IngressContext), 3000);
3131
});
3232

33-
test('correctly suggests fallback port when no other ports are available', async () => {
33+
test('Correctly suggests fallback port when no other ports are available', async () => {
3434
assert.equal(getDefaultPort({} as IngressContext), 80);
3535
});
3636
});

test/ingress/tryConfigureIngressUsingDockerfile.test.ts

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,32 @@
66
import { AzExtFsExtra } from "@microsoft/vscode-azext-utils";
77
import * as assert from "assert";
88
import * as path from "path";
9-
import { IngressContext, PortRange, getDockerfileExposePort, tryConfigureIngressUsingDockerfile } from "../../extension.bundle";
9+
import { IngressContext, PortRange, getDockerfileExposePorts, tryConfigureIngressUsingDockerfile } from "../../extension.bundle";
1010
import type { MockIngressContext } from "./MockIngressContext";
1111

12+
const expectedSamplePorts: PortRange[][] = [
13+
[new PortRange(443), new PortRange(80)],
14+
[new PortRange(80), new PortRange(443)],
15+
[new PortRange(80), new PortRange(8080, 8090)],
16+
[new PortRange(80), new PortRange(8080, 8090)],
17+
[new PortRange(443)],
18+
[new PortRange(80), new PortRange(443), new PortRange(8080, 8090)],
19+
[]
20+
];
21+
1222
suite('tryConfigureIngressUsingDockerfile', async () => {
1323
test('self', async () => {
1424
const dockerfileSamplesPath: string = path.join(__dirname, 'dockerfileSamples');
1525
const dockerfileSamples = await AzExtFsExtra.readDirectory(dockerfileSamplesPath);
1626

17-
const expectedResult = [
18-
{ enableIngress: true, enableExternal: true },
19-
{ enableIngress: undefined, enableExternal: undefined }, // no dockerfilePath
20-
{ enableIngress: true, enableExternal: true },
21-
{ enableIngress: undefined, enableExternal: undefined }, // alwaysPromptIngress
22-
{ enableIngress: true, enableExternal: true },
23-
{ enableIngress: true, enableExternal: true },
24-
{ enableIngress: false, enableExternal: false },
27+
const expectedResult: MockIngressContext[] = [
28+
{ enableIngress: true, enableExternal: true, dockerfileExposePorts: expectedSamplePorts[0], targetPort: 443 },
29+
{ enableIngress: undefined, enableExternal: undefined, dockerfileExposePorts: undefined, targetPort: undefined }, // no dockerfilePath
30+
{ enableIngress: true, enableExternal: true, dockerfileExposePorts: expectedSamplePorts[2], targetPort: 80 },
31+
{ enableIngress: undefined, enableExternal: undefined, dockerfileExposePorts: expectedSamplePorts[3], targetPort: undefined }, // alwaysPromptIngress
32+
{ enableIngress: true, enableExternal: true, dockerfileExposePorts: expectedSamplePorts[4], targetPort: 443 },
33+
{ enableIngress: true, enableExternal: true, dockerfileExposePorts: expectedSamplePorts[5], targetPort: 80 },
34+
{ enableIngress: false, enableExternal: false, dockerfileExposePorts: undefined, targetPort: undefined }, // no expose
2535
];
2636

2737
for (const [i, ds] of dockerfileSamples.entries()) {
@@ -32,30 +42,30 @@ suite('tryConfigureIngressUsingDockerfile', async () => {
3242

3343
await tryConfigureIngressUsingDockerfile(context as IngressContext);
3444

35-
assert.deepStrictEqual({ enableIngress: context.enableIngress, enableExternal: context.enableExternal }, expectedResult[i])
45+
assert.deepStrictEqual({
46+
enableIngress: context.enableIngress,
47+
enableExternal: context.enableExternal,
48+
dockerfileExposePortsLength: context.dockerfileExposePorts?.length,
49+
targetPort: context.targetPort
50+
}, {
51+
enableIngress: expectedResult[i].enableIngress,
52+
enableExternal: expectedResult[i].enableExternal,
53+
dockerfileExposePortsLength: expectedResult[i].dockerfileExposePorts?.length,
54+
targetPort: expectedResult[i].targetPort
55+
});
3656
}
3757
});
3858

3959
test('getDockerfileExposePorts', async () => {
4060
const dockerfileSamplesPath: string = path.join(__dirname, 'dockerfileSamples');
4161
const dockerfileSamples = await AzExtFsExtra.readDirectory(dockerfileSamplesPath);
4262

43-
const expectedResult: PortRange[][] = [
44-
[new PortRange(80), new PortRange(443)],
45-
[new PortRange(80), new PortRange(443)],
46-
[new PortRange(80), new PortRange(8080, 8090)],
47-
[new PortRange(80), new PortRange(8080, 8090)],
48-
[new PortRange(80)],
49-
[new PortRange(80), new PortRange(443), new PortRange(8080, 8090)],
50-
[]
51-
];
52-
5363
for (const [i, ds] of dockerfileSamples.entries()) {
54-
const portRange: PortRange[] = await getDockerfileExposePort(ds.fsPath) ?? [];
64+
const portRange: PortRange[] = await getDockerfileExposePorts(ds.fsPath) ?? [];
5565

5666
for (const [j, pr] of portRange.entries()) {
57-
assert.equal(pr.start, expectedResult[i][j].start);
58-
assert.equal(pr.end, expectedResult[i][j].end);
67+
assert.equal(pr.start, expectedSamplePorts[i][j].start);
68+
assert.equal(pr.end, expectedSamplePorts[i][j].end);
5969
}
6070
}
6171
});

0 commit comments

Comments
 (0)