package main import ( "context" "net/http" "net/http/httptest" "os" "path/filepath" "testing" ) func TestReleaseRuntimeRejectsSameSourceAndTargetDatabaseValues(t *testing.T) { if err := validateDistinctDatabaseURLs("postgres://user@same/db?sslmode=require", "postgres://user@same/db?sslmode=require"); err == nil { t.Fatal("same database URL accepted") } if err := validateDistinctDatabaseURLs("postgres://user@source/db?sslmode=require", "postgres://user@target/db?sslmode=require"); err != nil { t.Fatal(err) } } func TestBuildReleaseRuntimeWithRestrictedFilesIntegration(t *testing.T) { sourceDatabaseURL := os.Getenv("TEST_WEKNORA_V071_DATABASE_URL") targetDatabaseURL := os.Getenv("TEST_WEKNORA_V071_TARGET_DATABASE_URL") minioEndpoint := os.Getenv("TEST_MINIO_ENDPOINT") if sourceDatabaseURL == "" || targetDatabaseURL == "" || minioEndpoint == "" { t.Skip("release runtime integration environment is not set") } esSource := httptest.NewServer(http.NotFoundHandler()) defer esSource.Close() esTarget := httptest.NewServer(http.NotFoundHandler()) defer esTarget.Close() weknoraTarget := httptest.NewServer(http.NotFoundHandler()) defer weknoraTarget.Close() root := t.TempDir() archiveRoot := filepath.Join(root, "archive") archiveRoute := filepath.Join(archiveRoot, "kb-release-safe") if err := os.MkdirAll(archiveRoute, 0o700); err != nil { t.Fatal(err) } secret := func(name, value string) string { path := filepath.Join(root, name) if err := os.WriteFile(path, []byte(value+"\n"), 0o600); err != nil { t.Fatal(err) } return path } route := releaseRouteConfig{ TenantID: 10000, KnowledgeBaseID: "kb-release-safe", EmbeddingModel: "bge-m3", Source: releaseEndpointConfig{DatabaseURLFile: secret("source-db", sourceDatabaseURL), Elasticsearch: releaseElasticsearchConfig{BaseURL: esSource.URL, Index: "chunks"}, Object: releaseObjectConfig{Provider: "minio", Endpoint: minioEndpoint, Region: "us-east-1", Bucket: "release-source", AccessKeyFile: secret("source-ak", "release-test"), SecretKeyFile: secret("source-sk", "release-test-secret")}}, Target: releaseEndpointConfig{DatabaseURLFile: secret("target-db", targetDatabaseURL), Elasticsearch: releaseElasticsearchConfig{BaseURL: esTarget.URL, Index: "chunks"}, Object: releaseObjectConfig{Provider: "minio", Endpoint: minioEndpoint, Region: "us-east-1", Bucket: "release-target", StorageBackendID: "target-backend", AccessKeyFile: secret("target-ak", "release-test"), SecretKeyFile: secret("target-sk", "release-test-secret")}, WeKnora: releaseWeKnoraConfig{BaseURL: weknoraTarget.URL, APIKeyFile: secret("target-weknora", "test-api-key"), AllowDockerHTTP: true}}, } runtime, err := buildReleaseRuntime(context.Background(), releaseRuntimeConfig{ArchiveRoot: archiveRoot, Routes: []releaseRouteConfig{route}}) if err != nil { t.Fatal(err) } runtime.Close() if runtime.publisher == nil || len(runtime.pools) != 2 { t.Fatalf("runtime=%#v", runtime) } }