]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/api/server/logs.ts
Fix lowest server port
[github/Chocobozzz/PeerTube.git] / server / tests / api / server / logs.ts
CommitLineData
a1587156 1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
fd8710b8 2
86347717 3import { expect } from 'chai'
42b40636 4import { HttpStatusCode } from '@shared/models'
c9c43612
C
5import {
6 cleanupTests,
254d3579 7 createSingleServer,
c9c43612 8 killallServers,
a92ddacb 9 LogsCommand,
254d3579 10 PeerTubeServer,
a92ddacb 11 setAccessTokensToServers,
a92ddacb 12 waitJobs
bf54587a 13} from '@shared/server-commands'
fd8710b8 14
fd8710b8 15describe('Test logs', function () {
254d3579 16 let server: PeerTubeServer
a92ddacb 17 let logsCommand: LogsCommand
fd8710b8
C
18
19 before(async function () {
20 this.timeout(30000)
21
254d3579 22 server = await createSingleServer(1)
fd8710b8 23 await setAccessTokensToServers([ server ])
a92ddacb 24
89d241a7 25 logsCommand = server.logs
fd8710b8
C
26 })
27
566c125d 28 describe('With the standard log file', function () {
78d62f4d 29
566c125d 30 it('Should get logs with a start date', async function () {
5752683e 31 this.timeout(60000)
fd8710b8 32
89d241a7 33 await server.videos.upload({ attributes: { name: 'video 1' } })
566c125d 34 await waitJobs([ server ])
fd8710b8 35
566c125d 36 const now = new Date()
fd8710b8 37
89d241a7 38 await server.videos.upload({ attributes: { name: 'video 2' } })
566c125d 39 await waitJobs([ server ])
fd8710b8 40
a92ddacb
C
41 const body = await logsCommand.getLogs({ startDate: now })
42 const logsString = JSON.stringify(body)
fd8710b8 43
566c125d
C
44 expect(logsString.includes('video 1')).to.be.false
45 expect(logsString.includes('video 2')).to.be.true
46 })
47
48 it('Should get logs with an end date', async function () {
5752683e 49 this.timeout(60000)
566c125d 50
89d241a7 51 await server.videos.upload({ attributes: { name: 'video 3' } })
566c125d
C
52 await waitJobs([ server ])
53
54 const now1 = new Date()
55
89d241a7 56 await server.videos.upload({ attributes: { name: 'video 4' } })
566c125d
C
57 await waitJobs([ server ])
58
59 const now2 = new Date()
60
89d241a7 61 await server.videos.upload({ attributes: { name: 'video 5' } })
566c125d
C
62 await waitJobs([ server ])
63
a92ddacb
C
64 const body = await logsCommand.getLogs({ startDate: now1, endDate: now2 })
65 const logsString = JSON.stringify(body)
fd8710b8 66
566c125d
C
67 expect(logsString.includes('video 3')).to.be.false
68 expect(logsString.includes('video 4')).to.be.true
69 expect(logsString.includes('video 5')).to.be.false
70 })
fd8710b8 71
64553e88 72 it('Should filter by level', async function () {
5752683e 73 this.timeout(60000)
fd8710b8 74
566c125d 75 const now = new Date()
fd8710b8 76
89d241a7 77 await server.videos.upload({ attributes: { name: 'video 6' } })
566c125d 78 await waitJobs([ server ])
fd8710b8 79
566c125d 80 {
a92ddacb
C
81 const body = await logsCommand.getLogs({ startDate: now, level: 'info' })
82 const logsString = JSON.stringify(body)
fd8710b8 83
566c125d
C
84 expect(logsString.includes('video 6')).to.be.true
85 }
fd8710b8 86
566c125d 87 {
a92ddacb
C
88 const body = await logsCommand.getLogs({ startDate: now, level: 'warn' })
89 const logsString = JSON.stringify(body)
fd8710b8 90
566c125d
C
91 expect(logsString.includes('video 6')).to.be.false
92 }
93 })
78d62f4d 94
64553e88
C
95 it('Should filter by tag', async function () {
96 const now = new Date()
97
98 const { uuid } = await server.videos.upload({ attributes: { name: 'video 6' } })
99 await waitJobs([ server ])
100
101 {
102 const body = await logsCommand.getLogs({ startDate: now, level: 'debug', tagsOneOf: [ 'toto' ] })
103 expect(body).to.have.lengthOf(0)
104 }
105
106 {
107 const body = await logsCommand.getLogs({ startDate: now, level: 'debug', tagsOneOf: [ uuid ] })
108 expect(body).to.not.have.lengthOf(0)
109
110 for (const line of body) {
111 expect(line.tags).to.contain(uuid)
112 }
113 }
114 })
115
78d62f4d 116 it('Should log ping requests', async function () {
ff9112ad
C
117 this.timeout(10000)
118
78d62f4d
C
119 const now = new Date()
120
89d241a7 121 await server.servers.ping()
78d62f4d 122
a92ddacb
C
123 const body = await logsCommand.getLogs({ startDate: now, level: 'info' })
124 const logsString = JSON.stringify(body)
78d62f4d
C
125
126 expect(logsString.includes('/api/v1/ping')).to.be.true
127 })
128
129 it('Should not log ping requests', async function () {
5752683e 130 this.timeout(60000)
78d62f4d 131
9293139f 132 await killallServers([ server ])
78d62f4d 133
254d3579 134 await server.run({ log: { log_ping_requests: false } })
78d62f4d
C
135
136 const now = new Date()
137
89d241a7 138 await server.servers.ping()
78d62f4d 139
a92ddacb
C
140 const body = await logsCommand.getLogs({ startDate: now, level: 'info' })
141 const logsString = JSON.stringify(body)
78d62f4d
C
142
143 expect(logsString.includes('/api/v1/ping')).to.be.false
144 })
fd8710b8
C
145 })
146
566c125d 147 describe('With the audit log', function () {
5752683e 148
566c125d 149 it('Should get logs with a start date', async function () {
5752683e 150 this.timeout(60000)
fd8710b8 151
89d241a7 152 await server.videos.upload({ attributes: { name: 'video 7' } })
566c125d 153 await waitJobs([ server ])
fd8710b8 154
566c125d 155 const now = new Date()
fd8710b8 156
89d241a7 157 await server.videos.upload({ attributes: { name: 'video 8' } })
566c125d
C
158 await waitJobs([ server ])
159
a92ddacb
C
160 const body = await logsCommand.getAuditLogs({ startDate: now })
161 const logsString = JSON.stringify(body)
fd8710b8 162
566c125d
C
163 expect(logsString.includes('video 7')).to.be.false
164 expect(logsString.includes('video 8')).to.be.true
165
a92ddacb 166 expect(body).to.have.lengthOf(1)
566c125d 167
a92ddacb 168 const item = body[0]
566c125d
C
169
170 const message = JSON.parse(item.message)
171 expect(message.domain).to.equal('videos')
172 expect(message.action).to.equal('create')
173 })
174
175 it('Should get logs with an end date', async function () {
5752683e 176 this.timeout(60000)
566c125d 177
89d241a7 178 await server.videos.upload({ attributes: { name: 'video 9' } })
566c125d
C
179 await waitJobs([ server ])
180
181 const now1 = new Date()
182
89d241a7 183 await server.videos.upload({ attributes: { name: 'video 10' } })
566c125d
C
184 await waitJobs([ server ])
185
186 const now2 = new Date()
187
89d241a7 188 await server.videos.upload({ attributes: { name: 'video 11' } })
566c125d 189 await waitJobs([ server ])
fd8710b8 190
a92ddacb
C
191 const body = await logsCommand.getAuditLogs({ startDate: now1, endDate: now2 })
192 const logsString = JSON.stringify(body)
fd8710b8 193
566c125d
C
194 expect(logsString.includes('video 9')).to.be.false
195 expect(logsString.includes('video 10')).to.be.true
196 expect(logsString.includes('video 11')).to.be.false
197 })
fd8710b8
C
198 })
199
42b40636
C
200 describe('When creating log from the client', function () {
201
202 it('Should create a warn client log', async function () {
203 const now = new Date()
204
205 await server.logs.createLogClient({
206 payload: {
207 level: 'warn',
208 url: 'http://example.com',
209 message: 'my super client message'
210 },
211 token: null
212 })
213
214 const body = await logsCommand.getLogs({ startDate: now })
215 const logsString = JSON.stringify(body)
216
217 expect(logsString.includes('my super client message')).to.be.true
218 })
219
220 it('Should create an error authenticated client log', async function () {
221 const now = new Date()
222
223 await server.logs.createLogClient({
224 payload: {
225 url: 'https://example.com/page1',
226 level: 'error',
227 message: 'my super client message 2',
228 userAgent: 'super user agent',
229 meta: '{hello}',
230 stackTrace: 'super stack trace'
231 }
232 })
233
234 const body = await logsCommand.getLogs({ startDate: now })
235 const logsString = JSON.stringify(body)
236
237 expect(logsString.includes('my super client message 2')).to.be.true
238 expect(logsString.includes('super user agent')).to.be.true
239 expect(logsString.includes('super stack trace')).to.be.true
240 expect(logsString.includes('{hello}')).to.be.true
241 expect(logsString.includes('https://example.com/page1')).to.be.true
242 })
243
244 it('Should refuse to create client logs', async function () {
245 await server.kill()
246
247 await server.run({
248 log: {
249 accept_client_log: false
250 }
251 })
252
253 await server.logs.createLogClient({
254 payload: {
255 level: 'warn',
256 url: 'http://example.com',
257 message: 'my super client message'
258 },
259 expectedStatus: HttpStatusCode.FORBIDDEN_403
260 })
261 })
262 })
263
7c3b7976
C
264 after(async function () {
265 await cleanupTests([ server ])
fd8710b8
C
266 })
267})