azure-cosmos-js/test/functional/globalEndpointManager.spec.ts

85 строки
3.4 KiB
TypeScript

import { DatabaseAccount, ResourceResponse, RequestOptions, RequestContext, ConnectionPolicy } from "../../dist-esm";
import { endpoint, masterKey } from "../common/_testConfig";
import { GlobalEndpointManager } from "../../dist-esm/globalEndpointManager";
import { sleep, HTTPMethod, OperationType, ResourceType } from "../../dist-esm/common";
import assert from "assert";
const headers = {
"access-control-allow-credentials": "true",
"access-control-allow-origin": "",
"cache-control": "no-store, no-cache",
"content-location": "https://localhost:8081/",
"content-type": "application/json",
date: "Mon, 19 Aug 2019 22:22:13 GMT",
pragma: "no-cache",
server: "Microsoft-HTTPAPI/2.0",
"transfer-encoding": "chunked",
"x-ms-databaseaccount-consumed-mb": "0",
"x-ms-databaseaccount-provisioned-mb": "0",
"x-ms-databaseaccount-reserved-mb": "0",
"x-ms-gatewayversion": "version=2.4.0.0",
"x-ms-max-media-storage-usage-mb": "10240",
"x-ms-media-storage-usage-mb": "0",
"x-ms-throttle-retry-count": 0,
"x-ms-throttle-retry-wait-time-ms": 0
};
const databaseAccountBody: any = {
writableLocations: [{ name: "West US 2", databaseAccountEndpoint: "https://test-westus2.documents.azure.com:443/" }],
readableLocations: [
{ name: "West US 2", databaseAccountEndpoint: "https://test-westus2.documents.azure.com:443/" },
{ name: "East US 2", databaseAccountEndpoint: "https://test-eastus2.documents.azure.com:443/" }
],
DatabasesLink: "/dbs/",
MediaLink: "/media/",
ConsistencyPolicy: "Session"
};
describe("GlobalEndpointManager", function() {
describe("#resolveServiceEndpoint", function() {
it("should resolve the correct endpoint", async function() {
const gem = new GlobalEndpointManager(
{
endpoint: "https://test.documents.azure.com:443/",
key: masterKey,
connectionPolicy: { enableEndpointDiscovery: true, preferredLocations: ["East US 2", "West US 2"] }
},
async (opts: RequestOptions) => {
await sleep(1000);
const response: ResourceResponse<DatabaseAccount> = new ResourceResponse(
new DatabaseAccount(databaseAccountBody, headers),
headers,
200
);
return response;
}
);
const request: RequestContext = {
endpoint: undefined,
globalEndpointManager: gem,
requestAgent: undefined, // shouldn't be needed
connectionPolicy: this.connectionPolicy,
method: HTTPMethod.get,
client: undefined, // shouldn't be needed
operationType: OperationType.Read,
path: undefined, // shouldn't be needed
resourceType: ResourceType.none, // DatabaseAccount
options: undefined, // shouldn't be needed
plugins: undefined // shouldn't be needed
};
// We don't block on init for database account calls
assert.equal(await gem.resolveServiceEndpoint(request), "https://test.documents.azure.com:443/");
// For item calls, we do block on init, so this should resolve the correct regional endpoint
request.resourceType = ResourceType.item;
assert.equal(await gem.resolveServiceEndpoint(request), "https://test-eastus2.documents.azure.com:443/");
// This time, it should use the current regional endpoint.
request.resourceType = ResourceType.none; // DatabaseAccount
assert.equal(await gem.resolveServiceEndpoint(request), "https://test-eastus2.documents.azure.com:443/");
});
});
});