From 3a4992633ee62d5edfbb484d9c6bcb3cf158489d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 31 Jul 2023 14:34:36 +0200 Subject: Migrate server to ESM Sorry for the very big commit that may lead to git log issues and merge conflicts, but it's a major step forward: * Server can be faster at startup because imports() are async and we can easily lazy import big modules * Angular doesn't seem to support ES import (with .js extension), so we had to correctly organize peertube into a monorepo: * Use yarn workspace feature * Use typescript reference projects for dependencies * Shared projects have been moved into "packages", each one is now a node module (with a dedicated package.json/tsconfig.json) * server/tools have been moved into apps/ and is now a dedicated app bundled and published on NPM so users don't have to build peertube cli tools manually * server/tests have been moved into packages/ so we don't compile them every time we want to run the server * Use isolatedModule option: * Had to move from const enum to const (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums) * Had to explictely specify "type" imports when used in decorators * Prefer tsx (that uses esbuild under the hood) instead of ts-node to load typescript files (tests with mocha or scripts): * To reduce test complexity as esbuild doesn't support decorator metadata, we only test server files that do not import server models * We still build tests files into js files for a faster CI * Remove unmaintained peertube CLI import script * Removed some barrels to speed up execution (less imports) --- packages/tests/src/cli/update-host.ts | 134 ++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 packages/tests/src/cli/update-host.ts (limited to 'packages/tests/src/cli/update-host.ts') diff --git a/packages/tests/src/cli/update-host.ts b/packages/tests/src/cli/update-host.ts new file mode 100644 index 000000000..e5f165e5e --- /dev/null +++ b/packages/tests/src/cli/update-host.ts @@ -0,0 +1,134 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import { expect } from 'chai' +import { getAllFiles } from '@peertube/peertube-core-utils' +import { + cleanupTests, + createSingleServer, + killallServers, + makeActivityPubGetRequest, + PeerTubeServer, + setAccessTokensToServers, + waitJobs +} from '@peertube/peertube-server-commands' +import { parseTorrentVideo } from '@tests/shared/webtorrent.js' + +describe('Test update host scripts', function () { + let server: PeerTubeServer + + before(async function () { + this.timeout(60000) + + const overrideConfig = { + webserver: { + port: 9256 + } + } + // Run server 2 to have transcoding enabled + server = await createSingleServer(2, overrideConfig) + await setAccessTokensToServers([ server ]) + + // Upload two videos for our needs + const { uuid: video1UUID } = await server.videos.upload() + await server.videos.upload() + + // Create a user + await server.users.create({ username: 'toto', password: 'coucou' }) + + // Create channel + const videoChannel = { + name: 'second_channel', + displayName: 'second video channel', + description: 'super video channel description' + } + await server.channels.create({ attributes: videoChannel }) + + // Create comments + const text = 'my super first comment' + await server.comments.createThread({ videoId: video1UUID, text }) + + await waitJobs(server) + }) + + it('Should run update host', async function () { + this.timeout(30000) + + await killallServers([ server ]) + // Run server with standard configuration + await server.run() + + await server.cli.execWithEnv(`npm run update-host`) + }) + + it('Should have updated videos url', async function () { + const { total, data } = await server.videos.list() + expect(total).to.equal(2) + + for (const video of data) { + const { body } = await makeActivityPubGetRequest(server.url, '/videos/watch/' + video.uuid) + + expect(body.id).to.equal('http://127.0.0.1:9002/videos/watch/' + video.uuid) + + const videoDetails = await server.videos.get({ id: video.uuid }) + + expect(videoDetails.trackerUrls[0]).to.include(server.host) + expect(videoDetails.streamingPlaylists[0].playlistUrl).to.include(server.host) + expect(videoDetails.streamingPlaylists[0].segmentsSha256Url).to.include(server.host) + } + }) + + it('Should have updated video channels url', async function () { + const { data, total } = await server.channels.list({ sort: '-name' }) + expect(total).to.equal(3) + + for (const channel of data) { + const { body } = await makeActivityPubGetRequest(server.url, '/video-channels/' + channel.name) + + expect(body.id).to.equal('http://127.0.0.1:9002/video-channels/' + channel.name) + } + }) + + it('Should have updated accounts url', async function () { + const body = await server.accounts.list() + expect(body.total).to.equal(3) + + for (const account of body.data) { + const usernameWithDomain = account.name + const { body } = await makeActivityPubGetRequest(server.url, '/accounts/' + usernameWithDomain) + + expect(body.id).to.equal('http://127.0.0.1:9002/accounts/' + usernameWithDomain) + } + }) + + it('Should have updated torrent hosts', async function () { + this.timeout(30000) + + const { data } = await server.videos.list() + expect(data).to.have.lengthOf(2) + + for (const video of data) { + const videoDetails = await server.videos.get({ id: video.id }) + const files = getAllFiles(videoDetails) + + expect(files).to.have.lengthOf(8) + + for (const file of files) { + expect(file.magnetUri).to.contain('127.0.0.1%3A9002%2Ftracker%2Fsocket') + expect(file.magnetUri).to.contain('127.0.0.1%3A9002%2Fstatic%2F') + + const torrent = await parseTorrentVideo(server, file) + const announceWS = torrent.announce.find(a => a === 'ws://127.0.0.1:9002/tracker/socket') + expect(announceWS).to.not.be.undefined + + const announceHttp = torrent.announce.find(a => a === 'http://127.0.0.1:9002/tracker/announce') + expect(announceHttp).to.not.be.undefined + + expect(torrent.urlList[0]).to.contain('http://127.0.0.1:9002/static/') + } + } + }) + + after(async function () { + await cleanupTests([ server ]) + }) +}) -- cgit v1.2.3