From b99ff1d27a95b9fee4466e9a6c4ea31313e29b16 Mon Sep 17 00:00:00 2001
From: Jordy Cabannes <jcabannes@linagora.com>
Date: Fri, 12 Apr 2024 17:17:37 +0200
Subject: [PATCH] fix: use containers names for federation-server integration
 tests

---
 .../src/__testData__/docker-compose.yml       | 10 +++
 packages/federation-server/src/index.test.ts  | 81 ++++++-------------
 2 files changed, 33 insertions(+), 58 deletions(-)

diff --git a/packages/federation-server/src/__testData__/docker-compose.yml b/packages/federation-server/src/__testData__/docker-compose.yml
index ddb51bf3..df75879e 100644
--- a/packages/federation-server/src/__testData__/docker-compose.yml
+++ b/packages/federation-server/src/__testData__/docker-compose.yml
@@ -3,6 +3,7 @@ version: '3.8'
 services:
   postgresql:
     image: postgres:13-bullseye
+    container_name: postgresql
     volumes:
       - ./synapse-data/matrix.example.com.log.config:/data/matrix.example.com.log.config
       - ./db/init-synapse-db.sh:/docker-entrypoint-initdb.d/init-synapse-db.sh
@@ -23,6 +24,7 @@ services:
 
   synapse-federation: &synapse_template
     image: matrixdotorg/synapse:v1.89.0
+    container_name: synapse-federation
     volumes:
       - ./synapse-data:/data
       - ./nginx/ssl/ca.pem:/etc/ssl/certs/ca.pem
@@ -44,6 +46,7 @@ services:
 
   synapse-1:
     <<: *synapse_template
+    container_name: synapse-1
     environment: 
       - UID=${MYUID}
       - VIRTUAL_PORT=8008
@@ -52,6 +55,7 @@ services:
 
   synapse-2:
     <<: *synapse_template
+    container_name: synapse-2
     environment: 
       - UID=${MYUID}
       - VIRTUAL_PORT=8008
@@ -60,6 +64,7 @@ services:
 
   synapse-3:
     <<: *synapse_template
+    container_name: synapse-3
     environment: 
       - UID=${MYUID}
       - VIRTUAL_PORT=8008
@@ -93,6 +98,7 @@ services:
 
   federation-server:
     image: federation-server
+    container_name: federation-server
     build:
       context: ../../../..
       dockerfile: ./packages/federation-server/Dockerfile
@@ -117,6 +123,7 @@ services:
 
   identity-server-1: &identity-server-template
     image: identity-server
+    container_name: identity-server-1
     build:
       context: ../../../..
       dockerfile: ./packages/federation-server/src/__testData__/identity-server/Dockerfile
@@ -139,6 +146,7 @@ services:
 
   identity-server-2:
     <<: *identity-server-template
+    container_name: identity-server-2
     depends_on:
       annuaire:
         condition: service_started
@@ -156,6 +164,7 @@ services:
   
   identity-server-3:
     <<: *identity-server-template
+    container_name: identity-server-3
     depends_on:
       annuaire:
         condition: service_started
@@ -173,6 +182,7 @@ services:
 
   nginx-proxy:
     image: nginxproxy/nginx-proxy
+    container_name: nginx-proxy
     ports:
       - 443:443
     volumes:
diff --git a/packages/federation-server/src/index.test.ts b/packages/federation-server/src/index.test.ts
index d374d670..0a149ff5 100644
--- a/packages/federation-server/src/index.test.ts
+++ b/packages/federation-server/src/index.test.ts
@@ -1,5 +1,4 @@
 import { Hash } from '@twake/crypto'
-import dockerComposeV1, { v2 as dockerComposeV2 } from 'docker-compose'
 import express from 'express'
 import fs from 'fs'
 import type * as http from 'http'
@@ -57,7 +56,6 @@ describe('Federation server', () => {
   })
 
   describe('Integration tests', () => {
-    let containerNameSuffix: string
     let startedCompose: StartedDockerComposeEnvironment
     let identity1IPAddress: string
     let identity2IPAddress: string
@@ -172,43 +170,17 @@ describe('Federation server', () => {
       syswideCas.addCAs(
         path.join(pathToTestDataFolder, 'nginx', 'ssl', 'ca.pem')
       )
-      Promise.allSettled([dockerComposeV1.version(), dockerComposeV2.version()])
-        // eslint-disable-next-line @typescript-eslint/promise-function-async
-        .then((results) => {
-          const promiseSucceededIndex = results.findIndex(
-            (res) => res.status === 'fulfilled'
-          )
-          if (promiseSucceededIndex === -1) {
-            throw new Error('Docker compose is not installed')
-          }
-          containerNameSuffix = promiseSucceededIndex === 0 ? '_' : '-'
-          return new DockerComposeEnvironment(
-            path.join(pathToTestDataFolder),
-            'docker-compose.yml'
-          )
-            .withEnvironment({ MYUID: os.userInfo().uid.toString() })
-            .withWaitStrategy(
-              `postgresql${containerNameSuffix}1`,
-              Wait.forHealthCheck()
-            )
-            .withWaitStrategy(
-              `synapse-federation${containerNameSuffix}1`,
-              Wait.forHealthCheck()
-            )
-            .withWaitStrategy(
-              `synapse-1${containerNameSuffix}1`,
-              Wait.forHealthCheck()
-            )
-            .withWaitStrategy(
-              `synapse-2${containerNameSuffix}1`,
-              Wait.forHealthCheck()
-            )
-            .withWaitStrategy(
-              `synapse-3${containerNameSuffix}1`,
-              Wait.forHealthCheck()
-            )
-            .up()
-        })
+      new DockerComposeEnvironment(
+        path.join(pathToTestDataFolder),
+        'docker-compose.yml'
+      )
+        .withEnvironment({ MYUID: os.userInfo().uid.toString() })
+        .withWaitStrategy('postgresql', Wait.forHealthCheck())
+        .withWaitStrategy('synapse-federation', Wait.forHealthCheck())
+        .withWaitStrategy('synapse-1', Wait.forHealthCheck())
+        .withWaitStrategy('synapse-2', Wait.forHealthCheck())
+        .withWaitStrategy('synapse-3', Wait.forHealthCheck())
+        .up()
         // eslint-disable-next-line @typescript-eslint/promise-function-async
         .then((upResult) => {
           startedCompose = upResult
@@ -275,10 +247,10 @@ describe('Federation server', () => {
 
       beforeAll((done) => {
         identity1IPAddress = startedCompose
-          .getContainer(`identity-server-1${containerNameSuffix}1`)
+          .getContainer(`identity-server-1`)
           .getIpAddress('test')
         identity2IPAddress = startedCompose
-          .getContainer(`identity-server-2${containerNameSuffix}1`)
+          .getContainer(`identity-server-2`)
           .getIpAddress('test')
 
         confOriginalContent = fs.readFileSync(
@@ -295,9 +267,8 @@ describe('Federation server', () => {
           'utf-8'
         )
 
-        federationServerContainer = startedCompose.getContainer(
-          `federation-server${containerNameSuffix}1`
-        )
+        federationServerContainer =
+          startedCompose.getContainer('federation-server')
 
         federationServerContainer
           .restart()
@@ -746,25 +717,19 @@ describe('Federation server', () => {
                 'Certificates files for federation server has not been created'
               )
             return Promise.all([
-              startedCompose
-                .getContainer(`identity-server-1${containerNameSuffix}1`)
-                .restart(),
-              startedCompose
-                .getContainer(`identity-server-2${containerNameSuffix}1`)
-                .restart(),
-              startedCompose
-                .getContainer(`identity-server-3${containerNameSuffix}1`)
-                .restart()
+              startedCompose.getContainer('identity-server-1').restart(),
+              startedCompose.getContainer('identity-server-2').restart(),
+              startedCompose.getContainer('identity-server-3').restart()
             ])
           })
           // eslint-disable-next-line @typescript-eslint/promise-function-async
           .then(() => {
             identity1IPAddress = startedCompose
-              .getContainer(`identity-server-1${containerNameSuffix}1`)
+              .getContainer(`identity-server-1`)
               .getIpAddress('test')
 
             identity2IPAddress = startedCompose
-              .getContainer(`identity-server-2${containerNameSuffix}1`)
+              .getContainer(`identity-server-2`)
               .getIpAddress('test')
 
             const testConfig: Config = {
@@ -776,16 +741,16 @@ describe('Federation server', () => {
               database_user: 'twake',
               database_password: 'twake!1',
               database_host: `${startedCompose
-                .getContainer(`postgresql${containerNameSuffix}1`)
+                .getContainer(`postgresql`)
                 .getHost()}:5432`,
               database_name: 'federation',
               ldap_base: 'dc=example,dc=com',
               ldap_uri: `ldap://${startedCompose
-                .getContainer(`postgresql${containerNameSuffix}1`)
+                .getContainer(`postgresql`)
                 .getHost()}:389`,
               matrix_database_engine: 'pg',
               matrix_database_host: `${startedCompose
-                .getContainer(`postgresql${containerNameSuffix}1`)
+                .getContainer(`postgresql`)
                 .getHost()}:5432`,
               matrix_database_name: 'synapsefederation',
               matrix_database_user: 'synapse',