Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ General:
- Performance improvements for internal metadata access using in-memory metadata store
- Fix building failure on Node 22 platform.
- Fix * IfMatch for non-existent resource not throwing 412 Precondition Failed
- Allow setting `--skipApiVersionCheck` via the `AZURITE_SKIP_API_VERSION_CHECK=true` environment variable

## 2025.07 Version 3.35.0

Expand Down
7 changes: 2 additions & 5 deletions src/blob/BlobEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
DEFAULT_BLOB_SERVER_HOST_NAME,
DEFAULT_BLOB_KEEP_ALIVE_TIMEOUT
} from "./utils/constants";
import { shouldSkipApiVersionCheck } from "../common/utils/utils";

if (!(args as any).config.name) {
args
Expand Down Expand Up @@ -112,11 +113,7 @@ export default class BlobEnvironment implements IBlobEnvironment {
}

public skipApiVersionCheck(): boolean {
if (this.flags.skipApiVersionCheck !== undefined) {
return true;
}
// default is false which will check API version
return false;
return shouldSkipApiVersionCheck(this.flags);
}

public cert(): string | undefined {
Expand Down
7 changes: 2 additions & 5 deletions src/common/Environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
} from "../table/utils/constants";

import IEnvironment from "./IEnvironment";
import { shouldSkipApiVersionCheck } from "./utils/utils";

args
.option(
Expand Down Expand Up @@ -173,11 +174,7 @@ export default class Environment implements IEnvironment {
}

public skipApiVersionCheck(): boolean {
if (this.flags.skipApiVersionCheck !== undefined) {
return true;
}
// default is false which will check API version
return false;
return shouldSkipApiVersionCheck(this.flags);
}

public disableProductStyleUrl(): boolean {
Expand Down
15 changes: 15 additions & 0 deletions src/common/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,18 @@ export async function getMD5FromStream(
});
});
}

/**
* Shared helper to determine whether API version checks should be skipped.
* This checks both CLI flags and the AZURITE_SKIP_API_VERSION_CHECK env var.
*/
export function shouldSkipApiVersionCheck(flags: any): boolean {
if (flags && flags.skipApiVersionCheck !== undefined) {
return true;
}
if (process.env.AZURITE_SKIP_API_VERSION_CHECK === "true") {
return true;
}
// default is false which will check API version
return false;
}
7 changes: 2 additions & 5 deletions src/queue/QueueEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
DEFAULT_QUEUE_LISTENING_PORT,
DEFAULT_QUEUE_SERVER_HOST_NAME
} from "./utils/constants";
import { shouldSkipApiVersionCheck } from "../common/utils/utils";

args
.option(
Expand Down Expand Up @@ -96,11 +97,7 @@ export default class QueueEnvironment implements IQueueEnvironment {
}

public skipApiVersionCheck(): boolean {
if (this.flags.skipApiVersionCheck !== undefined) {
return true;
}
// default is false which will check API version
return false;
return shouldSkipApiVersionCheck(this.flags);
}

public cert(): string | undefined {
Expand Down
15 changes: 7 additions & 8 deletions src/table/TableEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
DEFAULT_TABLE_SERVER_HOST_NAME,
DEFAULT_TABLE_KEEP_ALIVE_TIMEOUT
} from "./utils/constants";
import { shouldSkipApiVersionCheck } from "../common/utils/utils";

args
.option(
Expand All @@ -24,13 +25,13 @@ args
.option(
["", "tableKeepAliveTimeout"],
"Optional. Customize http keep alive timeout for table",
DEFAULT_TABLE_KEEP_ALIVE_TIMEOUT,
DEFAULT_TABLE_KEEP_ALIVE_TIMEOUT
)
.option(
["l", "location"],
"Optional. Use an existing folder as workspace path, default is current working directory",
"<cwd>",
s => s == "<cwd>" ? undefined : s
(s) => (s == "<cwd>" ? undefined : s)
)
.option(["s", "silent"], "Optional. Disable access log displayed in console")
.option(
Expand Down Expand Up @@ -104,11 +105,7 @@ export default class TableEnvironment implements ITableEnvironment {
}

public skipApiVersionCheck(): boolean {
if (this.flags.skipApiVersionCheck !== undefined) {
return true;
}
// default is false which will check API version
return false;
return shouldSkipApiVersionCheck(this.flags);
}

public disableProductStyleUrl(): boolean {
Expand All @@ -130,7 +127,9 @@ export default class TableEnvironment implements ITableEnvironment {
public inMemoryPersistence(): boolean {
if (this.flags.inMemoryPersistence !== undefined) {
if (this.flags.location) {
throw new RangeError(`The --inMemoryPersistence option is not supported when the --location option is set.`)
throw new RangeError(
`The --inMemoryPersistence option is not supported when the --location option is set.`
);
}
return true;
}
Expand Down
47 changes: 47 additions & 0 deletions tests/blob/blobEnvironment.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import * as assert from "assert";

import BlobEnvironment from "../../src/blob/BlobEnvironment";

describe("BlobEnvironment", () => {
const originalArgv = process.argv;

beforeEach(() => {
process.argv = ["node", "azurite-blob"];
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

afterEach(() => {
process.argv = originalArgv;
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

it("defaults skipApiVersionCheck to false @loki", () => {
const env = new BlobEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when env var AZURITE_SKIP_API_VERSION_CHECK is true @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "true";

const env = new BlobEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});

it("returns false when env var AZURITE_SKIP_API_VERSION_CHECK is false @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "false";

const env = new BlobEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when skipApiVersionCheck flag is set @loki", () => {
process.argv.push("--skipApiVersionCheck");

const env = new BlobEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});
});
47 changes: 47 additions & 0 deletions tests/common/environment.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import * as assert from "assert";

import Environment from "../../src/common/Environment";

describe("Environment", () => {
const originalArgv = process.argv;

beforeEach(() => {
process.argv = ["node", "azurite"];
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

afterEach(() => {
process.argv = originalArgv;
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

it("defaults skipApiVersionCheck to false @loki", () => {
const env = new Environment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when env var AZURITE_SKIP_API_VERSION_CHECK is true @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "true";

const env = new Environment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});

it("returns false when env var AZURITE_SKIP_API_VERSION_CHECK is false @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "false";

const env = new Environment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when skipApiVersionCheck flag is set @loki", () => {
process.argv.push("--skipApiVersionCheck");

const env = new Environment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});
});
47 changes: 47 additions & 0 deletions tests/queue/queueEnvironment.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import * as assert from "assert";

import QueueEnvironment from "../../src/queue/QueueEnvironment";

describe("QueueEnvironment", () => {
const originalArgv = process.argv;

beforeEach(() => {
process.argv = ["node", "azurite-queue"];
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

afterEach(() => {
process.argv = originalArgv;
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

it("defaults skipApiVersionCheck to false @loki", () => {
const env = new QueueEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when env var AZURITE_SKIP_API_VERSION_CHECK is true @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "true";

const env = new QueueEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});

it("returns false when env var AZURITE_SKIP_API_VERSION_CHECK is false @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "false";

const env = new QueueEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when skipApiVersionCheck flag is set @loki", () => {
process.argv.push("--skipApiVersionCheck");

const env = new QueueEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});
});
47 changes: 47 additions & 0 deletions tests/table/tableEnvironment.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import * as assert from "assert";

import TableEnvironment from "../../src/table/TableEnvironment";

describe("TableEnvironment", () => {
const originalArgv = process.argv;

beforeEach(() => {
process.argv = ["node", "azurite-table"];
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

afterEach(() => {
process.argv = originalArgv;
delete process.env.AZURITE_SKIP_API_VERSION_CHECK;
});

it("defaults skipApiVersionCheck to false @loki", () => {
const env = new TableEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when env var AZURITE_SKIP_API_VERSION_CHECK is true @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "true";

const env = new TableEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});

it("returns false when env var AZURITE_SKIP_API_VERSION_CHECK is false @loki", () => {
process.env.AZURITE_SKIP_API_VERSION_CHECK = "false";

const env = new TableEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), false);
});

it("returns true when skipApiVersionCheck flag is set @loki", () => {
process.argv.push("--skipApiVersionCheck");

const env = new TableEnvironment();

assert.strictEqual(env.skipApiVersionCheck(), true);
});
});
Loading