79 lines
3.4 KiB
Go
79 lines
3.4 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/Pingu-Studio/MaidnCLI/internal/config"
|
|
)
|
|
|
|
func onboardingConfig() config.Config {
|
|
return config.Config{
|
|
Git: config.GitConfig{BaseURL: "https://git.example.test", Owner: "test-org-2"},
|
|
Flux: config.FluxConfig{Branch: "main", RepoName: "cluster", ManifestsRepo: "manifests", ClusterDomain: "example.test"},
|
|
Delivery: config.DeliveryConfig{
|
|
AppName: "web-ui", AppRepoURL: "https://git.example.test/test-org-2/web-ui.git", AppRepoRef: "main", ProductionBranch: "production",
|
|
ImageRepository: "registry.example.test/test-org-2/web-ui", BuildOutputDirectory: "dist", BuildConfiguration: "production",
|
|
WebhookHostname: "tekton.example.test", WebhookPath: "/",
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestGenerateAppDeliveryReplacesOnlyKnownGeneratedFiles(t *testing.T) {
|
|
dir := t.TempDir()
|
|
tektonDir := filepath.Join(dir, ".tekton")
|
|
if err := os.Mkdir(tektonDir, 0755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, name := range []string{"kustomization.yaml", "pipeline.yaml"} {
|
|
if err := os.WriteFile(filepath.Join(tektonDir, name), []byte("old generated content\n"), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if err := GenerateAppDelivery(dir, onboardingConfig()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pipeline, err := os.ReadFile(filepath.Join(tektonDir, "pipeline.yaml"))
|
|
if err != nil || !strings.Contains(string(pipeline), "https://git.example.test/test-org-2/web-ui.git") {
|
|
t.Fatalf("target-specific pipeline = %q, %v", pipeline, err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(tektonDir, "custom.yaml"), []byte("custom: true\n"), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := GenerateAppDelivery(dir, onboardingConfig()); err == nil || !strings.Contains(err.Error(), "unmanaged") {
|
|
t.Fatalf("custom .tekton content was accepted: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRegisterAppInClusterRendersManagedFluxSource(t *testing.T) {
|
|
dir := t.TempDir()
|
|
tektonDir := filepath.Join(dir, "base", "tekton")
|
|
if err := os.MkdirAll(tektonDir, 0755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(filepath.Join(tektonDir, "kustomization.yaml"), []byte("apiVersion: kustomize.config.k8s.io/v1beta1\nkind: Kustomization\nresources:\n"), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := RegisterAppInCluster(dir, onboardingConfig()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
registration, err := os.ReadFile(filepath.Join(tektonDir, "apps", "web-ui.yaml"))
|
|
if err != nil || !strings.Contains(string(registration), "branch: maidn/delivery-web-ui") || !strings.Contains(string(registration), "secretRef:\n name: forgejo-flux-credentials") || !strings.Contains(string(registration), "dependsOn:\n - name: tekton-catalog") || !strings.Contains(string(registration), "path: ./.tekton") {
|
|
t.Fatalf("registration = %q, %v", registration, err)
|
|
}
|
|
for path, resource := range map[string]string{filepath.Join(tektonDir, "kustomization.yaml"): "apps", filepath.Join(tektonDir, "apps", "kustomization.yaml"): "web-ui.yaml"} {
|
|
content, err := os.ReadFile(path)
|
|
if err != nil || !strings.Contains(string(content), resource) {
|
|
t.Fatalf("Kustomization %s does not include %s: %q, %v", path, resource, content, err)
|
|
}
|
|
}
|
|
if err := os.WriteFile(filepath.Join(tektonDir, "apps", "web-ui.yaml"), []byte("custom: true\n"), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := RegisterAppInCluster(dir, onboardingConfig()); err == nil || !strings.Contains(err.Error(), "conflicts") {
|
|
t.Fatalf("unmanaged app registration was accepted: %v", err)
|
|
}
|
|
}
|