Skip to content

Commit 7084038

Browse files
committed
Adding headers to chaoshandleroptions
1 parent 7aba27f commit 7084038

File tree

7 files changed

+62
-48
lines changed

7 files changed

+62
-48
lines changed

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
"pre-build": "npm run setVersion",
6262
"build": "npm run pre-build && npm run build:cjs && npm run build:es && rollup -c",
6363
"test": "npm run test:cjs && npm run test:esm",
64-
"test:development": "tsc --p test/tsconfig-test-cjs.json && mocha 'lib/test/development/**/*.js' --require isomorphic-fetch",
64+
"test:development": "tsc --p test/tsconfig-test-cjs.json && mocha 'lib/test/development/**/*.js' --require isomorphic-fetch --grep PageIterator",
6565
"lint": "tslint --project ./tsconfig-cjs.json -c tslint.json",
6666
"format:css": "prettier --write \"**/*.css\"",
6767
"format:html": "prettier --write \"**/*.html\"",

src/Version.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
* @module Version
1313
*/
1414

15-
export const PACKAGE_VERSION = "2.2.0-Preview.1";
15+
export const PACKAGE_VERSION = "2.1.0-Preview.2";

src/middleware/ChaosHandler.ts

+12-11
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,21 @@ export class ChaosHandler implements Middleware {
6767
* @param {string} requestDate - date of the request
6868
* @returns response Header
6969
*/
70-
private createResponseHeaders(statusCode: number, requestID: string, requestDate: string) {
71-
const responseHeader: Headers = new Headers();
70+
private createResponseHeaders(chaosHandlerOptions: ChaosHandlerOptions, requestID: string, requestDate: string) {
7271

72+
const responseHeader: Headers = chaosHandlerOptions.headers ? new Headers(chaosHandlerOptions.headers) : new Headers();
7373
responseHeader.append("Cache-Control", "no-store");
7474
responseHeader.append("request-id", requestID);
7575
responseHeader.append("client-request-id", requestID);
7676
responseHeader.append("x-ms-ags-diagnostic", "");
7777
responseHeader.append("Date", requestDate);
7878
responseHeader.append("Strict-Transport-Security", "");
7979

80-
if (statusCode === 429) {
80+
if (chaosHandlerOptions.statusCode === 429) {
8181
// throttling case has to have a timeout scenario
8282
responseHeader.append("retry-after", "300");
8383
}
84+
8485
return responseHeader;
8586
}
8687

@@ -94,14 +95,14 @@ export class ChaosHandler implements Middleware {
9495
* @param {any?} requestBody - the request body to be returned for the request
9596
* @returns response body
9697
*/
97-
private createResponseBody(statusCode: number, statusMessage: string, requestID: string, requestDate: string, responseBody?: any) {
98-
if (responseBody) {
99-
return responseBody;
98+
private createResponseBody(options: ChaosHandlerOptions, requestID: string, requestDate: string) {
99+
if (options.responseBody) {
100+
return options.responseBody;
100101
}
101102
let body: any;
102-
if (statusCode >= 400) {
103-
const codeMessage: string = httpStatusCode[statusCode];
104-
const errMessage: string = statusMessage;
103+
if (options.statusCode >= 400) {
104+
const codeMessage: string = httpStatusCode[options.statusCode];
105+
const errMessage: string = options.statusMessage;
105106

106107
body = {
107108
error: {
@@ -135,8 +136,8 @@ export class ChaosHandler implements Middleware {
135136

136137
requestID = generateUUID();
137138
requestDate = new Date();
138-
responseHeader = this.createResponseHeaders(chaosHandlerOptions.statusCode, requestID, requestDate.toString());
139-
responseBody = this.createResponseBody(chaosHandlerOptions.statusCode, chaosHandlerOptions.statusMessage, requestID, requestDate.toString(), chaosHandlerOptions.responseBody);
139+
responseHeader = this.createResponseHeaders(chaosHandlerOptions, requestID, requestDate.toString());
140+
responseBody = this.createResponseBody(chaosHandlerOptions, requestID, requestDate.toString());
140141
const init: any = { url: requestURL, status: chaosHandlerOptions.statusCode, statusText: chaosHandlerOptions.statusMessage, headers: responseHeader };
141142
context.response = new Response(responseBody, init);
142143
} catch (error) {

src/middleware/options/ChaosHandlerOptions.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ export class ChaosHandlerOptions implements MiddlewareOptions {
5555
*/
5656
public responseBody: any;
5757

58+
/**
59+
* The response body to be returned in the response
60+
*
61+
* @public
62+
*/
63+
public headers: Headers;
64+
5865
/**
5966
* @public
6067
* @constructor
@@ -66,12 +73,13 @@ export class ChaosHandlerOptions implements MiddlewareOptions {
6673
* @param {any?} responseBody - The response body to be returned in the response
6774
* @returns An instance of ChaosHandlerOptions
6875
*/
69-
public constructor(chaosStrategy: ChaosStrategy = ChaosStrategy.RANDOM, statusMessage: string = "Some error Happened", statusCode?: number, chaosPercentage?: number, responseBody?: any) {
76+
public constructor(chaosStrategy: ChaosStrategy = ChaosStrategy.RANDOM, statusMessage: string = "Some error Happened", statusCode?: number, chaosPercentage?: number, responseBody?: any, headers?:Headers) {
7077
this.chaosStrategy = chaosStrategy;
7178
this.statusCode = statusCode;
7279
this.statusMessage = statusMessage;
7380
this.chaosPercentage = chaosPercentage !== undefined ? chaosPercentage : 10;
7481
this.responseBody = responseBody;
82+
this.headers = headers
7583
if (this.chaosPercentage > 100) {
7684
throw new Error("Error Pecentage can not be more than 100");
7785
}

test/common/middleware/ChaosHandler.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,28 @@ describe("ChaosHandler.ts", () => {
2727

2828
describe("createResponseHeaders", () => {
2929
it("Should have request-id for every random statusCode", () => {
30-
const responseHeader = chaosHandler["createResponseHeaders"](204, "xxxxxxxxxxxxxxxx", new Date().toString());
30+
const options = new ChaosHandlerOptions(ChaosStrategy.MANUAL, "testStatusCode", 204);
31+
const responseHeader = chaosHandler["createResponseHeaders"](options, "xxxxxxxxxxxxxxxx", new Date().toString());
3132
assert.isDefined(responseHeader.get("request-id"));
3233
});
3334

3435
it("Should have retry-after for 429 case", () => {
35-
const responseHeader = chaosHandler["createResponseHeaders"](429, "xxxxxxxxxxxxxxxx", new Date().toString());
36+
const options = new ChaosHandlerOptions(ChaosStrategy.MANUAL, "testStatusCode", 429);
37+
const responseHeader = chaosHandler["createResponseHeaders"](options, "xxxxxxxxxxxxxxxx", new Date().toString());
3638
assert.isDefined(responseHeader.get("retry-after"));
3739
});
3840
});
3941

4042
describe("createResponseBody", () => {
4143
it("Should return error in response body for error scenarios", () => {
42-
const responseBody = chaosHandler["createResponseBody"](404, "Not Found", "xxxxxxxxxxxxxx", new Date().toString());
44+
const options = new ChaosHandlerOptions(ChaosStrategy.MANUAL, "Not Found", 404);
45+
const responseBody = chaosHandler["createResponseBody"](options, "xxxxxxxxxxxxxx", new Date().toString());
4346
assert.isDefined(responseBody["error"]);
4447
});
4548

4649
it("Should return empty response body for success scenarios", () => {
47-
const responseBody = chaosHandler["createResponseBody"](200, "Not Found", "xxxxxxxxxxxxxx", new Date().toString());
50+
const options = new ChaosHandlerOptions(ChaosStrategy.MANUAL, "Not Found", 200);
51+
const responseBody = chaosHandler["createResponseBody"](options, "xxxxxxxxxxxxxx", new Date().toString());
4852
assert.equal(Object.keys(responseBody).length, 0);
4953
});
5054
});

test/development/workload/PageIterator.ts

+30-29
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import { assert } from "chai";
1111

1212
import { getClient } from "../test-helper";
1313

14-
import { ChaosHandler } from "../../../src/middleware/ChaosHandler";
14+
import { CgithaosHandler } from "../../../src/middleware/ChaosHandler";
1515
import { ChaosHandlerOptions } from "../../../src/middleware/options/ChaosHandlerOptions";
16+
1617
import { ChaosStrategy } from "../../../src/middleware/options/ChaosStrategy";
17-
import { GraphRequestOptions, PageIterator, PageIteratorCallback } from "../../../src/tasks/PageIterator";
1818
import { Client, ClientOptions } from "../../../src";
1919

20+
import { GraphRequestOptions, PageIterator, PageIteratorCallback } from "../../../src/tasks/PageIterator";
2021
const client = getClient();
2122
describe("PageIterator", ()=> {
2223
const pstHeader = { Prefer: 'outlook.timezone= "pacific standard time"' };
@@ -96,31 +97,31 @@ describe("PageIterator", ()=> {
9697
}).timeout(30 * 1000);
9798

9899
// TODO - Temporariliy commenting this test.
99-
// it("setting middleware with pageIterator", async () => {
100-
// const middleware = new ChaosHandler();
101-
// const getPageCollection = () => {
102-
// return {
103-
// value: [],
104-
// "@odata.nextLink": "nextURL",
105-
// additionalContent: "additional content",
106-
// };
107-
// };
108-
// const clientOptions: ClientOptions = {
109-
// middleware,
110-
// };
111-
// const responseBody = { value: [{ event1: "value1" }, { event2: "value2" }] };
112-
// let counter = 1;
113-
// const callback: PageIteratorCallback = (data) => {
114-
// assert.equal(data["event" + counter], "value" + counter);
115-
// counter++;
116-
// return true;
117-
// };
118-
119-
// const middlewareOptions = [new ChaosHandlerOptions(ChaosStrategy.MANUAL, "middleware options for pageIterator", 200, 0, responseBody)];
120-
// const requestOptions = { middlewareOptions };
121-
122-
// const client = Client.initWithMiddleware(clientOptions);
123-
// const pageIterator = new PageIterator(client, getPageCollection(), callback, requestOptions);
124-
// await pageIterator.iterate();
125-
// });
100+
it("setting middleware with pageIterator", async () => {
101+
const middleware = new ChaosHandler();
102+
const getPageCollection = () => {
103+
return {
104+
value: [],
105+
"@odata.nextLink": "nextURL",
106+
additionalContent: "additional content",
107+
};
108+
};
109+
const clientOptions: ClientOptions = {
110+
middleware,
111+
};
112+
const responseBody = { value: [{ event1: "value1" }, { event2: "value2" }] };
113+
let counter = 1;
114+
const callback: PageIteratorCallback = (data) => {
115+
assert.equal(data["event" + counter], "value" + counter);
116+
counter++;
117+
return true;
118+
};
119+
120+
const middlewareOptions = [new ChaosHandlerOptions(ChaosStrategy.MANUAL, "middleware options for pageIterator", 200, 0, JSON.stringify(responseBody), new Headers({ 'Content-Type' : 'application/json','content-length':'100'}))];
121+
const requestOptions = { middlewareOptions };
122+
123+
const client = Client.initWithMiddleware(clientOptions);
124+
const pageIterator = new PageIterator(client, getPageCollection(), callback, requestOptions);
125+
await pageIterator.iterate();
126+
});
126127
});

0 commit comments

Comments
 (0)