@@ -20,31 +20,29 @@ import Testing
2020import Vapor
2121
2222
23- extension AllTests {
24- @Suite (
25- . serialized,
26- . tags( . performance) ,
27- . disabled( if: !runQueryPerformanceTests( ) )
28- )
29- struct QueryPerformanceTests { }
30- }
31-
32-
33- extension AllTests . QueryPerformanceTests {
23+ @Suite (
24+ . serialized,
25+ . tags( . performance) ,
26+ . disabled( if: !runQueryPerformanceTests( ) )
27+ )
28+ struct QueryPerformanceTests {
3429 // Set this to true when running locally to convert warnings to test failures for easier updating of values.
3530 static let failOnWarning = false
3631
3732 func withStagingApp( _ test: ( Application ) async throws -> Void ) async throws {
3833 // Update db settings for CI runs in
3934 // https://github.com/SwiftPackageIndex/SwiftPackageIndex-Server/settings/secrets/actions
4035 // or in `.env.staging` for local runs.
41- let app = try await Application . make ( . staging)
36+ let environment = Environment . staging
37+
38+ let host = try await DotEnvFile . databaseHost ( for: environment)
39+ try #require( host. hasPrefix ( " spi-dev-db " ) )
40+ try #require( host. hasSuffix ( " postgres.database.azure.com " ) )
41+
42+ let app = try await Application . make ( environment)
4243 app. logger. logLevel = Environment . get ( " LOG_LEVEL " )
4344 . flatMap ( Logger . Level. init ( rawValue: ) ) ?? . warning
44- let host = try await configure ( app)
45-
46- try #require( host. hasPrefix ( " spi-dev-db " ) , " was: \( host) " )
47- try #require( host. hasSuffix ( " postgres.database.azure.com " ) , " was: \( host) " )
45+ try await configure ( app)
4846
4947 return try await run {
5048 try await test ( app)
@@ -225,7 +223,7 @@ extension SQLQueryBuilder {
225223}
226224
227225
228- private extension AllTests . QueryPerformanceTests {
226+ private extension QueryPerformanceTests {
229227
230228 func assertQueryPerformance( _ query: SQLQueryBuilder ,
231229 expectedCost: Double ,
@@ -291,3 +289,30 @@ private extension AllTests.QueryPerformanceTests {
291289 }
292290
293291}
292+
293+
294+ private struct TestError : Error {
295+ var description : String
296+ init ( _ description: String ) {
297+ self . description = description
298+ }
299+ }
300+
301+
302+ private extension [ DotEnvFile . Line ] {
303+ subscript( key: String ) -> String ? {
304+ first ( where: { $0. key == key } ) ? . value
305+ }
306+ }
307+
308+
309+ private extension DotEnvFile {
310+ static func databaseHost( for environment: Environment ) async throws -> String {
311+ let envFile = try await DotEnvFile . read ( path: " .env. \( environment. name) " ,
312+ fileio: . init( threadPool: . singleton) )
313+ guard let host = envFile. lines [ " DATABASE_HOST " ] else {
314+ throw TestError ( " DATABASE_HOST not found in settings file .env. \( environment. name) " )
315+ }
316+ return host
317+ }
318+ }
0 commit comments