Test Procedure — PlayerSync v2.1.5

Date : 2026-04-22  |  Branch: 1.21.1-dev  |  Minecraft 1.21.1 / NeoForge 21.1.137 / Java 21

Setup

  1. Démarrer MariaDB dev : docker compose up -d
  2. Build : ./gradlew build — le JAR apparaît dans build/libs/playersync-1.21.1-2.1.5.jar
  3. Deux instances serveur nécessaires : ./gradlew runServer (Server A) + copie avec Server_id différent dans run-2/config/playersync-common.toml (Server B)
  4. Adminer : http://localhost:8080 (login playersync/playersync)
  5. Monitorer en continu : tail -f run/logs/playersync/sync.log

Scenarios to test

CRITICAL

1. Drop + deco rapide + reco (regression Phase 0)

Steps:
  1. Join Server A, fill inventory with a diamond sword
  2. Drop the sword with Q
  3. Immediately disconnect (within 1 second)
  4. Rejoin Server A
Expected:
CRITICAL

2. Backpack duplication (Sophisticated Backpacks)

Steps:
  1. Join Server A, craft a SophisticatedBackpack, fill with 10 diamond blocks
  2. Disconnect
  3. Join Server B (configure different Server_id)
  4. Open backpack, count diamond blocks
Expected:
CRITICAL

3. Sophisticated Storage shulker duplication

Steps:
  1. Join Server A, pack a diamond-filled shulker into your inventory
  2. Have Player B (on same server) open your inventory via admin / trade / viewer
  3. Disconnect Player A
  4. Player A reconnects to Server B
  5. Unpack shulker, count diamonds
Expected:
CRITICAL

4. Kill -9 / OOM recovery

Steps:
  1. Join Server A, set inventory to known state (put a named diamond)
  2. Find server java PID : jps | grep Forge
  3. Kill brutally : kill -9 <pid> (or Task Manager → End Task on Windows)
  4. Restart server A
  5. Join Server A, check inventory
Expected:
HIGH

5. Zombie peer server join (no 30s wait)

Steps:
  1. In Adminer, manually set player_data.last_server=99999 and online=1 for a test UUID
  2. Join any running server with that UUID
Expected:
HIGH

6. Periodic auto-save (10 min)

Steps:
  1. Set auto_save_interval_minutes=1 in config for quick test
  2. Join server, add items to inventory
  3. Wait 1 minute (watch sync.log)
  4. Kill -9 server
  5. Restart, rejoin, check inventory
Expected:
HIGH

7. Pool saturation WARN log

Steps:
  1. Wait 5 minutes after server start (for first PoolStatsReporter tick)
  2. Grep sync.log for [POOL]
Expected:
HIGH

8. Heartbeat updates server_info

Steps:
  1. In Adminer, watch server_info.last_update for this server's id
  2. Refresh every 20s for 1 minute
Expected:
MEDIUM

9. Curios capability unavailable — no wipe

Steps:
  1. Equip curios items, die in lava
  2. Force-disconnect during death animation
  3. Reconnect
Expected:
MEDIUM

10. Cross-server claim + downstream short-circuit

Steps:
  1. Player connected on Server A
  2. Disconnect then immediately join Server B (within 200ms)
  3. Check sync.log on Server A
Expected:

Regression checks

Watch for these regressions after Phase 0-5 deployment:

Procédure de Test — PlayerSync v2.1.5 (Version Française)

Date : 2026-04-22  |  Branche : 1.21.1-dev  |  Minecraft 1.21.1 / NeoForge 21.1.137 / Java 21

Mise en place

  1. Démarrer MariaDB dev : docker compose up -d
  2. Build : ./gradlew build — le JAR sort dans build/libs/playersync-1.21.1-2.1.5.jar
  3. Deux instances serveur nécessaires : ./gradlew runServer (Serveur A) + copie avec Server_id différent dans run-2/config/playersync-common.toml (Serveur B)
  4. Adminer : http://localhost:8080 (login playersync/playersync)
  5. Monitorer en continu : tail -f run/logs/playersync/sync.log

Scénarios à tester

CRITIQUE

1. Drop + déco rapide + reco (régression Phase 0)

Étapes :
  1. Join Serveur A, remplir l'inventaire avec une épée de diamant
  2. Drop l'épée avec Q
  3. Déconnecter immédiatement (moins d'une seconde)
  4. Rejoin Serveur A
Résultat attendu :
CRITIQUE

2. Duplication Backpack (Sophisticated Backpacks)

Étapes :
  1. Join Serveur A, craft un SophisticatedBackpack, remplir avec 10 blocs de diamant
  2. Déconnecter
  3. Join Serveur B (configurer un Server_id différent)
  4. Ouvrir le backpack, compter les blocs de diamant
Résultat attendu :
CRITIQUE

3. Duplication shulker Sophisticated Storage

Étapes :
  1. Join Serveur A, packer un shulker plein de diamants dans l'inventaire
  2. Faire ouvrir l'inventaire par un autre Joueur B (via admin / échange / viewer)
  3. Déconnecter le Joueur A
  4. Joueur A se reconnecte sur Serveur B
  5. Déballer le shulker, compter les diamants
Résultat attendu :
CRITIQUE

4. Recovery kill -9 / OOM

Étapes :
  1. Join Serveur A, mettre l'inventaire dans un état connu (poser un diamant nommé)
  2. Trouver le PID java du serveur : jps | grep Forge
  3. Kill brutal : kill -9 <pid> (ou Task Manager → End Task sur Windows)
  4. Redémarrer le serveur A
  5. Join Serveur A, vérifier l'inventaire
Résultat attendu :
HIGH

5. Join sur serveur peer zombie (pas d'attente 30s)

Étapes :
  1. Dans Adminer, setter manuellement player_data.last_server=99999 et online=1 pour un UUID test
  2. Joindre n'importe quel serveur en cours avec cet UUID
Résultat attendu :
HIGH

6. Auto-save périodique (10 min)

Étapes :
  1. Setter auto_save_interval_minutes=1 en config pour un test rapide
  2. Join le serveur, ajouter des items à l'inventaire
  3. Attendre 1 minute (surveiller sync.log)
  4. Kill -9 du serveur
  5. Redémarrer, rejoin, vérifier l'inventaire
Résultat attendu :
HIGH

7. Log WARN sur saturation pool

Étapes :
  1. Attendre 5 minutes après le boot du serveur (premier tick PoolStatsReporter)
  2. Grep sync.log pour [POOL]
Résultat attendu :
HIGH

8. Heartbeat update server_info

Étapes :
  1. Dans Adminer, surveiller server_info.last_update pour l'id de ce serveur
  2. Refresh toutes les 20s pendant 1 minute
Résultat attendu :
MEDIUM

9. Capability Curios absente — pas de wipe

Étapes :
  1. Équiper des items curios, mourir dans la lave
  2. Force-déconnecter pendant l'animation de mort
  3. Reconnexion
Résultat attendu :
MEDIUM

10. Claim cross-server + court-circuit downstream

Étapes :
  1. Joueur connecté sur Serveur A
  2. Déco puis immédiatement join Serveur B (<200ms)
  3. Vérifier sync.log sur Serveur A
Résultat attendu :

Vérifications régressions

Surveiller ces régressions après le déploiement Phases 0-5 :

Author: vyrriox  |  PlayerSync v2.1.5  |  2026-04-22