1 |
|
2 | 'use strict';
|
3 |
|
4 | const request = require('request');
|
5 | let { user, password, key, secret, org, env, tokenSecret, tokenId } = require('./env.js');
|
6 | const assert = require('assert');
|
7 |
|
8 |
|
9 | const http = require('http');
|
10 | const url = require('url');
|
11 | const quotaServer = http.createServer((req,res) => {
|
12 | console.log(req.headers);
|
13 | console.log('req.url', req.url);
|
14 | let parsedURL = url.parse(req.url);
|
15 | console.log('parsedURL', parsedURL);
|
16 | if(parsedURL.path==='/edgemicro_quota01') res.end('quota01');
|
17 | else if(parsedURL.path==='/edgemicro_quota02') res.end('quota02');
|
18 | else if(parsedURL.path==='/edgemicro_quotaBoth') res.end('quotaBoth');
|
19 | else res.end('no url path');
|
20 | })
|
21 |
|
22 | quotaServer.listen(8881);
|
23 |
|
24 | function getJWTProm() {
|
25 | return new Promise((resolve, reject) => {
|
26 |
|
27 | request({
|
28 | uri: `https://${org}-${env}.apigee.net/edgemicro-auth/token`,
|
29 | method: 'POST',
|
30 | json: {
|
31 | client_id: tokenId,
|
32 | client_secret: tokenSecret,
|
33 | grant_type: "client_credentials",
|
34 | }
|
35 | },
|
36 | function(err, resp, body) {
|
37 | if (err) reject({ err, msg: 'getjwt error' });
|
38 | else resolve({ resp, body });
|
39 |
|
40 | }
|
41 | );
|
42 | })
|
43 | }
|
44 |
|
45 | function callProxyQuota01(tkn) {
|
46 | return new Promise((resolve, reject) => {
|
47 | request({
|
48 | method: 'get',
|
49 | uri: 'http://localhost:8000/edgemicro_quota',
|
50 | auth: {
|
51 | bearer: tkn
|
52 | }
|
53 | }, (err, resp, body) => {
|
54 | if (err) reject({ err, msg: 'quota01 err' });
|
55 | else {
|
56 | resolve({ resp: { statusCode: resp.statusCode, statusMessage: resp.statusMessage }, body });
|
57 | }
|
58 | })
|
59 | })
|
60 | }
|
61 |
|
62 | function callProxyQuota02(tkn) {
|
63 | return new Promise((resolve, reject) => {
|
64 | request({
|
65 | method: 'get',
|
66 | uri: 'http://localhost:8000/edgemicro_quota',
|
67 | auth: {
|
68 | bearer: tkn
|
69 | }
|
70 | }, (err, resp, body) => {
|
71 | if (err) reject({ err, msg: 'quota02 err' });
|
72 | else {
|
73 | resolve({ resp: { statusCode: resp.statusCode, statusMessage: resp.statusMessage }, body });
|
74 | }
|
75 | })
|
76 | });
|
77 | }
|
78 |
|
79 |
|
80 | function awaitTime(milli) {
|
81 | if (isNaN(milli)) return 'not a number';
|
82 | return new Promise(function(resolve, reject) {
|
83 | setTimeout(function() {
|
84 | resolve({});
|
85 | }, Number(milli));
|
86 | });
|
87 | }
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | async function quotaBug() {
|
94 | try {
|
95 | let q1 = 0;
|
96 | let q2 = 0;
|
97 |
|
98 | const { body } = await getJWTProm();
|
99 | const { token } = body;
|
100 |
|
101 |
|
102 |
|
103 | console.log(++q2);
|
104 | let q2_1 = await callProxyQuota02(token)
|
105 | assert.deepStrictEqual(q2_1.resp.statusCode, 200);
|
106 | await awaitTime(100);
|
107 |
|
108 | let q2_2 = await callProxyQuota02(token);
|
109 | assert.deepStrictEqual(q2_2.resp.statusCode, 200);
|
110 | await awaitTime(100);
|
111 |
|
112 | console.log(++q2)
|
113 | let q2_3= await callProxyQuota02(token);
|
114 | assert.deepStrictEqual(q2_3.resp.statusCode, 200);
|
115 |
|
116 | await awaitTime(100);
|
117 |
|
118 |
|
119 |
|
120 | let q1_1 = await callProxyQuota01(token);
|
121 | assert.deepStrictEqual(q1_1.resp.statusCode, 200);
|
122 | await awaitTime(150);
|
123 |
|
124 | let q1_2 = await callProxyQuota01(token);
|
125 | assert.deepStrictEqual(q1_2.resp.statusCode, 200);
|
126 | await awaitTime(150);
|
127 |
|
128 | let q1_3 = await callProxyQuota01(token);
|
129 | assert.deepStrictEqual(q1_3.resp.statusCode, 200);
|
130 | await awaitTime(150);
|
131 |
|
132 | let q1_4 = await callProxyQuota01(token);
|
133 | assert.deepStrictEqual(q1_4.resp.statusCode, 200);
|
134 | await awaitTime(150);
|
135 |
|
136 | let q1_5 = await callProxyQuota01(token);
|
137 | assert.deepStrictEqual(q1_5.resp.statusCode, 200);
|
138 | await awaitTime(150);
|
139 |
|
140 | let q1_6 = await callProxyQuota01(token);
|
141 | assert.deepStrictEqual(q1_6.resp.statusCode, 200);
|
142 | await awaitTime(150);
|
143 |
|
144 | let q1_7 = await callProxyQuota01(token);
|
145 | assert.deepStrictEqual(q1_7.resp.statusCode, 200);
|
146 | await awaitTime(150);
|
147 |
|
148 | let q1_8 = await callProxyQuota01(token);
|
149 | assert.deepStrictEqual(q1_8.resp.statusCode, 200);
|
150 | await awaitTime(150);
|
151 |
|
152 | let q1_9 = await callProxyQuota01(token);
|
153 | assert.deepStrictEqual(q1_9.resp.statusCode, 200);
|
154 | await awaitTime(150);
|
155 |
|
156 | let q1_10 = await callProxyQuota01(token);
|
157 | assert.deepStrictEqual(q1_10.resp.statusCode, 200);
|
158 | await awaitTime(150);
|
159 |
|
160 | let q1_11 = await callProxyQuota01(token);
|
161 | assert.deepStrictEqual(q1_11.resp.statusCode, 200);
|
162 | await awaitTime(150);
|
163 |
|
164 | let q1_12 = await callProxyQuota01(token);
|
165 | assert.deepStrictEqual(q1_12.resp.statusCode, 200);
|
166 | await awaitTime(150);
|
167 |
|
168 | let q1_13 = await callProxyQuota01(token);
|
169 | assert.deepStrictEqual(q1_13.resp.statusCode, 200);
|
170 | await awaitTime(150);
|
171 |
|
172 | let q1_14 = await callProxyQuota01(token);
|
173 | assert.deepStrictEqual(q1_14.resp.statusCode, 200);
|
174 | await awaitTime(150);
|
175 |
|
176 |
|
177 | await callProxyQuota01(token);
|
178 | await awaitTime(150);
|
179 |
|
180 | await callProxyQuota01(token);
|
181 | await awaitTime(150);
|
182 |
|
183 | await callProxyQuota01(token);
|
184 | await awaitTime(150);
|
185 | await callProxyQuota01(token);
|
186 |
|
187 | let q1_x = await callProxyQuota01(token);
|
188 | console.log('q1_x-', q1_x);
|
189 | assert.deepStrictEqual(q1_x.resp.statusCode, 403);
|
190 | await awaitTime(150);
|
191 |
|
192 | quotaServer.close();
|
193 |
|
194 | } catch (err) {
|
195 | console.error('quotabug err', err);
|
196 | }
|
197 | }
|
198 |
|
199 |
|
200 |
|
201 | quotaBug(); |
\ | No newline at end of file |