Skip to content

Commit f26bec3

Browse files
committed
test: src/endpointDiscoveryMiddleware.spec.ts
1 parent 49ad573 commit f26bec3

File tree

2 files changed

+143
-1
lines changed

2 files changed

+143
-1
lines changed
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import { EndpointCache } from "@aws-sdk/endpoint-cache";
2+
import { HttpRequest } from "@aws-sdk/protocol-http";
3+
import { FinalizeHandlerArguments } from "@aws-sdk/types";
4+
5+
import { endpointDiscoveryMiddleware } from "./endpointDiscoveryMiddleware";
6+
import { getCacheKey } from "./getCacheKey";
7+
import { updateDiscoveredEndpointInCache } from "./updateDiscoveredEndpointInCache";
8+
9+
jest.mock("./updateDiscoveredEndpointInCache");
10+
jest.mock("./getCacheKey");
11+
jest.mock("@aws-sdk/protocol-http");
12+
13+
describe(endpointDiscoveryMiddleware.name, () => {
14+
const cacheKey = "cacheKey";
15+
const endpoint = "endpoint";
16+
const getEndpoint = jest.fn().mockReturnValue(endpoint);
17+
const mockConfig = {
18+
credentials: jest.fn(),
19+
endpointCache: ({
20+
getEndpoint,
21+
} as unknown) as EndpointCache,
22+
endpointDiscoveryEnabled: jest.fn().mockResolvedValue(undefined),
23+
isCustomEndpoint: false,
24+
isClientEndpointDiscoveryEnabled: false,
25+
};
26+
27+
const mockMiddlewareConfig = {
28+
isDiscoveredEndpointRequired: false,
29+
};
30+
31+
const mockNext = jest.fn();
32+
const mockContext = {
33+
clientName: "ExampleClient",
34+
commandName: "ExampleCommand",
35+
};
36+
const mockArgs = { request: {} };
37+
38+
beforeEach(() => {
39+
(getCacheKey as jest.Mock).mockResolvedValue(cacheKey);
40+
(updateDiscoveredEndpointInCache as jest.Mock).mockResolvedValue(undefined);
41+
const { isInstance } = HttpRequest;
42+
((isInstance as unknown) as jest.Mock).mockReturnValue(true);
43+
});
44+
45+
afterEach(() => {
46+
jest.clearAllMocks();
47+
});
48+
49+
describe(`isCustomEndpoint=true`, () => {
50+
it(`throw error if isClientEndpointDiscoveryEnabled`, async () => {
51+
try {
52+
await endpointDiscoveryMiddleware(
53+
{ ...mockConfig, isCustomEndpoint: true, isClientEndpointDiscoveryEnabled: true },
54+
mockMiddlewareConfig
55+
)(
56+
mockNext,
57+
mockContext
58+
)(mockArgs as FinalizeHandlerArguments<any>);
59+
fail("should throw error when isCustomEndpoint=true and isClientEndpointDiscoveryEnabled=true");
60+
} catch (error) {
61+
expect(error).toStrictEqual(
62+
new Error(`Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.`)
63+
);
64+
}
65+
expect(mockNext).not.toHaveBeenCalled();
66+
expect(updateDiscoveredEndpointInCache).not.toHaveBeenCalled();
67+
});
68+
69+
it(`returns without endpoint discovery`, async () => {
70+
await endpointDiscoveryMiddleware({ ...mockConfig, isCustomEndpoint: true }, mockMiddlewareConfig)(
71+
mockNext,
72+
mockContext
73+
)(mockArgs as FinalizeHandlerArguments<any>);
74+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
75+
expect(updateDiscoveredEndpointInCache as jest.Mock).not.toHaveBeenCalled();
76+
});
77+
});
78+
79+
describe(`isDiscoveredEndpointRequired=true`, () => {
80+
it(`throws error when isEndpointDiscoveryEnabled=false`, async () => {
81+
mockConfig.endpointDiscoveryEnabled.mockResolvedValueOnce(false);
82+
try {
83+
await endpointDiscoveryMiddleware(mockConfig, { ...mockMiddlewareConfig, isDiscoveredEndpointRequired: true })(
84+
mockNext,
85+
mockContext
86+
)(mockArgs as FinalizeHandlerArguments<any>);
87+
fail("should throw error when isDiscoveredEndpointRequired=true and isEndpointDiscoveryEnabled=false");
88+
} catch (error) {
89+
expect(error).toStrictEqual(
90+
new Error(
91+
`Endpoint Discovery is disabled but ${mockContext.commandName} on ${mockContext.clientName} requires it.` +
92+
` Please check your configurations.`
93+
)
94+
);
95+
}
96+
expect(mockNext).not.toHaveBeenCalled();
97+
expect(updateDiscoveredEndpointInCache).not.toHaveBeenCalled();
98+
});
99+
100+
describe(`calls updateDiscoveredEndpointInCache`, () => {
101+
it(`when isEndpointDiscoveryEnabled=undefined`, async () => {
102+
await endpointDiscoveryMiddleware(mockConfig, { ...mockMiddlewareConfig, isDiscoveredEndpointRequired: true })(
103+
mockNext,
104+
mockContext
105+
)(mockArgs as FinalizeHandlerArguments<any>);
106+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
107+
expect(mockNext).toHaveBeenCalledWith({ request: { hostname: endpoint } });
108+
expect(updateDiscoveredEndpointInCache).toHaveBeenCalled();
109+
});
110+
111+
it(`when isEndpointDiscoveryEnabled=true`, async () => {
112+
mockConfig.endpointDiscoveryEnabled.mockResolvedValueOnce(true);
113+
await endpointDiscoveryMiddleware(mockConfig, { ...mockMiddlewareConfig, isDiscoveredEndpointRequired: true })(
114+
mockNext,
115+
mockContext
116+
)(mockArgs as FinalizeHandlerArguments<any>);
117+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
118+
expect(mockNext).toHaveBeenCalledWith({ request: { hostname: endpoint } });
119+
expect(updateDiscoveredEndpointInCache).toHaveBeenCalled();
120+
});
121+
});
122+
123+
describe(`isDiscoveredEndpointRequired=false`, () => {
124+
it(`calls updateDiscoveredEndpointInCache when isEndpointDiscoveryEnabled=true`, async () => {
125+
mockConfig.endpointDiscoveryEnabled.mockResolvedValueOnce(true);
126+
await endpointDiscoveryMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, mockContext)(
127+
mockArgs as FinalizeHandlerArguments<any>
128+
);
129+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
130+
expect(updateDiscoveredEndpointInCache).toHaveBeenCalled();
131+
});
132+
133+
it(`does not call updateDiscoveredEndpointInCache when isEndpointDiscoveryEnabled=false`, async () => {
134+
await endpointDiscoveryMiddleware(mockConfig, mockMiddlewareConfig)(mockNext, mockContext)(
135+
mockArgs as FinalizeHandlerArguments<any>
136+
);
137+
expect(mockNext).toHaveBeenCalledWith(mockArgs);
138+
expect(updateDiscoveredEndpointInCache).not.toHaveBeenCalled();
139+
});
140+
});
141+
});
142+
});

packages/middleware-endpoint-discovery/src/endpointDiscoveryMiddleware.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const endpointDiscoveryMiddleware = (
2828
return next(args);
2929
}
3030

31-
const { client, endpointDiscoveryCommandCtor } = config;
31+
const { endpointDiscoveryCommandCtor } = config;
3232
const { isDiscoveredEndpointRequired, identifiers } = middlewareConfig;
3333
const { clientName, commandName } = context;
3434
const isEndpointDiscoveryEnabled = await config.endpointDiscoveryEnabled();

0 commit comments

Comments
 (0)