Skip to content

Commit a432a17

Browse files
authored
fix user tracking tests (#5497)
1 parent ecc6588 commit a432a17

6 files changed

Lines changed: 718 additions & 712 deletions

File tree

packages/dd-trace/test/appsec/blocking.spec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22

3+
const proxyquire = require('proxyquire')
4+
35
describe('blocking', () => {
46
const defaultBlockedTemplate = {
57
html: 'block test',
@@ -26,7 +28,7 @@ describe('blocking', () => {
2628
updateBlockFailureMetric: sinon.stub()
2729
}
2830

29-
const blocking = proxyquire('../src/appsec/blocking', {
31+
const blocking = proxyquire('../../src/appsec/blocking', {
3032
'../log': log,
3133
'./blocked_templates': defaultBlockedTemplate,
3234
'./telemetry': telemetry
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
'use strict'
2+
3+
const agent = require('../../plugins/agent')
4+
const axios = require('axios')
5+
const tracer = require('../../../../../index')
6+
const { USER_KEEP } = require('../../../../../ext/priority')
7+
8+
describe('track_event - Integration with the tracer', () => {
9+
let http
10+
let controller
11+
let appListener
12+
let port
13+
14+
function listener (req, res) {
15+
if (controller) {
16+
controller(req, res)
17+
}
18+
}
19+
20+
before(async () => {
21+
await agent.load('http')
22+
http = require('http')
23+
})
24+
25+
before(done => {
26+
const server = new http.Server(listener)
27+
appListener = server
28+
.listen(port, 'localhost', () => {
29+
port = appListener.address().port
30+
done()
31+
})
32+
})
33+
34+
after(() => {
35+
appListener.close()
36+
return agent.close({ ritmReset: false })
37+
})
38+
39+
describe('trackUserLoginSuccessEvent', () => {
40+
it('should track valid user', (done) => {
41+
controller = (req, res) => {
42+
tracer.appsec.trackUserLoginSuccessEvent({
43+
id: 'test_user_id'
44+
}, { metakey: 'metaValue' })
45+
res.end()
46+
}
47+
agent.use(traces => {
48+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.success.track', 'true')
49+
expect(traces[0][0].meta).to.have.property('usr.id', 'test_user_id')
50+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.success.metakey', 'metaValue')
51+
expect(traces[0][0].metrics).to.have.property('_sampling_priority_v1', USER_KEEP)
52+
}).then(done).catch(done)
53+
axios.get(`http://localhost:${port}/`)
54+
})
55+
56+
it('should not track without user', (done) => {
57+
controller = (req, res) => {
58+
tracer.appsec.trackUserLoginSuccessEvent(undefined, { metakey: 'metaValue' })
59+
res.end()
60+
}
61+
agent.use(traces => {
62+
expect(traces[0][0].meta).to.not.have.property('appsec.events.users.login.success.track', 'true')
63+
}).then(done).catch(done)
64+
axios.get(`http://localhost:${port}/`)
65+
})
66+
67+
it('should not track without calling the sdk method', (done) => {
68+
controller = (req, res) => {
69+
res.end()
70+
}
71+
agent.use(traces => {
72+
expect(traces[0][0].meta).to.not.have.property('appsec.events.users.login.success.track', 'true')
73+
}).then(done).catch(done)
74+
axios.get(`http://localhost:${port}/`)
75+
})
76+
})
77+
78+
describe('trackUserLoginFailureEvent', () => {
79+
it('should track valid existing user', (done) => {
80+
controller = (req, res) => {
81+
tracer.appsec.trackUserLoginFailureEvent('test_user_id', true, { metakey: 'metaValue' })
82+
res.end()
83+
}
84+
agent.use(traces => {
85+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.track', 'true')
86+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.usr.id', 'test_user_id')
87+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.usr.exists', 'true')
88+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.metakey', 'metaValue')
89+
expect(traces[0][0].metrics).to.have.property('_sampling_priority_v1', USER_KEEP)
90+
}).then(done).catch(done)
91+
axios.get(`http://localhost:${port}/`)
92+
})
93+
94+
it('should track valid non existing user', (done) => {
95+
controller = (req, res) => {
96+
tracer.appsec.trackUserLoginFailureEvent('test_user_id', false, { metakey: 'metaValue' })
97+
res.end()
98+
}
99+
agent.use(traces => {
100+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.track', 'true')
101+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.usr.id', 'test_user_id')
102+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.usr.exists', 'false')
103+
expect(traces[0][0].meta).to.have.property('appsec.events.users.login.failure.metakey', 'metaValue')
104+
expect(traces[0][0].metrics).to.have.property('_sampling_priority_v1', USER_KEEP)
105+
}).then(done).catch(done)
106+
axios.get(`http://localhost:${port}/`)
107+
})
108+
109+
it('should not track without user', (done) => {
110+
controller = (req, res) => {
111+
tracer.appsec.trackUserLoginFailureEvent(undefined, false, { metakey: 'metaValue' })
112+
res.end()
113+
}
114+
agent.use(traces => {
115+
expect(traces[0][0].meta).to.not.have.property('appsec.events.users.login.failure.track', 'true')
116+
}).then(done).catch(done)
117+
axios.get(`http://localhost:${port}/`)
118+
})
119+
120+
it('should not track without calling the sdk method', (done) => {
121+
controller = (req, res) => {
122+
res.end()
123+
}
124+
agent.use(traces => {
125+
expect(traces[0][0].meta).to.not.have.property('appsec.events.users.login.failure.track', 'true')
126+
}).then(done).catch(done)
127+
axios.get(`http://localhost:${port}/`)
128+
})
129+
})
130+
131+
describe('trackCustomEvent', () => {
132+
it('should track valid event name', (done) => {
133+
controller = (req, res) => {
134+
tracer.appsec.trackCustomEvent('my-custom-event', { metakey: 'metaValue' })
135+
res.end()
136+
}
137+
agent.use(traces => {
138+
expect(traces[0][0].meta).to.have.property('appsec.events.my-custom-event.track', 'true')
139+
expect(traces[0][0].meta).to.have.property('appsec.events.my-custom-event.metakey', 'metaValue')
140+
expect(traces[0][0].metrics).to.have.property('_sampling_priority_v1', USER_KEEP)
141+
}).then(done).catch(done)
142+
axios.get(`http://localhost:${port}/`)
143+
})
144+
145+
it('should not track invalid event name', (done) => {
146+
controller = (req, res) => {
147+
tracer.appsec.trackCustomEvent(null, { metakey: 'metaValue' })
148+
tracer.appsec.trackCustomEvent({ event: 'name' }, { metakey: 'metaValue' })
149+
res.end()
150+
}
151+
agent.use(traces => {
152+
expect(traces[0][0].metrics).to.not.have.property('_sampling_priority_v1', USER_KEEP)
153+
}).then(done).catch(done)
154+
axios.get(`http://localhost:${port}/`)
155+
})
156+
})
157+
})

0 commit comments

Comments
 (0)