# Testing Guide - Linux BenchTools

Guide de test pour vérifier que tout fonctionne correctement.

## ✅ Checklist de test

### 1. Installation

```bash
# Cloner le projet
git clone https://gitea.maison43.duckdns.org/gilles/linux-benchtools.git
cd linux-benchtools

# Vérifier les fichiers
ls -la

# Exécuter l'installation
./install.sh
```

**Résultat attendu** :
- ✅ Docker images construites
- ✅ Conteneurs démarrés
- ✅ Fichier `.env` créé avec un token
- ✅ Message de succès avec les URLs

### 2. Vérification des services

```bash
# Vérifier que les conteneurs tournent
docker compose ps

# Devrait afficher :
# linux_benchtools_backend   running   0.0.0.0:8007->8007/tcp
# linux_benchtools_frontend  running   0.0.0.0:8087->80/tcp
```

```bash
# Tester le backend
curl http://localhost:8007/api/health

# Résultat attendu : {"status":"ok"}
```

```bash
# Tester le frontend
curl -I http://localhost:8087

# Résultat attendu : HTTP/1.1 200 OK
```

### 3. Test de l'API Backend

#### Health Check
```bash
curl http://localhost:8007/api/health
# {"status":"ok"}
```

#### Stats (base vide)
```bash
curl http://localhost:8007/api/stats
# {"total_devices":0,"total_benchmarks":0,"avg_global_score":0,"last_benchmark_at":null}
```

#### Liste devices (vide)
```bash
curl http://localhost:8007/api/devices
# {"items":[],"total":0,"page":1,"page_size":20}
```

### 4. Test du Frontend

Ouvrir dans un navigateur :
```
http://localhost:8087
```

**Vérifications** :
- ✅ Dashboard s'affiche avec le thème Monokai dark
- ✅ Stats affichent "0" partout
- ✅ Message "Aucun device trouvé"
- ✅ Commande de benchmark est affichée
- ✅ Navigation fonctionne (Dashboard, Devices, Settings)

### 5. Test du script bench.sh

#### Test d'aide
```bash
./scripts/bench.sh --help
```

**Résultat attendu** :
- Affiche l'usage
- Liste toutes les options

#### Test avec erreur (sans paramètres)
```bash
./scripts/bench.sh
```

**Résultat attendu** :
- Message d'erreur clair
- Indique qu'il manque --server et --token

#### Test complet (simulation)

Sur la machine serveur (ou n'importe quelle machine Linux) :

```bash
# Récupérer le token
TOKEN=$(grep API_TOKEN .env | cut -d= -f2)

# Exécuter le benchmark
curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
  --server http://localhost:8007/api/benchmark \
  --token "$TOKEN" \
  --short
```

**Résultat attendu** :
```
[INFO] Linux BenchTools Client v1.0.0
[INFO] Checking dependencies...
[INFO] All dependencies satisfied
[INFO] Collecting hardware information...
[INFO] Running benchmarks...
[INFO] Running CPU benchmark...
[INFO] Running memory benchmark...
[INFO] Running disk benchmark...
[INFO] Building JSON payload...
[INFO] Sending results to server...
[INFO] Benchmark submitted successfully!
[INFO] Response: {"status":"ok","device_id":1,"benchmark_id":1,...}
[INFO] Benchmark completed!
```

#### Vérifier dans l'interface

1. Rafraîchir le Dashboard (F5)
2. Vérifier que :
   - Total Devices : 1
   - Total Benchmarks : 1
   - Le device apparaît dans le tableau
   - Le score global est affiché

3. Cliquer sur "Voir" pour le device
4. Vérifier que :
   - Informations hardware affichées
   - Dernier benchmark visible
   - Onglets fonctionnent

### 6. Test Upload de document

1. Aller sur la page détail d'un device
2. Onglet "Documents"
3. Sélectionner un fichier PDF
4. Choisir un type (ex: "manual")
5. Cliquer "Upload"

**Résultat attendu** :
- ✅ Toast de confirmation
- ✅ Document apparaît dans la liste
- ✅ Bouton "Télécharger" fonctionne

### 7. Test Liens constructeur

1. Page détail device → Onglet "Liens"
2. Ajouter un lien :
   - Label : "Support HP"
   - URL : "https://support.hp.com"
3. Cliquer "Ajouter"

**Résultat attendu** :
- ✅ Lien apparaît
- ✅ Lien cliquable
- ✅ Bouton supprimer fonctionne

### 8. Test Multiple Benchmarks

Exécuter 3 fois le script bench.sh sur la même machine :

```bash
# Bench 1
curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
  --server http://localhost:8007/api/benchmark \
  --token "$TOKEN" --short

# Attendre 30s

# Bench 2
curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
  --server http://localhost:8007/api/benchmark \
  --token "$TOKEN" --short

# Attendre 30s

# Bench 3
curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
  --server http://localhost:8007/api/benchmark \
  --token "$TOKEN" --short
```

**Vérifications** :
- ✅ Total Benchmarks : 3
- ✅ Onglet "Historique Benchmarks" affiche 3 entrées
- ✅ Scores peuvent varier légèrement

### 9. Test Logs

```bash
# Voir les logs backend
docker compose logs backend

# Vérifier qu'il n'y a pas d'erreurs Python
# Devrait afficher les requêtes API
```

### 10. Test Persistance

```bash
# Arrêter les conteneurs
docker compose down

# Vérifier que les données persistent
ls -la backend/data/
# Devrait afficher data.db

ls -la uploads/
# Devrait afficher les documents uploadés

# Redémarrer
docker compose up -d

# Attendre quelques secondes
sleep 5

# Vérifier que les données sont toujours là
curl http://localhost:8007/api/devices
# Devrait afficher les devices précédents
```

## 🧪 Tests avancés

### Test avec iperf3

Si vous avez un serveur iperf3 :

```bash
# Sur le serveur de bench, lancer iperf3
docker run -d --name iperf3-server -p 5201:5201 networkstatic/iperf3 -s

# Exécuter le benchmark avec tests réseau
curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
  --server http://localhost:8007/api/benchmark \
  --token "$TOKEN" \
  --iperf-server localhost

# Vérifier que network_score n'est pas null
```

### Test sur différentes machines

1. Machine 1 (serveur puissant)
2. Machine 2 (Raspberry Pi)
3. Machine 3 (vieille machine)

**Vérifier** :
- Scores différents selon les performances
- Classement cohérent dans le Dashboard

### Test de charge

```bash
# Envoyer 10 benchmarks en parallèle
for i in {1..10}; do
  curl -s http://localhost:8087/scripts/bench.sh | bash -s -- \
    --server http://localhost:8007/api/benchmark \
    --token "$TOKEN" \
    --device "test-machine-$i" \
    --short &
done

wait

# Vérifier que tous ont été enregistrés
curl http://localhost:8007/api/stats
```

## 🐛 Tests d'erreur

### Token invalide

```bash
curl -X POST http://localhost:8007/api/benchmark \
  -H "Authorization: Bearer INVALID_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

# Résultat attendu : HTTP 401
```

### JSON invalide

```bash
curl -X POST http://localhost:8007/api/benchmark \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d 'invalid json'

# Résultat attendu : HTTP 400
```

### Device inexistant

```bash
curl http://localhost:8007/api/devices/99999

# Résultat attendu : HTTP 404
```

## 📊 Résumé des tests

| Test | Commande | Résultat attendu |
|------|----------|------------------|
| Installation | `./install.sh` | Services démarrés |
| Health check | `curl localhost:8007/api/health` | `{"status":"ok"}` |
| Frontend | Navigateur | Dashboard visible |
| Benchmark | `./scripts/bench.sh` | Succès + device créé |
| Upload doc | Interface web | Document uploadé |
| Lien | Interface web | Lien ajouté |
| Persistance | `docker compose down/up` | Données conservées |

## ✅ Tous les tests passent ?

Si oui : **Félicitations ! L'application fonctionne parfaitement** 🎉

Si non : Consultez [DEPLOYMENT.md](DEPLOYMENT.md) section Troubleshooting

## 📞 Problèmes courants

### Backend ne démarre pas
```bash
docker compose logs backend
```
Vérifier les erreurs Python

### Port déjà utilisé
```bash
ss -tulpn | grep 8007
# Changer le port dans .env
```

### Benchmark échoue
```bash
# Vérifier les dépendances sur la machine cliente
sysbench --version
fio --version
```

---

**Happy Testing!** 🧪
