191 lines
7.7 KiB
Go
191 lines
7.7 KiB
Go
# Rapport d'audit — Éléments inutilisés et problèmes identifiés
|
||
|
||
> Généré le 2026-02-18 — branche `feature/event`
|
||
|
||
---
|
||
|
||
## 1. Bugs critiques corrigés dans cette session
|
||
|
||
| Fichier | Ligne | Description | Statut |
|
||
|---------|-------|-------------|--------|
|
||
| `entrypoint.go` | 652, 664, 676, 688 | `fmt.Errorf(res.Err)` → format string non-constant (erreur de build) | ✅ Corrigé |
|
||
| `models/utils/abstracts.go` | 136 | `VerifyAuth` déréférençait `request.Admin` avant de vérifier `request != nil` | ✅ Corrigé |
|
||
| `models/utils/abstracts.go` | 68-78 | `DeepCopy()` faisait `Unmarshal` dans un pointeur nil → retournait toujours `nil` | ✅ Corrigé |
|
||
| `models/resources/resource.go` | 176 | `instances = append(instances)` — argument manquant, l'instance n'était jamais ajoutée | ✅ Corrigé |
|
||
| `models/resources/priced_resource.go` | 63-69 | Code mort après `return true` dans `IsBooked()` | ✅ Corrigé |
|
||
| `tools/remote_caller.go` | 118 | `CallDelete` vérifiait `req.Body == nil` (toujours vrai pour DELETE), court-circuitant la lecture de la réponse | ✅ Corrigé |
|
||
|
||
---
|
||
|
||
## 2. Debug prints à supprimer (fmt.Println en production)
|
||
|
||
Ces appels `fmt.Println` polluent stdout et peuvent exposer des informations sensibles.
|
||
|
||
| Fichier | Lignes | Contenu |
|
||
|---------|--------|---------|
|
||
| `models/bill/bill.go` | ~197 | `fmt.Println(err)` |
|
||
| `models/collaborative_area/collaborative_area_mongo_accessor.go` | ~95, 109, 118, 123 | Debug sur `res`, `sharedWorkspace.AllowedPeersGroup`, `canFound`, `peerskey` |
|
||
| `models/peer/peer_cache.go` | ~44, 55 | URL et `"Launching peer execution on..."` |
|
||
| `models/resources/storage.go` | ~196 | `fmt.Println("GetPriceHT", ...)` |
|
||
| `models/workflow/workflow.go` | ~158, 164, 170, 176 | 4× `fmt.Println(err)` |
|
||
| `tools/nats_caller.go` | ~110, 117, 122, 126 | 4× `fmt.Println()` divers |
|
||
| `tools/remote_caller.go` | 227 | `fmt.Println("Error reading the body...")` (devrait utiliser le logger) |
|
||
| `dbs/dbs.go` | 47 | `fmt.Println("Recovered. Error:\n", r, debug.Stack())` |
|
||
|
||
> **Note :** `priced_resource.go` et `data.go` corrigés dans cette session.
|
||
|
||
---
|
||
|
||
## 3. Code commenté significatif
|
||
|
||
### 3.1 Validation de pricing désactivée (workflow)
|
||
**Fichier :** `models/workflow/workflow.go` — ~lignes 631-634
|
||
```go
|
||
// Should be commented once the Pricing selection feature has been implemented
|
||
// if priced.SelectPricing() == nil {
|
||
// return resources, priceds, errors.New("no pricings are selected... can't proceed")
|
||
// }
|
||
```
|
||
Une vérification de sécurité critique est désactivée. Sans elle, des ressources sans pricing peuvent être traitées silencieusement.
|
||
|
||
### 3.2 PAY_PER_USE — stratégie supprimée mais traces restantes
|
||
**Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 47, 61-63
|
||
```go
|
||
// PAY_PER_USE // per request. ( unpredictible )
|
||
/*case PAY_PER_USE:
|
||
return bs, true*/
|
||
```
|
||
La constante `PAY_PER_USE` a été supprimée mais les commentaires laissés créent de la confusion.
|
||
|
||
### 3.3 Vérification d'autorisation peer désactivée
|
||
**Fichier :** `models/resources/resource.go` — lignes 98-104
|
||
```go
|
||
/*if ok, _ := utils.IsMySelf(request.PeerID, ...); ok {*/
|
||
profile = pricing.GetDefaultPricingProfile()
|
||
/*} else {
|
||
return nil, errors.New("no pricing profile found")
|
||
}*/
|
||
```
|
||
Le profil par défaut est retourné sans vérifier si le pair est bien `myself`. Sécurité à revoir.
|
||
|
||
---
|
||
|
||
## 4. Logique erronée non corrigée (à traiter)
|
||
|
||
### 4.1 IsTimeStrategy — logique inversée
|
||
**Fichier :** `models/common/pricing/pricing_strategy.go` — ligne 88
|
||
```go
|
||
func IsTimeStrategy(i int) bool {
|
||
return len(TimePricingStrategyList()) < i // BUG: devrait être ">"
|
||
}
|
||
```
|
||
La condition est inversée. Retourne `true` pour des valeurs hors de la liste. Fonction actuellement non utilisée (voir §5).
|
||
|
||
### 4.2 IsBillingStrategyAllowed — case SUBSCRIPTION sans retour
|
||
**Fichier :** `models/common/pricing/pricing_strategy.go` — lignes 54-65
|
||
```go
|
||
case SUBSCRIPTION:
|
||
/*case PAY_PER_USE:
|
||
return bs, true*/
|
||
// Aucun return ici → tombe dans le default
|
||
```
|
||
Le cas `SUBSCRIPTION` ne retourne rien explicitement, ce qui est trompeur.
|
||
|
||
---
|
||
|
||
## 5. Éléments inutilisés
|
||
|
||
### 5.1 Fonction jamais appelée
|
||
| Symbole | Fichier | Ligne |
|
||
|---------|---------|-------|
|
||
| `IsTimeStrategy(i int) bool` | `models/common/pricing/pricing_strategy.go` | 88 |
|
||
|
||
De plus, cette fonction a une logique erronée (voir §4.1).
|
||
|
||
### 5.2 Variable singleton inutilisée
|
||
| Symbole | Fichier | Ligne |
|
||
|---------|---------|-------|
|
||
| `HTTPCallerInstance` | `tools/remote_caller.go` | 57 |
|
||
|
||
Déclarée comme singleton mais jamais utilisée — de nouvelles instances sont créées via `NewHTTPCaller()`.
|
||
|
||
---
|
||
|
||
## 6. Tests supprimés (couverture perdue)
|
||
|
||
Les fichiers suivants ont été supprimés sur la branche `feature/event` et la couverture correspondante n'est plus assurée :
|
||
|
||
| Fichier supprimé | Modèles non couverts |
|
||
|------------------|----------------------|
|
||
| `models/peer/tests/peer_cache_test.go` | `PeerCache` — logique d'exécution distribuée |
|
||
| `models/peer/tests/peer_test.go` | `Peer` — modèle et accesseur |
|
||
| `models/utils/tests/abstracts_test.go` | `AbstractObject` — méthodes de base |
|
||
| `models/utils/tests/common_test.go` | `GenericStoreOne`, `GenericDeleteOne`, etc. |
|
||
| `models/workflow_execution/tests/workflow_test.go` | `WorkflowExecution` — modèle et accesseur |
|
||
|
||
> `models/order/tests/order_test.go` existe mais ne contient **aucune fonction de test**.
|
||
|
||
---
|
||
|
||
## 7. Fautes d'orthographe dans les identifiants publics
|
||
|
||
Ces typos sont dans des noms exportés (API publique) — les corriger est un **breaking change**.
|
||
|
||
### 7.1 `Instanciated` → `Instantiated`
|
||
Apparaît 50+ fois dans les types exportés centraux :
|
||
- `AbstractInstanciatedResource[T]` (resource.go, compute.go, data.go, storage.go, processing.go, workflow.go)
|
||
- `AbstractInstanciatedResource.Instances`
|
||
- Tests : `resources.AbstractInstanciatedResource[*MockInstance]{...}`
|
||
|
||
### 7.2 `ressource` → `resource` (dans les messages d'erreur)
|
||
**Fichier :** `entrypoint.go` — messages dans `LoadOneStorage`, `LoadOneComputing`, etc.
|
||
```go
|
||
"Error while loading storage ressource " + storageId // "ressource" est du français
|
||
```
|
||
|
||
### 7.3 `GARANTED` → `GUARANTEED`
|
||
**Fichiers :** `models/common/pricing/pricing_profile.go`, `models/resources/storage.go`
|
||
```go
|
||
GARANTED_ON_DELAY // pricing_profile.go:72
|
||
GARANTED // pricing_profile.go:73
|
||
GARANTED_ON_DELAY_STORAGE // storage.go:106
|
||
GARANTED_STORAGE // storage.go:107
|
||
```
|
||
|
||
### 7.4 `CREATE_EXECTUTION` → `CREATE_EXECUTION`
|
||
**Fichier :** `tools/nats_caller.go` — ligne 34
|
||
```go
|
||
CREATE_EXECTUTION // faute de frappe dans la constante enum
|
||
```
|
||
|
||
### 7.5 `PROPALGATION` → `PROPAGATION`
|
||
**Fichier :** `tools/nats_caller.go` — lignes 29, 45, 56
|
||
```go
|
||
"propalgation event" // et PROPALGATION_EVENT
|
||
```
|
||
|
||
---
|
||
|
||
## 8. Incohérences de nommage mineures
|
||
|
||
| Fichier | Problème |
|
||
|---------|----------|
|
||
| `models/resources/interfaces.go:19` | Paramètre `instance_id` en snake_case dans une signature Go (devrait être `instanceID`) |
|
||
| `entrypoint.go:505` | Message de panique dans `CopyOne` dit `"Panic recovered in UpdateOne"` |
|
||
| `tools/remote_caller.go:110` | Commentaire `// CallPut calls the DELETE method` (copie-colle incorrect) |
|
||
|
||
---
|
||
|
||
## 9. Résumé
|
||
|
||
| Catégorie | Nombre | Priorité |
|
||
|-----------|--------|----------|
|
||
| Bugs critiques corrigés | 6 | ✅ Fait |
|
||
| Debug `fmt.Println` restants | 15+ | 🔴 Haute |
|
||
| Code commenté important | 3 | 🟠 Moyenne |
|
||
| Logique erronée (non corrigée) | 2 | 🟠 Moyenne |
|
||
| Éléments inutilisés | 2 | 🟡 Faible |
|
||
| Tests supprimés (couverture perdue) | 5 fichiers | 🟠 Moyenne |
|
||
| Typos dans API publique | 5 types | 🟡 Faible (breaking change) |
|
||
| Incohérences mineures | 3 | 🟢 Très faible |
|