From 7602dc3827b305ff59f14edbd82f18e1d9b303a9 Mon Sep 17 00:00:00 2001 From: Marten Rebane Date: Fri, 9 Jan 2026 02:58:59 +0200 Subject: [PATCH 1/3] Use packaged public key for signature validation --- .../Sources/CommonsLib/Constants.swift | 1 - .../Cache/ConfigurationCache.swift | 11 ------ .../Cache/ConfigurationCacheProtocol.swift | 1 - .../Loader/ConfigurationLoader.swift | 36 ++++++++++++------- .../CentralConfigurationRepository.swift | 6 ---- ...ntralConfigurationRepositoryProtocol.swift | 1 - .../Service/CentralConfigurationService.swift | 24 ------------- .../CentralConfigurationServiceProtocol.swift | 1 - 8 files changed, 23 insertions(+), 58 deletions(-) diff --git a/Modules/CommonsLib/Sources/CommonsLib/Constants.swift b/Modules/CommonsLib/Sources/CommonsLib/Constants.swift index a520687b..d0f82175 100644 --- a/Modules/CommonsLib/Sources/CommonsLib/Constants.swift +++ b/Modules/CommonsLib/Sources/CommonsLib/Constants.swift @@ -109,7 +109,6 @@ public struct Constants { public struct Configuration { public static let CachedConfigJson = "active-config.json" - public static let CachedConfigEcPub = "active-config.ecpub" public static let CachedConfigEcc = "active-config.ecc" public static let CacheConfigFolder = "config" diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCache.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCache.swift index 86080c0b..1dd30df8 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCache.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCache.swift @@ -34,7 +34,6 @@ actor ConfigurationCache: ConfigurationCacheProtocol, Loggable { public func cacheConfigurationFiles( confData: String, - publicKey: String, signature: String, configDir: URL ) async throws { @@ -48,16 +47,6 @@ actor ConfigurationCache: ConfigurationCacheProtocol, Loggable { configDir: configDir ) - guard let publicKeyBytes = publicKey.data(using: .utf8) else { - throw ConfigurationCacheError.invalidData("Invalid UTF-8 encoding for publicKey") - } - - try await cacheFile( - fileName: CommonsLib.Constants.Configuration.CachedConfigEcPub, - data: publicKeyBytes, - configDir: configDir - ) - guard let signatureBytes = signature.data(using: .utf8) else { throw ConfigurationCacheError.invalidData("Invalid UTF-8 encoding for signature") } diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCacheProtocol.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCacheProtocol.swift index ec4167bf..f0feba88 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCacheProtocol.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Cache/ConfigurationCacheProtocol.swift @@ -24,7 +24,6 @@ import CommonsLib public protocol ConfigurationCacheProtocol: Sendable { func cacheConfigurationFiles( confData: String, - publicKey: String, signature: String, configDir: URL ) async throws diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift index 8524facf..3c3e90ae 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift @@ -111,28 +111,34 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { let confFile = configDir.appending( path: CommonsLib.Constants.Configuration.CachedConfigJson ) - let publicKeyFile = configDir.appending( - path: CommonsLib.Constants.Configuration.CachedConfigEcPub - ) + + guard + let publicKeyURL = bundle.url( + forResource: CommonsLib.Constants.Configuration.DefaultConfigEcPub, + withExtension: nil + ), + let publicKey = try? String(contentsOf: publicKeyURL) + else { + throw ConfigurationLoaderError.publicKeyNotFound + } + let signatureFile = configDir.appending( path: CommonsLib.Constants.Configuration.CachedConfigEcc ) let configFilesExist = fileManager.fileExists(atPath: confFile.resolvedPath) && - fileManager.fileExists(atPath: publicKeyFile.resolvedPath) && fileManager.fileExists(atPath: signatureFile.resolvedPath) if configFilesExist { ConfigurationLoader.logger().debug("Initializing cached configuration") let confFileContents = try String(contentsOf: confFile, encoding: .utf8) - let publicKeyContents = try String(contentsOf: publicKeyFile, encoding: .utf8) let signatureContents = try String(contentsOf: signatureFile, encoding: .utf8) try configurationSignatureVerifier.verifyConfigurationSignature( config: confFileContents, - publicKey: publicKeyContents, + publicKey: publicKey, signature: signatureContents ) @@ -147,7 +153,6 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { try await configurationCache.cacheConfigurationFiles( confData: confFileContents, - publicKey: publicKeyContents, signature: signatureContents, configDir: configDir ) @@ -230,7 +235,6 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { try await configurationCache.cacheConfigurationFiles( confData: confData, - publicKey: publicKey, signature: signatureText, configDir: configDir ) @@ -286,9 +290,6 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { let centralConfig = try await centralConfigurationRepository.fetchConfiguration( proxyInfo: proxyInfo ) - let centralPublicKey = try await centralConfigurationRepository.fetchPublicKey( - proxyInfo: proxyInfo - ) let centralConfigurationProvider = try JSONDecoder().decode( ConfigurationProvider.self, from: Data(centralConfig.utf8) @@ -297,10 +298,20 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { "Initializing configuration version \(centralConfigurationProvider.metaInf.serial)" ) + guard + let publicKeyURL = bundle.url( + forResource: CommonsLib.Constants.Configuration.DefaultConfigPub, + withExtension: nil + ), + let publicKey = try? String(contentsOf: publicKeyURL) + else { + throw ConfigurationLoaderError.publicKeyNotFound + } + do { try configurationSignatureVerifier.verifyConfigurationSignature( config: centralConfig, - publicKey: centralPublicKey, + publicKey: publicKey, signature: centralSignature ) } catch { @@ -313,7 +324,6 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { ) { try await configurationCache.cacheConfigurationFiles( confData: centralConfig, - publicKey: centralPublicKey, signature: centralSignature, configDir: configDir ) diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepository.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepository.swift index 90b98435..85ac73a3 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepository.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepository.swift @@ -34,12 +34,6 @@ public struct CentralConfigurationRepository: CentralConfigurationRepositoryProt ) } - public func fetchPublicKey(proxyInfo: ProxyInfo) async throws -> String { - return try await centralConfigurationService.fetchPublicKey( - proxyInfo: proxyInfo - ) - } - public func fetchSignature(proxyInfo: ProxyInfo) async throws -> String { return try await centralConfigurationService.fetchSignature( proxyInfo: proxyInfo diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepositoryProtocol.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepositoryProtocol.swift index f728d6a4..ceb1ebad 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepositoryProtocol.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Repository/CentralConfigurationRepositoryProtocol.swift @@ -23,6 +23,5 @@ import Foundation /// @mockable public protocol CentralConfigurationRepositoryProtocol: Sendable { func fetchConfiguration(proxyInfo: ProxyInfo) async throws -> String - func fetchPublicKey(proxyInfo: ProxyInfo) async throws -> String func fetchSignature(proxyInfo: ProxyInfo) async throws -> String } diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationService.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationService.swift index 4a08971b..5fec3e4d 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationService.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationService.swift @@ -60,30 +60,6 @@ public actor CentralConfigurationService: CentralConfigurationServiceProtocol, L } } - public func fetchPublicKey( - proxyInfo: ProxyInfo - ) async throws -> String { - let session = self.session ?? constructHttpClient( - defaultTimeout: CommonsLib.Constants.Configuration.DefaultTimeout, - proxyInfo: proxyInfo - ) - - let url = "\(await configurationProperty.centralConfigurationServiceUrl)/config.ecpub" - - do { - let response: String = try await session.request(url) - .validate() - .serializingString() - .value - - return response - } catch { - CentralConfigurationService.logger() - .error("Unable to fetch central configuration public key: \(error)") - throw URLError(.resourceUnavailable) - } - } - public func fetchSignature( proxyInfo: ProxyInfo ) async throws -> String { diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationServiceProtocol.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationServiceProtocol.swift index 75942beb..35cfde05 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationServiceProtocol.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Service/CentralConfigurationServiceProtocol.swift @@ -24,6 +24,5 @@ import Foundation /// @mockable public protocol CentralConfigurationServiceProtocol: Sendable { func fetchConfiguration(proxyInfo: ProxyInfo) async throws -> String - func fetchPublicKey(proxyInfo: ProxyInfo) async throws -> String func fetchSignature(proxyInfo: ProxyInfo) async throws -> String } From ecca883a6fdc982a8a2471676f2c00006a8f1625 Mon Sep 17 00:00:00 2001 From: Marten Rebane Date: Fri, 9 Jan 2026 03:02:26 +0200 Subject: [PATCH 2/3] Fix tests --- .../Cache/ConfigurationCacheTests.swift | 8 -- .../Loader/ConfigurationLoaderTests.swift | 122 +++++++++++++----- .../CentralConfigurationRepositoryTests.swift | 22 ---- .../CentralConfigurationServiceTests.swift | 70 ---------- .../Configuration/Util/TSLUtilTests.swift | 2 +- .../Container/ContainerWrapperTests.swift | 42 +++--- .../SignedContainerTests.swift | 4 +- .../Certificate/TestCertificateUtil.swift | 4 +- .../Container/TestContainerUtil.swift | 2 +- .../CommonsTestShared/File/TestFileUtil.swift | 10 +- .../Extensions/URLExtensionsTests.swift | 10 +- .../Resolver/MimeTypeResolverTests.swift | 2 +- .../FileOpening/FileOpeningServiceTests.swift | 4 +- .../AdvancedSettingsRepositoryTests.swift | 10 +- .../ViewModel/DiagnosticsViewModelTests.swift | 2 +- .../EncryptionSettingsViewModelTests.swift | 2 +- .../ViewModel/SigningViewModelTests.swift | 14 +- .../TimeStampSettingsViewModelTests.swift | 2 +- .../ValidationSettingsViewModelTests.swift | 2 +- 19 files changed, 153 insertions(+), 181 deletions(-) diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift index b446b5ea..21e35c9c 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift @@ -57,7 +57,6 @@ struct ConfigurationCacheTests { try await configurationCache.cacheConfigurationFiles( confData: validConfData, - publicKey: validPublicKey, signature: validSignature, configDir: configDir ) @@ -67,18 +66,12 @@ struct ConfigurationCacheTests { configDir: configDir ) - let cachedPublicKey = try await configurationCache.getCachedFile( - fileName: CommonsLib.Constants.Configuration.CachedConfigEcPub, - configDir: configDir - ) - let cachedSignature = try await configurationCache.getCachedFile( fileName: CommonsLib.Constants.Configuration.CachedConfigEcc, configDir: configDir ) #expect(cachedConfiguration == confFile) - #expect(cachedPublicKey == pubFile) #expect(cachedSignature == sigFile) } @@ -96,7 +89,6 @@ struct ConfigurationCacheTests { ) { try await configurationCache.cacheConfigurationFiles( confData: validConfData, - publicKey: validPublicKey, signature: validSignature, configDir: nonExistentDirectory ) diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift index 3b02a9dd..24ec9757 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift @@ -76,7 +76,6 @@ struct ConfigurationLoaderTests { mockConfigurationProperties.setConfigurationUpdatedDateHandler = { _ in } mockCentralConfigurationRepository.fetchConfigurationHandler = { _ in configurationResponse } - mockCentralConfigurationRepository.fetchPublicKeyHandler = { _ in "some key" } mockCentralConfigurationRepository.fetchSignatureHandler = { _ in "some signature" } let mockCacheDir = URL(fileURLWithPath: "/mock/cache/dir") @@ -102,11 +101,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -124,9 +127,8 @@ struct ConfigurationLoaderTests { try await configurationLoader.initConfiguration(cacheDir: mockCacheDir, proxyInfo: ProxyInfo()) - defer { - try? FileManager.default.removeItem(at: cacheDir) - } + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) #expect(mockConfigurationCache.cacheConfigurationFilesCallCount == 1) #expect(mockConfigurationProperties.getConfigurationPropertiesCallCount == 1) @@ -150,7 +152,6 @@ struct ConfigurationLoaderTests { mockConfigurationProperties.setConfigurationUpdatedDateHandler = { _ in } mockCentralConfigurationRepository.fetchConfigurationHandler = { _ in configurationResponse } - mockCentralConfigurationRepository.fetchPublicKeyHandler = { _ in "some key" } mockCentralConfigurationRepository.fetchSignatureHandler = { _ in "some signature" } let cacheDirURL = FileManager.default.urls( @@ -168,11 +169,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -192,14 +197,13 @@ struct ConfigurationLoaderTests { try await configurationLoader.loadDefaultConfiguration(cacheDir: nil) - defer { - try? FileManager.default.removeItem(at: cacheDir) - } - for try await config in updates { #expect(config != nil) return } + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test @@ -233,11 +237,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -255,6 +263,9 @@ struct ConfigurationLoaderTests { try await configurationLoader.loadDefaultConfiguration(cacheDir: nil) + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) + #expect(mockConfigurationSignatureVerifier.verifyConfigurationSignatureCallCount == 1) } @@ -292,11 +303,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -328,6 +343,9 @@ struct ConfigurationLoaderTests { Issue.record("Unexpected error thrown: \(error)") return } + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } func initConfiguration_createsDirectoryWhenCacheDirectoryDoesNotExist() async throws { @@ -346,7 +364,6 @@ struct ConfigurationLoaderTests { mockConfigurationProperties.setConfigurationUpdatedDateHandler = { _ in } mockCentralConfigurationRepository.fetchConfigurationHandler = { _ in configurationResponse } - mockCentralConfigurationRepository.fetchPublicKeyHandler = { _ in "some key" } mockCentralConfigurationRepository.fetchSignatureHandler = { _ in "some signature" } let mockCacheDir = URL(fileURLWithPath: "/mock/cache/dir") @@ -422,11 +439,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -456,6 +477,9 @@ struct ConfigurationLoaderTests { "validSignature" ) ) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test @@ -488,11 +512,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -521,6 +549,9 @@ struct ConfigurationLoaderTests { "validSignature" ) ) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test @@ -540,11 +571,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -582,6 +617,9 @@ struct ConfigurationLoaderTests { "validSignature" ) ) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test @@ -601,11 +639,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -635,7 +677,6 @@ struct ConfigurationLoaderTests { mockConfigurationProperties.setConfigurationUpdatedDateHandler = { _ in } mockCentralConfigurationRepository.fetchConfigurationHandler = { _ in configurationResponse } - mockCentralConfigurationRepository.fetchPublicKeyHandler = { _ in "publicKey" } mockCentralConfigurationRepository.fetchSignatureHandler = { _ in "validSignature" } mockConfigurationCache.getCachedFileHandler = { _, _ in signatureFile } @@ -650,6 +691,9 @@ struct ConfigurationLoaderTests { "validSignature" ) ) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test @@ -669,11 +713,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -698,11 +746,14 @@ struct ConfigurationLoaderTests { mockConfigurationCache.getCachedFileHandler = { _, _ in signatureFile } mockCentralConfigurationRepository.fetchConfigurationHandler = { _ in configurationResponse } - mockCentralConfigurationRepository.fetchPublicKeyHandler = { _ in "some key" } mockCentralConfigurationRepository.fetchSignatureHandler = { _ in "some signature" } await #expect(throws: ConfigurationLoaderError.configurationVerificationFailed) { try await configurationLoader.loadCentralConfiguration(cacheDir: nil, proxyInfo: ProxyInfo()) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) + } } @@ -723,11 +774,15 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) + let publicKeyFile = try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) - try "publicKey".write(to: publicKeyFile, atomically: true, encoding: .utf8) try "validSignature".write(to: signatureFile, atomically: true, encoding: .utf8) let fileMap: [String: URL] = [ @@ -765,6 +820,9 @@ struct ConfigurationLoaderTests { "validSignature" ) ) + + try? FileManager.default.removeItem(at: publicKeyFile) + try? FileManager.default.removeItem(at: cacheDir) } @Test diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Repository/CentralConfigurationRepositoryTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Repository/CentralConfigurationRepositoryTests.swift index 57055634..e59596b1 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Repository/CentralConfigurationRepositoryTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Repository/CentralConfigurationRepositoryTests.swift @@ -45,18 +45,6 @@ struct CentralConfigurationRepositoryTests { #expect(mockConfigurationService.fetchConfigurationCallCount == 1) } - @Test - func fetchPublicKey_success() async throws { - let expectedPublicKey = "MockPublicKey" - - mockConfigurationService.fetchPublicKeyHandler = { _ in expectedPublicKey } - - let result = try await repository.fetchPublicKey(proxyInfo: ProxyInfo()) - - #expect(expectedPublicKey == result) - #expect(mockConfigurationService.fetchPublicKeyCallCount == 1) - } - @Test func fetchSignature_success() async throws { let expectedSignature = "MockSignature" @@ -79,16 +67,6 @@ struct CentralConfigurationRepositoryTests { #expect(mockConfigurationService.fetchConfigurationCallCount == 1) } - @Test - func fetchPublicKey_throwsErrorWhenFetchingFails() async throws { - let expectedError = NSError(domain: "Test", code: 2, userInfo: nil) - - mockConfigurationService.fetchPublicKeyHandler = { _ in throw expectedError } - - await #expect(throws: (any Error).self) { try await repository.fetchPublicKey(proxyInfo: ProxyInfo()) } - #expect(mockConfigurationService.fetchPublicKeyCallCount == 1) - } - @Test func fetchSignature_throwsErrorWhenFetchingFails() async throws { let expectedError = NSError(domain: "Test", code: 3, userInfo: nil) diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Service/CentralConfigurationServiceTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Service/CentralConfigurationServiceTests.swift index 1eecef15..dc294b0b 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Service/CentralConfigurationServiceTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Service/CentralConfigurationServiceTests.swift @@ -110,76 +110,6 @@ struct CentralConfigurationServiceTests { } } - @Test - func fetchPublicKey_success() async throws { - let mockUrl = URL(string: "https://someUrl.abc/config/config.ecpub") - - guard let url = mockUrl else { - throw URLError(.badURL) - } - - let mockData = Data("public key".utf8) - - let mockResponse = HTTPURLResponse(url: url, statusCode: 200, httpVersion: nil, headerFields: nil) - - guard let response = mockResponse else { - throw URLError(.badServerResponse) - } - - let session = makeMockedSession { _ in - return (response, mockData) - } - - let service = CentralConfigurationService( - userAgent: "TestUserAgent", - configurationProperty: ConfigurationProperty( - centralConfigurationServiceUrl: "https://someUrl.abc/config", - updateInterval: 3600, - versionSerial: 1, - downloadDate: Date() - ), - session: session - ) - - let fetchedPublicKey = try await service.fetchPublicKey(proxyInfo: ProxyInfo()) - #expect(fetchedPublicKey == String(data: mockData, encoding: .utf8)) - } - - @Test - func fetchPublicKey_throwResponseValidationError() async throws { - let mockUrl = URL(string: "https://someUrl.abc/error/config.ecpub") - - guard let url = mockUrl else { - throw URLError(.badURL) - } - - let mockData = Data("public key".utf8) - let mockResponse = HTTPURLResponse(url: url, statusCode: 400, httpVersion: nil, headerFields: nil) - - guard let response = mockResponse else { - throw URLError(.badServerResponse) - } - - let session = makeMockedSession { _ in - return (response, mockData) - } - - let errorService = CentralConfigurationService( - userAgent: "TestUserAgent", - configurationProperty: ConfigurationProperty( - centralConfigurationServiceUrl: "https://someUrl.abc/error/", - updateInterval: 3600, - versionSerial: 1, - downloadDate: Date() - ), - session: session - ) - - await #expect(throws: Error.self) { - try await errorService.fetchPublicKey(proxyInfo: ProxyInfo()) - } - } - @Test func fetchSignature_success() async throws { let mockUrl = URL(string: "https://someUrl.abc/config/config.ecc") diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Util/TSLUtilTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Util/TSLUtilTests.swift index 5e639cdd..a67267fb 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Util/TSLUtilTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Util/TSLUtilTests.swift @@ -83,7 +83,7 @@ struct TSLUtilTests { @Test func readSequenceNumber_success() async throws { let fileContents = "123" - let tempDirectoryURL = TestFileUtil.getTemporaryDirectory(subfolder: "tslfiles") + let tempDirectoryURL = try TestFileUtil.getTemporaryDirectory(subfolder: "tslfiles") try FileManager.default.createDirectory(at: tempDirectoryURL, withIntermediateDirectories: true) let fileName = "test-\(UUID().uuidString).xml" let fileURL = tempDirectoryURL.appending(path: fileName) diff --git a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift index 5071150a..a807aaf8 100644 --- a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift +++ b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift @@ -40,8 +40,8 @@ struct ContainerWrapperTests { private var mockFileURL = URL(fileURLWithPath: "/tmp/path/test.txt") private let dataFileURLs = [ - TestFileUtil.createSampleFile(), - TestFileUtil.createSampleFile() + try? TestFileUtil.createSampleFile(), + try? TestFileUtil.createSampleFile() ] private let mockSignature: SignatureWrapper @@ -84,7 +84,8 @@ struct ContainerWrapperTests { @Test func getDataFiles_success() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -113,7 +114,8 @@ struct ContainerWrapperTests { @Test func getMimetype_success() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -141,7 +143,7 @@ struct ContainerWrapperTests { @Test func addDataFiles_success() async throws { - let testFile = TestFileUtil.createSampleFile() + let testFile = try TestFileUtil.createSampleFile() let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: [testFile], isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -157,7 +159,8 @@ struct ContainerWrapperTests { try? FileManager.default.removeItem(at: containerFile) } - try await containerWrapper.addDataFiles(containerFile: containerFile, dataFiles: dataFileURLs) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + try await containerWrapper.addDataFiles(containerFile: containerFile, dataFiles: dataFilesUrls) let dataFiles = await containerWrapper.getDataFiles() @@ -166,7 +169,8 @@ struct ContainerWrapperTests { @Test func addDataFiles_throwErrorWithDuplicateFiles() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -183,7 +187,7 @@ struct ContainerWrapperTests { let expectedErrorMessage = "Multiple documents already exist" do { - try await containerWrapper.addDataFiles(containerFile: containerFile, dataFiles: dataFileURLs) + try await containerWrapper.addDataFiles(containerFile: containerFile, dataFiles: dataFilesUrls) } catch let error as DigiDocError { switch error { case .addingFilesToContainerFailed(let errorDetail): @@ -201,8 +205,9 @@ struct ContainerWrapperTests { @Test func open_success() async throws { + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } let signedContainer = try await SignedContainer.openOrCreate( - dataFiles: [dataFileURLs.first ?? URL(fileURLWithPath: "")], isSivaConfirmed: true + dataFiles: [dataFilesUrls.first ?? URL(fileURLWithPath: "")], isSivaConfirmed: true ) let container = try await containerWrapper.open(containerFile: signedContainer.getRawContainerFile() ?? @@ -232,7 +237,8 @@ struct ContainerWrapperTests { @Test func addDataFiles_throwAddingFilesToContainerFailedError() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -267,7 +273,8 @@ struct ContainerWrapperTests { @Test func saveDataFile_success() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -296,7 +303,8 @@ struct ContainerWrapperTests { @Test func saveDataFile_throwErrorWhenInvalidDataFile() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -331,7 +339,7 @@ struct ContainerWrapperTests { return } - let tempDirectory = TestFileUtil.getTemporaryDirectory( + let tempDirectory = try TestFileUtil.getTemporaryDirectory( subfolder: "ContainerWrapperTests" ) @@ -361,7 +369,8 @@ struct ContainerWrapperTests { @Test func removeSignature_throwErrorWhenSignatureDoesNotExist() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -390,7 +399,7 @@ struct ContainerWrapperTests { return } - let tempDirectory = TestFileUtil.getTemporaryDirectory( + let tempDirectory = try TestFileUtil.getTemporaryDirectory( subfolder: "ContainerWrapperTests" ) @@ -420,7 +429,8 @@ struct ContainerWrapperTests { @Test func removeDataFile_throwErrorWhenDataFileDoesNotExist() async throws { - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFileURLs, isSivaConfirmed: true) + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } diff --git a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/SignedContainerTests.swift b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/SignedContainerTests.swift index 69716fa0..99ac34cf 100644 --- a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/SignedContainerTests.swift +++ b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/SignedContainerTests.swift @@ -166,7 +166,7 @@ final class SignedContainerTests { func renameContainer_success() async throws { let exampleContainer = try #require( TestFileUtil.pathForResourceFile(fileName: "example", ext: "asice")) let newFileName = "renamed.asice" - let tempDirectoryURL = TestFileUtil.getTemporaryDirectory( + let tempDirectoryURL = try TestFileUtil.getTemporaryDirectory( subfolder: "SignedContainerTests" ) let uniqueFileURL = tempDirectoryURL.appending(path: "renamed_unique.asice") @@ -249,7 +249,7 @@ final class SignedContainerTests { func renameContainer_returnURLWithDefaultNameWhenEmptyNewFileName() async throws { let exampleContainer = try #require( TestFileUtil.pathForResourceFile(fileName: "example", ext: "asice")) let emptyNewName = "" - let tempDirectoryURL = TestFileUtil.getTemporaryDirectory( + let tempDirectoryURL = try TestFileUtil.getTemporaryDirectory( subfolder: "SignedContainerTests" ) let defaultFileName = CommonsLib.Constants.Container.DefaultName diff --git a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Certificate/TestCertificateUtil.swift b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Certificate/TestCertificateUtil.swift index e04b6c87..da749b57 100644 --- a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Certificate/TestCertificateUtil.swift +++ b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Certificate/TestCertificateUtil.swift @@ -44,7 +44,7 @@ public class TestCertificateUtil { public static func createSampleCertFile( subfolder: String = "TestFileUtil" - ) -> URL { + ) throws -> URL { let testCertContent = """ -----BEGIN CERTIFICATE----- MIIGGzCCBQOgAwIBAgIQDmRuJmtGcd4j6HiqQzw0hzANBgkqhkiG9w0BAQsFADBZ @@ -56,7 +56,7 @@ public class TestCertificateUtil { yaKSeng9fe8ZVZdjOwmCa9ZdgjQYMZbDezMt+oRp2Q== -----END CERTIFICATE----- """ - let sampleFileURL = TestFileUtil.createSampleFile( + let sampleFileURL = try TestFileUtil.createSampleFile( name: "cert-\(UUID().uuidString)", withExtension: "cer", contents: testCertContent, diff --git a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Container/TestContainerUtil.swift b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Container/TestContainerUtil.swift index 754c444b..ff17050a 100644 --- a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Container/TestContainerUtil.swift +++ b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/Container/TestContainerUtil.swift @@ -26,7 +26,7 @@ public struct TestContainerUtil { public static func createMockContainer(with files: [String: String], containerExtension: String) throws -> URL { let subfolder = "TestContainers" - let tempDirectory = TestFileUtil.getTemporaryDirectory(subfolder: subfolder) + let tempDirectory = try TestFileUtil.getTemporaryDirectory(subfolder: subfolder) let uniqueZipName = "\(UUID().uuidString).\(containerExtension)" let zipURL = tempDirectory.appending(path: uniqueZipName) diff --git a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/File/TestFileUtil.swift b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/File/TestFileUtil.swift index 46a6bb05..072087e8 100644 --- a/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/File/TestFileUtil.swift +++ b/Modules/Test/CommonsTestShared/Sources/CommonsTestShared/File/TestFileUtil.swift @@ -37,7 +37,7 @@ public struct TestFileUtil: Loggable { public static func getTemporaryDirectory( subfolder: String, fileManager: FileManagerProtocol = Container.shared.fileManager() - ) -> URL { + ) throws -> URL { let tempDirectory = fileManager.temporaryDirectory .appending(path: bundleIdentifier, directoryHint: .isDirectory) .appending(path: subfolder, directoryHint: .isDirectory) @@ -54,6 +54,8 @@ public struct TestFileUtil: Loggable { logger().error( "Unable to create temporary file directory or remove existing file: \(error.localizedDescription)" ) + + throw URLError(.fileDoesNotExist) } return tempDirectory @@ -65,8 +67,8 @@ public struct TestFileUtil: Loggable { contents: String? = "Test content", subfolder: String = "TestFileUtil", fileManager: FileManagerProtocol = Container.shared.fileManager() - ) -> URL { - let tempFileDirectory = getTemporaryDirectory(subfolder: subfolder) + ) throws -> URL { + let tempFileDirectory = try getTemporaryDirectory(subfolder: subfolder) .appending(path: "\(name).\(ext)", directoryHint: .notDirectory) let isCreated = fileManager @@ -81,6 +83,8 @@ public struct TestFileUtil: Loggable { logger().error( "Unable to create file at path: \(tempFileDirectory.standardizedFileURL.path(percentEncoded: false))" ) + + throw URLError(.fileDoesNotExist) } return tempFileDirectory diff --git a/Modules/UtilsLib/Tests/UtilsLibTests/Extensions/URLExtensionsTests.swift b/Modules/UtilsLib/Tests/UtilsLibTests/Extensions/URLExtensionsTests.swift index ebb21c99..a086b197 100644 --- a/Modules/UtilsLib/Tests/UtilsLibTests/Extensions/URLExtensionsTests.swift +++ b/Modules/UtilsLib/Tests/UtilsLibTests/Extensions/URLExtensionsTests.swift @@ -75,8 +75,8 @@ struct URLExtensionsTests { } @Test - func isPDF_success() async { - let tempFileURL = TestFileUtil.getTemporaryDirectory( + func isPDF_success() async throws { + let tempFileURL = try TestFileUtil.getTemporaryDirectory( subfolder: "URLExtensionsTests" ).appending(path: "testFile.pdf") @@ -161,7 +161,7 @@ struct URLExtensionsTests { @Test func md5Hash_success() { do { - let tempFileURL = TestFileUtil.createSampleFile() + let tempFileURL = try TestFileUtil.createSampleFile() let expectedMD5Hash = Insecure.MD5.hash(data: try Data(contentsOf: tempFileURL)) .hexString(separator: "") @@ -178,8 +178,8 @@ struct URLExtensionsTests { } @Test - func md5Hash_returnEmptyStringIfFileDoesNotExist() { - let nonexistentFileURL = TestFileUtil.getTemporaryDirectory( + func md5Hash_returnEmptyStringIfFileDoesNotExist() throws { + let nonexistentFileURL = try TestFileUtil.getTemporaryDirectory( subfolder: "URLExtensionsTests" ).appending(path: "nonexistentFile.txt") diff --git a/Modules/UtilsLib/Tests/UtilsLibTests/Resolver/MimeTypeResolverTests.swift b/Modules/UtilsLib/Tests/UtilsLibTests/Resolver/MimeTypeResolverTests.swift index 3528e995..15ffcda7 100644 --- a/Modules/UtilsLib/Tests/UtilsLibTests/Resolver/MimeTypeResolverTests.swift +++ b/Modules/UtilsLib/Tests/UtilsLibTests/Resolver/MimeTypeResolverTests.swift @@ -37,7 +37,7 @@ struct MimeTypeResolverTests { @Test func mimeType_successUsingCacheToSetAndGet() async throws { - let fileUrl = TestFileUtil.createSampleFile(name: "image", withExtension: "png") + let fileUrl = try TestFileUtil.createSampleFile(name: "image", withExtension: "png") let expectedMimeType = "image/png" mockMimeTypeCache.getMimeTypeHandler = { _ in diff --git a/RIADigiDocTests/Domain/Service/FileOpening/FileOpeningServiceTests.swift b/RIADigiDocTests/Domain/Service/FileOpening/FileOpeningServiceTests.swift index 0b275977..eb33d2b5 100644 --- a/RIADigiDocTests/Domain/Service/FileOpening/FileOpeningServiceTests.swift +++ b/RIADigiDocTests/Domain/Service/FileOpening/FileOpeningServiceTests.swift @@ -149,8 +149,8 @@ struct FileOpeningServiceTests { fileInspector: mockFileInspector, fileManager: Container.shared.fileManager() ) - let tempFileURL = TestFileUtil.createSampleFile() - let tempFileURL2 = TestFileUtil.createSampleFile() + let tempFileURL = try TestFileUtil.createSampleFile() + let tempFileURL2 = try TestFileUtil.createSampleFile() let urls = [tempFileURL, tempFileURL2] let container = try await fileOpeningService.openOrCreateContainer( diff --git a/RIADigiDocTests/Repository/AdvancedSettings/AdvancedSettingsRepositoryTests.swift b/RIADigiDocTests/Repository/AdvancedSettings/AdvancedSettingsRepositoryTests.swift index b1de4217..3ae6a03f 100644 --- a/RIADigiDocTests/Repository/AdvancedSettings/AdvancedSettingsRepositoryTests.swift +++ b/RIADigiDocTests/Repository/AdvancedSettings/AdvancedSettingsRepositoryTests.swift @@ -43,7 +43,7 @@ struct AdvancedSettingsRepositoryTests { @Test func getCertificate_success() async throws { - let sampleFileURL = TestCertificateUtil.createSampleCertFile() + let sampleFileURL = try TestCertificateUtil.createSampleCertFile() let sampleFileBaseName = sampleFileURL.deletingPathExtension().lastPathComponent let sampleFolder = sampleFileURL .deletingPathExtension().deletingPathExtension().lastPathComponent @@ -91,7 +91,7 @@ struct AdvancedSettingsRepositoryTests { @Test func getCertificate_doesNotThrowWhenGetCertificateFileURLThrows() async throws { - let sampleFileURL = TestCertificateUtil.createSampleCertFile() + let sampleFileURL = try TestCertificateUtil.createSampleCertFile() let sampleFileBaseName = sampleFileURL.deletingPathExtension().lastPathComponent let sampleFolder = sampleFileURL .deletingPathExtension().deletingPathExtension().lastPathComponent @@ -119,7 +119,7 @@ struct AdvancedSettingsRepositoryTests { @Test func importCertificate_success() async throws { - let sampleFileURL = TestCertificateUtil.createSampleCertFile( + let sampleFileURL = try TestCertificateUtil.createSampleCertFile( subfolder: BundleUtil.getBundleIdentifier() ) let sampleFileBaseName = sampleFileURL.deletingPathExtension().lastPathComponent @@ -144,7 +144,7 @@ struct AdvancedSettingsRepositoryTests { @Test func importCertificate_doesNotThrowWhenCreateDirectoryThrows() async throws { - let sampleFileURL = TestCertificateUtil.createSampleCertFile() + let sampleFileURL = try TestCertificateUtil.createSampleCertFile() let sampleFileBaseName = sampleFileURL.deletingPathExtension().lastPathComponent defer { try? FileManager.default.removeItem(at: sampleFileURL) @@ -166,7 +166,7 @@ struct AdvancedSettingsRepositoryTests { @Test func importCertificate_doesNotThrowWhenRemoveAllCertFilesThrows() async throws { - let sampleFileURL = TestCertificateUtil.createSampleCertFile() + let sampleFileURL = try TestCertificateUtil.createSampleCertFile() let sampleFileBaseName = sampleFileURL.deletingPathExtension().lastPathComponent defer { try? FileManager.default.removeItem(at: sampleFileURL) diff --git a/RIADigiDocTests/ViewModel/DiagnosticsViewModelTests.swift b/RIADigiDocTests/ViewModel/DiagnosticsViewModelTests.swift index 252bbcdf..8546a624 100644 --- a/RIADigiDocTests/ViewModel/DiagnosticsViewModelTests.swift +++ b/RIADigiDocTests/ViewModel/DiagnosticsViewModelTests.swift @@ -261,7 +261,7 @@ final class DiagnosticsViewModelTests { let mockLanguageSettings = LanguageSettingsProtocolMock() await viewModel.getConfigurationData(configuration: mockConfigProvider) - let tempDirectoryURL = TestFileUtil.getTemporaryDirectory(subfolder: "logfiles") + let tempDirectoryURL = try TestFileUtil.getTemporaryDirectory(subfolder: "logfiles") try FileManager.default.createDirectory(at: tempDirectoryURL, withIntermediateDirectories: true) mockFileManager.urlHandler = { _, _, _, _ in tempDirectoryURL } diff --git a/RIADigiDocTests/ViewModel/EncryptionSettingsViewModelTests.swift b/RIADigiDocTests/ViewModel/EncryptionSettingsViewModelTests.swift index c65ee2e4..3b5d9c42 100644 --- a/RIADigiDocTests/ViewModel/EncryptionSettingsViewModelTests.swift +++ b/RIADigiDocTests/ViewModel/EncryptionSettingsViewModelTests.swift @@ -302,7 +302,7 @@ final class EncryptionSettingsViewModelTests { @Test func importSiVaCert_success() async throws { - let certURL = TestCertificateUtil.createSampleCertFile() + let certURL = try TestCertificateUtil.createSampleCertFile() defer { try? FileManager.default.removeItem(at: certURL) } diff --git a/RIADigiDocTests/ViewModel/SigningViewModelTests.swift b/RIADigiDocTests/ViewModel/SigningViewModelTests.swift index 2fbdc022..73529af5 100644 --- a/RIADigiDocTests/ViewModel/SigningViewModelTests.swift +++ b/RIADigiDocTests/ViewModel/SigningViewModelTests.swift @@ -1278,9 +1278,9 @@ struct SigningViewModelTests: Loggable { @Test func addDataFiles_handleErrorWhenPartialAddingSucceeds() async throws { - let testFile = TestFileUtil.createSampleFile(name: "text", withExtension: "txt") - let testFile2 = TestFileUtil.createSampleFile(name: "text2", withExtension: "txt") - let testFile3 = TestFileUtil.createSampleFile(name: "test", withExtension: "txt") + let testFile = try TestFileUtil.createSampleFile(name: "text", withExtension: "txt") + let testFile2 = try TestFileUtil.createSampleFile(name: "text2", withExtension: "txt") + let testFile3 = try TestFileUtil.createSampleFile(name: "test", withExtension: "txt") let containerFile = TestFileUtil.pathForResourceFile(fileName: "example_no_signatures", ext: "asice") guard let exampleContainer = containerFile else { @@ -1288,7 +1288,7 @@ struct SigningViewModelTests: Loggable { return } - let tempDirectory = TestFileUtil.getTemporaryDirectory( + let tempDirectory = try TestFileUtil.getTemporaryDirectory( subfolder: "SigningViewModelTests-handleErrorWhenPartialAddingSucceeds" ) @@ -1337,8 +1337,8 @@ struct SigningViewModelTests: Loggable { @Test func addDataFiles_handleErrorWhenNoFilesAreAdded() async throws { - let testFile = TestFileUtil.createSampleFile(name: "text", withExtension: "txt") - let testFile2 = TestFileUtil.createSampleFile(name: "text2", withExtension: "txt") + let testFile = try TestFileUtil.createSampleFile(name: "text", withExtension: "txt") + let testFile2 = try TestFileUtil.createSampleFile(name: "text2", withExtension: "txt") let containerFile = TestFileUtil.pathForResourceFile(fileName: "example_no_signatures", ext: "asice") guard let exampleContainer = containerFile else { @@ -1346,7 +1346,7 @@ struct SigningViewModelTests: Loggable { return } - let tempDirectory = TestFileUtil.getTemporaryDirectory( + let tempDirectory = try TestFileUtil.getTemporaryDirectory( subfolder: "SigningViewModelTests-handleErrorWhenNoFilesAreAdded" ) diff --git a/RIADigiDocTests/ViewModel/TimeStampSettingsViewModelTests.swift b/RIADigiDocTests/ViewModel/TimeStampSettingsViewModelTests.swift index 1487a980..a9c1427d 100644 --- a/RIADigiDocTests/ViewModel/TimeStampSettingsViewModelTests.swift +++ b/RIADigiDocTests/ViewModel/TimeStampSettingsViewModelTests.swift @@ -173,7 +173,7 @@ final class TimeStampSettingsViewModelTests { @Test func importTSACert_success() async throws { - let certURL = TestCertificateUtil.createSampleCertFile() + let certURL = try TestCertificateUtil.createSampleCertFile() defer { try? FileManager.default.removeItem(at: certURL) } diff --git a/RIADigiDocTests/ViewModel/ValidationSettingsViewModelTests.swift b/RIADigiDocTests/ViewModel/ValidationSettingsViewModelTests.swift index 111312e6..66d83745 100644 --- a/RIADigiDocTests/ViewModel/ValidationSettingsViewModelTests.swift +++ b/RIADigiDocTests/ViewModel/ValidationSettingsViewModelTests.swift @@ -183,7 +183,7 @@ final class ValidationSettingsViewModelTests { @Test func importSiVaCert_success() async throws { - let certURL = TestCertificateUtil.createSampleCertFile() + let certURL = try TestCertificateUtil.createSampleCertFile() defer { try? FileManager.default.removeItem(at: certURL) } From 45a52235d98901ddb7d027d42ddba234f21f94ac Mon Sep 17 00:00:00 2001 From: Marten Rebane Date: Fri, 9 Jan 2026 17:10:35 +0200 Subject: [PATCH 3/3] Code improvements --- .../Loader/ConfigurationLoader.swift | 2 +- .../Cache/ConfigurationCacheTests.swift | 1 - .../Loader/ConfigurationLoaderTests.swift | 115 ++++++------------ .../Container/ContainerWrapperTests.swift | 31 +++-- 4 files changed, 51 insertions(+), 98 deletions(-) diff --git a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift index 3c3e90ae..f1e5aaf1 100644 --- a/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift +++ b/Modules/ConfigLib/Sources/ConfigLib/Configuration/Loader/ConfigurationLoader.swift @@ -300,7 +300,7 @@ public actor ConfigurationLoader: ConfigurationLoaderProtocol, Loggable { guard let publicKeyURL = bundle.url( - forResource: CommonsLib.Constants.Configuration.DefaultConfigPub, + forResource: CommonsLib.Constants.Configuration.DefaultConfigEcPub, withExtension: nil ), let publicKey = try? String(contentsOf: publicKeyURL) diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift index 21e35c9c..405e7971 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Cache/ConfigurationCacheTests.swift @@ -52,7 +52,6 @@ struct ConfigurationCacheTests { "ConfigurationCacheTests-\(UUID().uuidString)" ) let confFile = configDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let pubFile = configDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcPub) let sigFile = configDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try await configurationCache.cacheConfigurationFiles( diff --git a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift index 24ec9757..66af7650 100644 --- a/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift +++ b/Modules/ConfigLib/Tests/ConfigLibTests/Configuration/Loader/ConfigurationLoaderTests.swift @@ -101,12 +101,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -127,8 +122,7 @@ struct ConfigurationLoaderTests { try await configurationLoader.initConfiguration(cacheDir: mockCacheDir, proxyInfo: ProxyInfo()) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) #expect(mockConfigurationCache.cacheConfigurationFilesCallCount == 1) #expect(mockConfigurationProperties.getConfigurationPropertiesCallCount == 1) @@ -169,12 +163,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -202,8 +191,7 @@ struct ConfigurationLoaderTests { return } - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -237,12 +225,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -263,8 +246,7 @@ struct ConfigurationLoaderTests { try await configurationLoader.loadDefaultConfiguration(cacheDir: nil) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) #expect(mockConfigurationSignatureVerifier.verifyConfigurationSignatureCallCount == 1) } @@ -303,12 +285,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -344,8 +321,7 @@ struct ConfigurationLoaderTests { return } - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } func initConfiguration_createsDirectoryWhenCacheDirectoryDoesNotExist() async throws { @@ -439,12 +415,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -478,8 +449,7 @@ struct ConfigurationLoaderTests { ) ) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -512,12 +482,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -550,8 +515,7 @@ struct ConfigurationLoaderTests { ) ) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -571,12 +535,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -618,8 +577,7 @@ struct ConfigurationLoaderTests { ) ) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -639,12 +597,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -692,8 +645,7 @@ struct ConfigurationLoaderTests { ) ) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -713,12 +665,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -751,8 +698,7 @@ struct ConfigurationLoaderTests { await #expect(throws: ConfigurationLoaderError.configurationVerificationFailed) { try await configurationLoader.loadCentralConfiguration(cacheDir: nil, proxyInfo: ProxyInfo()) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } } @@ -774,12 +720,7 @@ struct ConfigurationLoaderTests { try FileManager.default.createDirectory(at: cacheDir, withIntermediateDirectories: true) let confFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigJson) - let publicKeyFile = try TestFileUtil.createSampleFile( - name: "default-config", - withExtension: "ecpub", - contents: "publicKey", - subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" - ) + let publicKeyFile = try createSamplePublicKeyFile() let signatureFile = cacheDir.appending(path: CommonsLib.Constants.Configuration.CachedConfigEcc) try configurationResponse.write(to: confFile, atomically: true, encoding: .utf8) @@ -821,8 +762,7 @@ struct ConfigurationLoaderTests { ) ) - try? FileManager.default.removeItem(at: publicKeyFile) - try? FileManager.default.removeItem(at: cacheDir) + try cleanupFiles(files: [publicKeyFile, cacheDir]) } @Test @@ -870,4 +810,19 @@ struct ConfigurationLoaderTests { downloadDate: Date() ) } + + private func createSamplePublicKeyFile() throws -> URL { + return try TestFileUtil.createSampleFile( + name: "default-config", + withExtension: "ecpub", + contents: "publicKey", + subfolder: "ConfigurationLoaderTests-\(UUID().uuidString)" + ) + } + + private func cleanupFiles(files: [URL]) throws { + for file in files { + try FileManager.default.removeItem(at: file) + } + } } diff --git a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift index a807aaf8..90899fdd 100644 --- a/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift +++ b/Modules/LibdigidocLib/Tests/LibdigidocLibTests/LibdigidocSwift/Container/ContainerWrapperTests.swift @@ -84,8 +84,7 @@ struct ContainerWrapperTests { @Test func getDataFiles_success() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -114,8 +113,7 @@ struct ContainerWrapperTests { @Test func getMimetype_success() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -169,8 +167,7 @@ struct ContainerWrapperTests { @Test func addDataFiles_throwErrorWithDuplicateFiles() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -187,6 +184,7 @@ struct ContainerWrapperTests { let expectedErrorMessage = "Multiple documents already exist" do { + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } try await containerWrapper.addDataFiles(containerFile: containerFile, dataFiles: dataFilesUrls) } catch let error as DigiDocError { switch error { @@ -237,8 +235,7 @@ struct ContainerWrapperTests { @Test func addDataFiles_throwAddingFilesToContainerFailedError() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -273,8 +270,7 @@ struct ContainerWrapperTests { @Test func saveDataFile_success() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -303,8 +299,7 @@ struct ContainerWrapperTests { @Test func saveDataFile_throwErrorWhenInvalidDataFile() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -369,8 +364,7 @@ struct ContainerWrapperTests { @Test func removeSignature_throwErrorWhenSignatureDoesNotExist() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -429,8 +423,7 @@ struct ContainerWrapperTests { @Test func removeDataFile_throwErrorWhenDataFileDoesNotExist() async throws { - let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } - let sampleContainer = try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + let sampleContainer = try await createSampleContainer(dataFileURLs: dataFileURLs) guard let containerFile = await sampleContainer.getRawContainerFile() else { return } @@ -450,4 +443,10 @@ struct ContainerWrapperTests { return } } + + @discardableResult + private func createSampleContainer(dataFileURLs: [URL?]) async throws -> SignedContainerProtocol { + let dataFilesUrls: [URL] = dataFileURLs.compactMap { $0 } + return try await SignedContainer.openOrCreate(dataFiles: dataFilesUrls, isSivaConfirmed: true) + } }