Skip to content

Commit 125905a

Browse files
committed
update
1 parent a522140 commit 125905a

File tree

5 files changed

+14
-61
lines changed

5 files changed

+14
-61
lines changed

src/AzureAppConfigurationImpl.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,6 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
182182

183183
async #executeWithFailoverPolicy(funcToExecute: (client: AppConfigurationClient) => Promise<any>): Promise<any> {
184184
const clientWrappers = await this.#clientManager.getClients();
185-
if (clientWrappers.length === 0) {
186-
this.#clientManager.refreshClients();
187-
console.warn("Refresh skipped because no endpoint is accessible.");
188-
}
189185

190186
let successful: boolean;
191187
for (const clientWrapper of clientWrappers) {
@@ -208,7 +204,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
208204
}
209205

210206
this.#clientManager.refreshClients();
211-
throw new Error("Failed to get configuration settings from endpoint.");
207+
throw new Error("All clients failed to get configuration settings.");
212208
}
213209

214210
async #loadSelectedKeyValues(): Promise<ConfigurationSetting[]> {
@@ -415,7 +411,7 @@ export class AzureAppConfigurationImpl implements AzureAppConfiguration {
415411
// check if any refresh task failed
416412
for (const result of results) {
417413
if (result.status === "rejected") {
418-
throw result.reason;
414+
console.warn("Refresh failed:", result.reason);
419415
}
420416
}
421417

test/failover.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as chaiAsPromised from "chai-as-promised";
66
chai.use(chaiAsPromised);
77
const expect = chai.expect;
88
import { load } from "./exportedApi";
9-
import { createMockedConnectionString, createMockedFeatureFlag, createMockedKeyValue, mockAppConfigurationClientListConfigurationSettingsWithFailure, mockConfigurationManagerGetClients, restoreMocks } from "./utils/testHelper";
9+
import { createMockedConnectionString, createMockedFeatureFlag, createMockedKeyValue, mockAppConfigurationClientListConfigurationSettings, mockAppConfigurationClientListConfigurationSettingsWithFailure, mockConfigurationManagerGetClients, restoreMocks } from "./utils/testHelper";
1010
import { getValidDomain, isValidEndpoint } from "../src/ConfigurationClientManager";
1111

1212
const mockedKVs = [{
@@ -37,7 +37,9 @@ describe("failover", function () {
3737
const replicaDiscoveryEnabled = true;
3838
const isFailoverable = true;
3939
mockConfigurationManagerGetClients(isFailoverable);
40-
mockAppConfigurationClientListConfigurationSettingsWithFailure(mockedKVs);
40+
mockAppConfigurationClientListConfigurationSettingsWithFailure();
41+
restoreMocks();
42+
mockAppConfigurationClientListConfigurationSettings(mockedKVs);
4143

4244
const connectionString = createMockedConnectionString();
4345
const settings = await load(connectionString, {
@@ -52,7 +54,9 @@ describe("failover", function () {
5254
const replicaDiscoveryEnabled = true;
5355
const isFailoverable = true;
5456
mockConfigurationManagerGetClients(isFailoverable);
55-
mockAppConfigurationClientListConfigurationSettingsWithFailure(mockedFeatureFlags);
57+
mockAppConfigurationClientListConfigurationSettingsWithFailure();
58+
restoreMocks();
59+
mockAppConfigurationClientListConfigurationSettings(mockedFeatureFlags);
5660

5761
const connectionString = createMockedConnectionString();
5862
const settings = await load(connectionString, {
@@ -72,7 +76,7 @@ describe("failover", function () {
7276
it("should throw error when all clients failed", async () => {
7377
const isFailoverable = false;
7478
mockConfigurationManagerGetClients(isFailoverable);
75-
mockAppConfigurationClientListConfigurationSettingsWithFailure(mockedKVs);
79+
mockAppConfigurationClientListConfigurationSettingsWithFailure();
7680

7781
const connectionString = createMockedConnectionString();
7882
return expect(load(connectionString)).eventually.rejectedWith("Failed to get configuration settings from endpoint.");

test/keyvault.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ describe("key vault reference", function () {
3939
});
4040

4141
it("require key vault options to resolve reference", async () => {
42-
return expect(load(createMockedConnectionString(), {
43-
})).eventually.rejectedWith("Configure keyVaultOptions to resolve Key Vault Reference(s).");
42+
return expect(load(createMockedConnectionString())).eventually.rejectedWith("Configure keyVaultOptions to resolve Key Vault Reference(s).");
4443
});
4544

4645
it("should resolve key vault reference with credential", async () => {

test/refresh.test.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ describe("dynamic refresh", function () {
4242

4343
it("should throw error when refresh is not enabled but refresh is called", async () => {
4444
const connectionString = createMockedConnectionString();
45-
const settings = await load(connectionString, {
46-
});
45+
const settings = await load(connectionString);
4746
const refreshCall = settings.refresh();
4847
return expect(refreshCall).eventually.rejectedWith("Refresh is not enabled for key-values or feature flags.");
4948
});
@@ -125,8 +124,7 @@ describe("dynamic refresh", function () {
125124

126125
it("should throw error when calling onRefresh when refresh is not enabled", async () => {
127126
const connectionString = createMockedConnectionString();
128-
const settings = await load(connectionString, {
129-
});
127+
const settings = await load(connectionString);
130128
expect(() => settings.onRefresh(() => { })).throws("Refresh is not enabled for key-values or feature flags.");
131129
});
132130

test/utils/testHelper.ts

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -131,55 +131,11 @@ function mockAppConfigurationClientGetConfigurationSetting(kvList) {
131131
});
132132
}
133133

134-
function mockAppConfigurationClientListConfigurationSettingsWithFailure(...pages: ConfigurationSetting[][]) {
134+
function mockAppConfigurationClientListConfigurationSettingsWithFailure() {
135135
const stub = sinon.stub(AppConfigurationClient.prototype, "listConfigurationSettings");
136136

137137
// Configure the stub to throw an error on the first call and return mockedKVs on the second call
138138
stub.onFirstCall().throws(new RestError("Internal Server Error", { statusCode: 500 }));
139-
stub.callsFake((listOptions) => {
140-
let kvs = _filterKVs(pages.flat(), listOptions);
141-
const mockIterator: AsyncIterableIterator<any> & { byPage(): AsyncIterableIterator<any> } = {
142-
[Symbol.asyncIterator](): AsyncIterableIterator<any> {
143-
kvs = _filterKVs(pages.flat(), listOptions);
144-
return this;
145-
},
146-
next() {
147-
const value = kvs.shift();
148-
return Promise.resolve({ done: !value, value });
149-
},
150-
byPage(): AsyncIterableIterator<any> {
151-
let remainingPages;
152-
const pageEtags = listOptions?.pageEtags ? [...listOptions.pageEtags] : undefined; // a copy of the original list
153-
return {
154-
[Symbol.asyncIterator](): AsyncIterableIterator<any> {
155-
remainingPages = [...pages];
156-
return this;
157-
},
158-
next() {
159-
const pageItems = remainingPages.shift();
160-
const pageEtag = pageEtags?.shift();
161-
if (pageItems === undefined) {
162-
return Promise.resolve({ done: true, value: undefined });
163-
} else {
164-
const items = _filterKVs(pageItems ?? [], listOptions);
165-
const etag = _sha256(JSON.stringify(items));
166-
const statusCode = pageEtag === etag ? 304 : 200;
167-
return Promise.resolve({
168-
done: false,
169-
value: {
170-
items,
171-
etag,
172-
_response: { status: statusCode }
173-
}
174-
});
175-
}
176-
}
177-
};
178-
}
179-
};
180-
181-
return mockIterator as any;
182-
});
183139
}
184140

185141
// uriValueList: [["<secretUri>", "value"], ...]

0 commit comments

Comments
 (0)