diff options
| author | exatombe <jeremy27.clara22@gmail.com> | 2025-10-30 00:16:17 +0100 |
|---|---|---|
| committer | exatombe <jeremy27.clara22@gmail.com> | 2025-10-30 00:16:17 +0100 |
| commit | 0068551700163729c1c42b4435b51064e28461a2 (patch) | |
| tree | c1b3407d052642a97285154797976433b157aa22 /scripts/test_orchestrator_api.go | |
| parent | 7604e249e332a872ae2e19f9826b56e3bd9313aa (diff) | |
feat: Implement orchestrator for PostgreSQL management via Docker and Kubernetes
- Added configuration options for orchestrator in config.go, including Docker and Kubernetes settings.
- Created orchestrator package to manage PostgreSQL instances, supporting automatic container creation, conflict resolution, and resource limits.
- Implemented Docker orchestrator with methods for creating, deleting, and retrieving database information.
- Added Kubernetes orchestrator skeleton with TODOs for future implementation.
- Developed comprehensive README documentation for orchestrator usage and configuration.
- Created test script for orchestrator API to validate functionality and ensure reliability.
Diffstat (limited to 'scripts/test_orchestrator_api.go')
| -rw-r--r-- | scripts/test_orchestrator_api.go | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/scripts/test_orchestrator_api.go b/scripts/test_orchestrator_api.go new file mode 100644 index 0000000..ee926ee --- /dev/null +++ b/scripts/test_orchestrator_api.go @@ -0,0 +1,137 @@ +package main + +import ( + "context" + "fmt" + "log" + + "github.com/ketsuna-org/sovrabase/internal/config" + "github.com/ketsuna-org/sovrabase/internal/orchestrator" +) + +func main() { + log.Println("đ Test de l'API Orchestrator\n") + + // Charger la configuration + cfg, err := config.LoadConfig("../config.toml") + if err != nil { + log.Fatalf("â Erreur de chargement de la config: %v", err) + } + + log.Printf("â
Configuration chargĂ©e (type: %s)\n\n", cfg.Orchestrator.Type) + + // CrĂ©er l'orchestrateur + orch, err := orchestrator.NewOrchestrator(&cfg.Orchestrator) + if err != nil { + log.Fatalf("â Erreur de crĂ©ation de l'orchestrateur: %v", err) + } + + ctx := context.Background() + projectID := "my-awesome-project" + + // Test 1: VĂ©rifier si la base existe dĂ©jĂ + log.Println("đ Test 1: VĂ©rification de l'existence") + exists, err := orch.DatabaseExists(ctx, projectID) + if err != nil { + log.Fatalf("â Erreur: %v", err) + } + log.Printf(" Existe dĂ©jĂ : %v\n\n", exists) + + // Si existe dĂ©jĂ , la supprimer d'abord + if exists { + log.Println("đïž Base existante dĂ©tectĂ©e, suppression...") + if err := orch.DeleteDatabase(ctx, projectID); err != nil { + log.Fatalf("â Erreur de suppression: %v", err) + } + log.Println(" â
SupprimĂ©e\n") + } + + // Test 2: CrĂ©er une nouvelle base de donnĂ©es + log.Println("đ Test 2: CrĂ©ation d'une nouvelle base de donnĂ©es") + options := &orchestrator.DatabaseOptions{ + PostgresVersion: "16-alpine", + Port: 5434, + Memory: "512m", + CPUs: "0.5", + } + + dbInfo, err := orch.CreateDatabase(ctx, projectID, options) + if err != nil { + log.Fatalf("â Erreur de crĂ©ation: %v", err) + } + + log.Println(" â
Base de donnĂ©es créée avec succĂšs!") + printDatabaseInfo(dbInfo) + + // Test 3: RĂ©cupĂ©rer les informations + log.Println("\nđ Test 3: RĂ©cupĂ©ration des informations") + dbInfo2, err := orch.GetDatabaseInfo(ctx, projectID) + if err != nil { + log.Fatalf("â Erreur: %v", err) + } + log.Println(" â
Informations rĂ©cupĂ©rĂ©es") + printDatabaseInfo(dbInfo2) + + // Test 4: Lister toutes les bases de donnĂ©es + log.Println("\nđ Test 4: Liste de toutes les bases de donnĂ©es") + databases, err := orch.ListDatabases(ctx) + if err != nil { + log.Fatalf("â Erreur: %v", err) + } + log.Printf(" â
Nombre de bases trouvĂ©es: %d\n", len(databases)) + for i, db := range databases { + log.Printf(" %d. %s (%s) - Port: %s\n", i+1, db.ProjectID, db.Status, db.Port) + } + + // Test 5: Tester un conflit (crĂ©ation d'une base existante) + log.Println("\nđ Test 5: Test de conflit (crĂ©ation d'une base existante)") + _, err = orch.CreateDatabase(ctx, projectID, options) + if err != nil { + log.Printf(" â
Erreur attendue reçue: %v\n", err) + } else { + log.Println(" â Aucune erreur reçue (inattendu!)") + } + + // Test 6: Supprimer la base de donnĂ©es + log.Println("\nđ Test 6: Suppression de la base de donnĂ©es") + if err := orch.DeleteDatabase(ctx, projectID); err != nil { + log.Fatalf("â Erreur de suppression: %v", err) + } + log.Println(" â
Base de donnĂ©es supprimĂ©e") + + // Test 7: VĂ©rifier que la base n'existe plus + log.Println("\nđ Test 7: VĂ©rification de la suppression") + exists, err = orch.DatabaseExists(ctx, projectID) + if err != nil { + log.Fatalf("â Erreur: %v", err) + } + log.Printf(" â
Existe: %v (attendu: false)\n", exists) + + log.Println("\n" + repeat("=", 60)) + log.Println("đ Tous les tests sont passĂ©s avec succĂšs!") + log.Println(repeat("=", 60)) +} + +func printDatabaseInfo(db *orchestrator.DatabaseInfo) { + fmt.Println("\n " + repeat("-", 50)) + fmt.Printf(" đ Projet: %s\n", db.ProjectID) + fmt.Printf(" đŠ Conteneur: %s\n", db.ContainerName) + fmt.Printf(" đ Container ID: %s\n", db.ContainerID[:12]) + fmt.Printf(" đ Status: %s\n", db.Status) + fmt.Printf(" đ Version: PostgreSQL %s\n", db.PostgresVersion) + fmt.Printf(" đ Port: %s\n", db.Port) + fmt.Printf(" đŸ Database: %s\n", db.Database) + fmt.Printf(" đ€ User: %s\n", db.User) + fmt.Printf(" đ Password: %s\n", db.Password) + fmt.Printf(" đ Connection: %s\n", db.ConnectionString) + fmt.Printf(" đ
Created: %s\n", db.CreatedAt.Format("2006-01-02 15:04:05")) + fmt.Println(" " + repeat("-", 50)) +} + +func repeat(s string, n int) string { + result := "" + for i := 0; i < n; i++ { + result += s + } + return result +} |
