Skip to content

Commit 87cc7f3

Browse files
authored
Fix environment variables casing bug (#604)
* fix env var casing bug * localize testing of casing to Windows * update test * update startApp tests too
1 parent ad99f5d commit 87cc7f3

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

src/eventHandlers/FunctionEnvironmentReloadHandler.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ export class FunctionEnvironmentReloadHandler extends EventHandler<
3535
logCategory: LogCategory.System,
3636
});
3737

38-
process.env = Object.assign({}, msg.environmentVariables);
38+
// reset existing env vars
39+
Object.keys(process.env).map((key) => delete process.env[key]);
40+
// set new env vars
41+
Object.assign(process.env, msg.environmentVariables);
3942

4043
// Change current working directory
4144
if (msg.functionAppDirectory) {

test/eventHandlers/FunctionEnvironmentReloadHandler.test.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ describe('FunctionEnvironmentReloadHandler', () => {
7474
let originalEnv: NodeJS.ProcessEnv;
7575
let originalCwd: string;
7676
before(() => {
77+
originalEnv = { ...process.env };
7778
originalCwd = process.cwd();
78-
originalEnv = process.env;
7979
({ stream, channel } = beforeEventHandlerSuite());
8080
channel.hostVersion = '2.7.0';
8181
});
8282

8383
after(() => {
84-
process.env = originalEnv;
84+
Object.assign(process.env, originalEnv);
8585
});
8686

8787
afterEach(async () => {
@@ -108,6 +108,32 @@ describe('FunctionEnvironmentReloadHandler', () => {
108108
expect(process.env.PlaceholderVariable).to.be.undefined;
109109
});
110110

111+
it('preserves OS-specific casing behavior of environment variables', async () => {
112+
process.env.PlaceholderVariable = 'TRUE';
113+
stream.addTestMessage({
114+
requestId: 'id',
115+
functionEnvironmentReloadRequest: {
116+
environmentVariables: {
117+
hello: 'world',
118+
SystemDrive: 'Q:',
119+
},
120+
functionAppDirectory: null,
121+
},
122+
});
123+
await stream.assertCalledWith(Msg.reloadEnvVarsLog(2), Msg.reloadSuccess);
124+
expect(process.env.hello).to.equal('world');
125+
expect(process.env.SystemDrive).to.equal('Q:');
126+
expect(process.env.PlaceholderVariable).to.be.undefined;
127+
expect(process.env.placeholdervariable).to.be.undefined;
128+
if (process.platform === 'win32') {
129+
expect(process.env.HeLlO).to.equal('world');
130+
expect(process.env.systemdrive).to.equal('Q:');
131+
} else {
132+
expect(process.env.HeLlO).to.be.undefined;
133+
expect(process.env.systemdrive).to.be.undefined;
134+
}
135+
});
136+
111137
it('reloading environment variables removes existing environment variables', async () => {
112138
process.env.PlaceholderVariable = 'TRUE';
113139
process.env.NODE_ENV = 'Debug';

test/startApp.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ describe('startApp', () => {
4848

4949
before(async () => {
5050
originalCwd = process.cwd();
51-
originalEnv = process.env;
51+
originalEnv = { ...process.env };
5252
({ stream, channel } = beforeEventHandlerSuite());
5353
coreApi = await import('@azure/functions-core');
5454
});
5555

5656
after(() => {
57-
process.env = originalEnv;
57+
Object.assign(process.env, originalEnv);
5858
});
5959

6060
afterEach(async () => {

0 commit comments

Comments
 (0)