UNPKG

6.12 kBJavaScriptView Raw
1// quotaBugTest.js
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', // 01
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', // 02
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// quota2 product has 3 calls per minute quota
91// quota1 product has 15 calls per minute quota
92// app: quotaShared has both quota2 and quota1 added as products
93 async function quotaBug() {
94 try {
95 let q1 = 0; //quota1 call count
96 let q2 = 0; //quota2 call count
97
98 const { body } = await getJWTProm();
99 const { token } = body;
100
101
102 //call quota2 4 times per buganizer scenario
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 //call quota1 multiple times without receiving 4xx response code
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