mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-08-04 21:39:04 +00:00
update to 4.0
This commit is contained in:
120
test/spec_rule/rule_replace_request_data_spec.js
Normal file
120
test/spec_rule/rule_replace_request_data_spec.js
Normal file
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* test for rule replaceRequestData rule
|
||||
*
|
||||
*/
|
||||
const ProxyServerUtil = require('../util/ProxyServerUtil.js');
|
||||
const { proxyPost, generateUrl, directPost, isViaProxy } = require('../util/HttpUtil.js');
|
||||
const Server = require('../server/server.js');
|
||||
const { printLog, isObjectEqual } = require('../util/CommonUtil.js');
|
||||
|
||||
const rule = require('./rule/rule_replace_request_data.js');
|
||||
|
||||
testWrapper('http');
|
||||
testWrapper('https');
|
||||
|
||||
function testWrapper(protocol) {
|
||||
describe('Rule replaceRequestData should be working in :' + protocol, () => {
|
||||
let proxyServer;
|
||||
let serverInstance;
|
||||
|
||||
beforeAll((done) => {
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000;
|
||||
printLog('Start server for rule_replace_request_data_spec');
|
||||
|
||||
serverInstance = new Server();
|
||||
proxyServer = ProxyServerUtil.proxyServerWithRule(rule);
|
||||
|
||||
setTimeout(() => {
|
||||
done();
|
||||
}, 2000);
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
serverInstance && serverInstance.close();
|
||||
proxyServer && proxyServer.close();
|
||||
printLog('Close server for rule_replace_request_data_spec');
|
||||
});
|
||||
|
||||
it('Should replace the request data in proxy if the assertion is true', done => {
|
||||
const url = generateUrl(protocol, '/test/getuser');
|
||||
const userName = 'username_test';
|
||||
const param = {
|
||||
username: userName
|
||||
};
|
||||
|
||||
proxyPost(url, param)
|
||||
.then(proxyRes => {
|
||||
expect(proxyRes.statusCode).toEqual(200);
|
||||
expect(proxyRes.body).toEqual('body_post_getuser');
|
||||
const proxyRequest = serverInstance.getProxyRequestRecord(url);
|
||||
const proxyReqBodyObj = JSON.parse(proxyRequest.body.toString());
|
||||
|
||||
expect(isViaProxy(proxyRequest)).toBe(true);
|
||||
|
||||
expect(proxyReqBodyObj.username).toEqual(userName);
|
||||
expect(proxyReqBodyObj.authToken).toEqual('auth_token_inrule');
|
||||
|
||||
directPost(url, param)
|
||||
.then(directRes => {
|
||||
expect(directRes.statusCode).toEqual(200);
|
||||
expect(directRes.body).toEqual(proxyRes.body);
|
||||
|
||||
|
||||
const directRequest = serverInstance.getRequestRecord(url);
|
||||
const directReqBodyObj = JSON.parse(directRequest.body.toString());
|
||||
expect(isViaProxy(directRequest)).toBe(false);
|
||||
|
||||
expect(directReqBodyObj.username).toEqual(userName);
|
||||
expect(directReqBodyObj.authToken).toBeUndefined();
|
||||
done();
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error happened in direct post: ', error);
|
||||
done.fail('error happened in direct post');
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error happened in proxy post: ', error);
|
||||
console.error(error);
|
||||
console.error(error.stack);
|
||||
done.fail('error happened in proxy post');
|
||||
});
|
||||
});
|
||||
|
||||
it('Should not replace the request data in proxy if the assertion is false', done => {
|
||||
const url = generateUrl(protocol, '/test/normal_post_request1');
|
||||
const userName = 'normal_username_test';
|
||||
|
||||
const param = {
|
||||
username: userName
|
||||
};
|
||||
|
||||
proxyPost(url, param)
|
||||
.then(proxyRes => {
|
||||
expect(proxyRes.statusCode).toEqual(200);
|
||||
expect(proxyRes.body).toEqual('body_normal_post_request1');
|
||||
const proxyReqRecord = serverInstance.getProxyRequestRecord(url);
|
||||
const proxyReqBody = JSON.parse(proxyReqRecord.body);
|
||||
expect(isObjectEqual(proxyReqBody, param, url)).toBe(true);
|
||||
|
||||
directPost(url, param)
|
||||
.then(directRes => {
|
||||
expect(directRes.statusCode).toEqual(proxyRes.statusCode);
|
||||
expect(directRes.body).toEqual(proxyRes.body);
|
||||
const directReqRecord = serverInstance.getRequestRecord(url);
|
||||
const directReqBody = JSON.parse(directReqRecord.body);
|
||||
expect(isObjectEqual(directReqBody, proxyReqBody, url)).toBe(true);
|
||||
done();
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error happened in direct post:', error);
|
||||
done.fail('error happened in direct post');
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('error happened in proxy post:', error);
|
||||
done.fail('error happened in proxy post');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user