UNPKG

5.94 kBJavaScriptView Raw
1/// <reference path="../../../typings/node/node.d.ts" />
2/// <reference path="../../../typings/mocha/mocha.d.ts" />
3/// <reference path="../../../typings/chai/chai.d.ts" />
4
5'use strict';
6
7var helper = require('../../test-helper');
8var config = helper.config();
9
10var request = require('supertest');
11var chai = require('chai');
12var should = chai.should();
13
14chai.config.includeStack = true;
15chai.config.showDiff = true;
16
17var expectedRecordKeys = [
18 'apiproxy',
19 'apiproxy_revision',
20 'client_ip',
21 'client_received_start_timestamp',
22 'client_sent_end_timestamp',
23 'recordType',
24 'request_path',
25 'request_uri',
26 'request_verb',
27 'response_status_code',
28 'useragent'
29];
30
31describe('analytics', function() {
32
33 var servers, proxy;
34
35 beforeEach(function() {
36 config.analytics = {
37 uri: 'x',
38 key: 'x',
39 proxy: 'x',
40 bufferSize: 5,
41 batchSize: 5,
42 flushInterval: 10000
43 };
44 });
45
46 afterEach(function() {
47 servers.close();
48 });
49
50 it('should log forwarded requests', function(done) {
51
52 config.edgemicro.plugins.sequence = ['analytics'];
53 helper.startServers(config, function(err, s) {
54 if (err) { return done(err); }
55 servers = s;
56 proxy = servers.proxy;
57
58 var buffer = helper.analytics.buffer;
59 var startLen = helper.analytics.buffer.length;
60
61 request(proxy)
62 .get('/')
63 .expect(200)
64 .end(function(err, res) {
65 if (err) { return done(err); }
66 should.exist(res.body.fromTarget);
67 buffer.length.should.equal(startLen + 1);
68 var record = buffer[buffer.length - 1];
69 record.should.have.keys(expectedRecordKeys);
70 record.response_status_code.should.equal(200);
71
72 record.apiproxy.should.eql('microgateway_test');
73 record.apiproxy_revision.should.eql('1');
74
75 done();
76 });
77 });
78 });
79
80 it('should log quota failures', function(done) {
81
82 var pem = require('pem');
83 var jwt = require('jsonwebtoken');
84 var privateKey, publicKey;
85
86 config['quota-memory'] = { // config section should match plugin name
87 Test: {
88 allow: 1,
89 timeUnit: 'minute'
90 }
91 };
92
93 config.edgemicro.plugins.sequence = ['analytics', 'oauth', 'quota-memory'];
94 helper.startServers(config, function(err, s) {
95 if (err) { return done(err); }
96 servers = s;
97 proxy = servers.proxy;
98
99 var buffer = helper.analytics.buffer;
100 var startLen = helper.analytics.buffer.length;
101
102 var options = {
103 selfSigned: true,
104 days: 1
105 };
106 pem.createCertificate(options, function(err, keys) {
107 if (err) { return done(err); }
108
109 privateKey = keys.serviceKey;
110 publicKey = keys.certificate;
111
112 config.oauth.public_key = publicKey;
113
114 var options = { algorithm: 'RS256' };
115 var payload = { test: 'test', api_product_list: [ 'Test' ] };
116 var token = jwt.sign(payload, privateKey, options);
117
118 request(proxy)
119 .get('/')
120 .set('Authorization', 'Bearer ' + token)
121 .expect(200)
122 .end(function(err, res) {
123 if (err) { return done(err); }
124 should.exist(res.body.fromTarget);
125
126 request(proxy)
127 .get('/')
128 .set('Authorization', 'Bearer ' + token)
129 .expect(403)
130 .end(function(err, res) {
131 if (err) { return done(err); }
132 should.not.exist(res.body.fromTarget);
133 buffer.length.should.equal(startLen + 2);
134 var record = buffer[buffer.length - 1];
135 record.should.have.keys(expectedRecordKeys);
136 record.response_status_code.should.equal(403);
137
138 done();
139 });
140 });
141 });
142 });
143 });
144
145 it('should log spikearrest failures', function(done) {
146
147 config.spikearrest = {
148 timeUnit: 'minute',
149 bufferSize: 0,
150 allow: 1
151 };
152
153 config.edgemicro.plugins.sequence = ['analytics', 'spikearrest'];
154 helper.startServers(config, function(err, s) {
155 if (err) { return done(err); }
156 servers = s;
157 proxy = servers.proxy;
158
159 var buffer = helper.analytics.buffer;
160 var startLen = helper.analytics.buffer.length;
161
162 request(proxy)
163 .get('/')
164 .expect(200)
165 .end(function(err, res) {
166 if (err) { return done(err); }
167 should.exist(res.body.fromTarget);
168
169 request(proxy)
170 .get('/')
171 .expect(503)
172 .end(function(err, res) {
173 if (err) { return done(err); }
174 should.not.exist(res.body.fromTarget);
175 buffer.length.should.equal(startLen + 2);
176 var record = buffer[buffer.length - 1];
177 record.should.have.keys(expectedRecordKeys);
178 record.response_status_code.should.equal(503);
179
180 done();
181 });
182 });
183 });
184 });
185
186 it('should log oauth failures', function(done) {
187
188 config.oauth = {
189 allowNoAuthorization: false,
190 allowInvalidAuthorization: false,
191 publicKey: 'x'
192 };
193
194 config.edgemicro.plugins.sequence = ['analytics', 'oauth'];
195 helper.startServers(config, function(err, s) {
196 if (err) { return done(err); }
197 servers = s;
198 proxy = servers.proxy;
199
200 var buffer = helper.analytics.buffer;
201 var startLen = helper.analytics.buffer.length;
202
203 request(proxy)
204 .get('/')
205 .expect(401)
206 .end(function(err, res) {
207 if (err) { return done(err); }
208 should.not.exist(res.body.fromTarget);
209 buffer.length.should.equal(startLen + 1);
210 var record = buffer[buffer.length - 1];
211 record.should.have.keys(expectedRecordKeys);
212 record.response_status_code.should.equal(401);
213
214 done();
215 });
216 });
217 });
218
219});