From ae9855ffcf4cfd41c37cfa5e94e15fc5c607afdf Mon Sep 17 00:00:00 2001 From: Thomas Evensen <thomeven@gmail.com> Date: Wed, 18 Sep 2024 16:12:07 +0200 Subject: [PATCH] update --- Sources/SSHCreateKey/SSHCreateKey.swift | 12 +-- .../ArgumentsCreatSSHKeys.swift | 12 +-- Tests/SSHCreateKeyTests/DecodeTestdata.swift | 6 -- .../ReadTestdataFromGitHub.swift | 34 +++++++- .../SSHCreateKeyTests/SSHCreateKeyTests.swift | 80 ++++++++++++++++++- .../TestSynchronizeConfiguration.swift | 12 +-- 6 files changed, 128 insertions(+), 28 deletions(-) diff --git a/Sources/SSHCreateKey/SSHCreateKey.swift b/Sources/SSHCreateKey/SSHCreateKey.swift index 4f78a59..009702d 100644 --- a/Sources/SSHCreateKey/SSHCreateKey.swift +++ b/Sources/SSHCreateKey/SSHCreateKey.swift @@ -9,8 +9,8 @@ public final class SSHCreateKey { var sharedsshkeypathandidentityfile: String? public var createkeycommand = "/usr/bin/ssh-keygen" - public var rsaStringPath: String? + // Arrays listing all key files public var keyFileStrings: [String]? { let fm = FileManager.default @@ -47,9 +47,10 @@ public final class SSHCreateKey { // If anything goes wrong set to default global values return userHomeDirectoryPath + "/.ssh" + "/" + (identityfile ?? "") } - } else { - return (userHomeDirectoryPath ?? "") + "/.ssh" + "/" + (identityfile ?? "") + } else if let userHomeDirectoryPath { + return userHomeDirectoryPath + "/.ssh" + "/" + (identityfile ?? "") } + return nil } // SSH identityfile with full keypath if NOT default is used @@ -96,9 +97,10 @@ public final class SSHCreateKey { // If anything goes wrong set to default global values return userHomeDirectoryPath + "/.ssh" } - } else { - return (userHomeDirectoryPath ?? "") + "/.ssh" + } else if let userHomeDirectoryPath { + return userHomeDirectoryPath + "/.ssh" } + return nil } public var userHomeDirectoryPath: String? { diff --git a/Tests/SSHCreateKeyTests/ArgumentsCreatSSHKeys.swift b/Tests/SSHCreateKeyTests/ArgumentsCreatSSHKeys.swift index 7aa6221..cca077b 100644 --- a/Tests/SSHCreateKeyTests/ArgumentsCreatSSHKeys.swift +++ b/Tests/SSHCreateKeyTests/ArgumentsCreatSSHKeys.swift @@ -9,10 +9,14 @@ import Foundation struct ArgumentsCreatSSHKeys { let keypathglobal = "/Users/thomas/.ssh_global" + let defaultkeypath = "/Users/thomas/.ssh" let identityfileglobl = "global" + let defaultidentityfileglobl = "id_rsa" let userHomeDirectoryPathglobal = "/Users/thomas" let sshkeypathandidentityfileglobal = "/Users/thomas/.ssh_global/global" + let defaultsshkeypathandidentityfile = "/Users/thomas/.ssh/id_rsa" let argumentssshcopyidglobal = "/usr/bin/ssh-copy-id -i ~/.ssh_global/global -p 2222 thomas@raspberrypi" + let defaultargumentssshcopyid = "/usr/bin/ssh-copy-id -i ~/.ssh_global/global -p 2222 thomas@raspberrypi" let keypathdefault = "/Users/thomas/.ssh" let identityfiledefault = "id_rsa" @@ -20,12 +24,10 @@ struct ArgumentsCreatSSHKeys { let sshkeypathandidentityfiledefault = "/Users/thomas/.ssh/id_rsa" let argumentssshcopyiddefault = "/usr/bin/ssh-copy-id -i /Users/thomas/.ssh/id_rsa thomas@raspberrypi" - - let URLfilelocal: URL? = URL(fileURLWithPath: "/Users/thomas/.ssh/") - let sshcreatelocal = ["-t", "rsa", "-N", "", "-f", "/Users/thomas/.ssh/id_rsa"] - - let URLfileglobal = URL(fileURLWithPath:"/Users/thomas/.ssh_global") + let defaultURLfile = URL(fileURLWithPath:"/Users/thomas/.ssh/") + let sshcreateglobal = ["-t", "rsa", "-N", "", "-f", "/Users/thomas/.ssh_global/global"] + let defaultsshcreate = ["-t", "rsa", "-N", "", "-f", "/Users/thomas/.ssh/id_rsa"] } diff --git a/Tests/SSHCreateKeyTests/DecodeTestdata.swift b/Tests/SSHCreateKeyTests/DecodeTestdata.swift index 2e2abb0..1190124 100644 --- a/Tests/SSHCreateKeyTests/DecodeTestdata.swift +++ b/Tests/SSHCreateKeyTests/DecodeTestdata.swift @@ -24,8 +24,6 @@ struct DecodeTestdata: Codable { let parameter2: String? let parameter3: String? let parameter4: String? - let parameter5: String? - let parameter6: String? let parameter8: String? let parameter9: String? let rsyncdaemon: Int? @@ -53,8 +51,6 @@ struct DecodeTestdata: Codable { case parameter2 case parameter3 case parameter4 - case parameter5 - case parameter6 case parameter8 case parameter9 case rsyncdaemon @@ -84,8 +80,6 @@ struct DecodeTestdata: Codable { parameter2 = try values.decodeIfPresent(String.self, forKey: .parameter2) parameter3 = try values.decodeIfPresent(String.self, forKey: .parameter3) parameter4 = try values.decodeIfPresent(String.self, forKey: .parameter4) - parameter5 = try values.decodeIfPresent(String.self, forKey: .parameter5) - parameter6 = try values.decodeIfPresent(String.self, forKey: .parameter6) parameter8 = try values.decodeIfPresent(String.self, forKey: .parameter8) parameter9 = try values.decodeIfPresent(String.self, forKey: .parameter9) rsyncdaemon = try values.decodeIfPresent(Int.self, forKey: .rsyncdaemon) diff --git a/Tests/SSHCreateKeyTests/ReadTestdataFromGitHub.swift b/Tests/SSHCreateKeyTests/ReadTestdataFromGitHub.swift index b53097f..d62cdf1 100644 --- a/Tests/SSHCreateKeyTests/ReadTestdataFromGitHub.swift +++ b/Tests/SSHCreateKeyTests/ReadTestdataFromGitHub.swift @@ -10,6 +10,7 @@ import Foundation final class ReadTestdataFromGitHub { var testconfigurations = [TestSynchronizeConfiguration]() private var urlJSONuiconfig: String = "https://raw.githubusercontent.com/rsyncOSX/RsyncArguments/master/Testdata/rsyncuiconfig.json" + private var urlJSONuiconfignossh: String = "https://raw.githubusercontent.com/rsyncOSX/RsyncArguments/master/Testdata/rsyncuiconfignossh.json" private var urlJSON: String = "https://raw.githubusercontent.com/rsyncOSX/RsyncArguments/master/Testdata/configurations.json" func getdata() async { @@ -17,7 +18,8 @@ final class ReadTestdataFromGitHub { // Load user configuration do { if let userconfig = try await - testdata.loadanddecodestringdata(DecodeTestUserConfiguration.self, fromwhere: urlJSONuiconfig) { + testdata.loadanddecodestringdata(DecodeTestUserConfiguration.self, fromwhere: urlJSONuiconfig) + { await TestUserConfiguration(userconfig) print("ReadTestdataFromGitHub: loading userconfiguration COMPLETED)") } @@ -40,4 +42,34 @@ final class ReadTestdataFromGitHub { print("ReadTestdataFromGitHub: loading data FAILED)") } } + + func getdatanossh() async { + let testdata = TestdataFromGitHub() + // Load user configuration + do { + if let userconfig = try await + testdata.loadanddecodestringdata(DecodeTestUserConfiguration.self, fromwhere: urlJSONuiconfignossh) + { + await TestUserConfiguration(userconfig) + print("ReadTestdataFromGitHub: loading userconfiguration NOSSH COMPLETED)") + } + + } catch { + print("ReadTestdataFromGitHub: loading userconfiguration FAILED)") + } + // Load data + do { + if let testdata = try await testdata.loadanddecodearraydata(DecodeTestdata.self, fromwhere: urlJSON) { + testconfigurations.removeAll() + for i in 0 ..< testdata.count { + var configuration = TestSynchronizeConfiguration(testdata[i]) + configuration.profile = "test" + testconfigurations.append(configuration) + } + print("ReadTestdataFromGitHub: loading data COMPLETED)") + } + } catch { + print("ReadTestdataFromGitHub: loading data FAILED)") + } + } } diff --git a/Tests/SSHCreateKeyTests/SSHCreateKeyTests.swift b/Tests/SSHCreateKeyTests/SSHCreateKeyTests.swift index 6a049d7..6674b71 100644 --- a/Tests/SSHCreateKeyTests/SSHCreateKeyTests.swift +++ b/Tests/SSHCreateKeyTests/SSHCreateKeyTests.swift @@ -69,8 +69,84 @@ import Foundation sharedsshkeypathandidentityfile: identityfile) let sshrootpath = await sshcreatekey.testcreatesshkeyrootpath() - #expect(ArgumentsCreatSSHKeys().URLfilelocal == sshrootpath) + #expect(ArgumentsCreatSSHKeys().defaultURLfile == sshrootpath) let arguments = await sshcreatekey.argumentscreatekey() - #expect(ArgumentsCreatSSHKeys().sshcreatelocal == arguments) + #expect(ArgumentsCreatSSHKeys().defaultsshcreate == arguments) } } + +@Suite final class TestCreateSSHkeysNOSSH { + var testconfigurations: [TestSynchronizeConfiguration]? + + @Test func LodaDataCreateSSHKeys() async { + let loadtestdata = ReadTestdataFromGitHub() + await loadtestdata.getdatanossh() + + testconfigurations = loadtestdata.testconfigurations + + let sshcreatekey = await SSHCreateKey(sharedsshport: String(TestSharedReference.shared.sshport ?? -1), + sharedsshkeypathandidentityfile: TestSharedReference.shared.sshkeypathandidentityfile) + let arg3 = await sshcreatekey.keypathonly + #expect(ArgumentsCreatSSHKeys().defaultkeypath == arg3) + let arg4 = await sshcreatekey.identityfile + #expect(ArgumentsCreatSSHKeys().defaultidentityfileglobl == arg4) + let arg5 = await sshcreatekey.userHomeDirectoryPath + #expect(ArgumentsCreatSSHKeys().userHomeDirectoryPathglobal == arg5) + let arg6 = await sshcreatekey.sshkeypathandidentityfile + #expect(ArgumentsCreatSSHKeys().defaultsshkeypathandidentityfile == arg6) + let arg7 = await sshcreatekey.argumentssshcopyid(offsiteServer: "raspberrypi", offsiteUsername: "thomas") + #expect(ArgumentsCreatSSHKeys().argumentssshcopyiddefault == arg7) + } + + @Test func LodaDataCreateSSHKeysdefault() async { + let loadtestdata = ReadTestdataFromGitHub() + await loadtestdata.getdatanossh() + + testconfigurations = loadtestdata.testconfigurations + + // Sett Shareddata to nil or default values + let port = -1 + let identityfile: String? = nil + let sshcreatekey = await SSHCreateKey(sharedsshport: String(port), + sharedsshkeypathandidentityfile: identityfile) + let arg3 = await sshcreatekey.keypathonly + #expect(ArgumentsCreatSSHKeys().keypathdefault == arg3) + let arg4 = await sshcreatekey.identityfile + #expect(ArgumentsCreatSSHKeys().identityfiledefault == arg4) + let arg5 = await sshcreatekey.userHomeDirectoryPath + #expect(ArgumentsCreatSSHKeys().userHomeDirectoryPathdefault == arg5) + let arg6 = await sshcreatekey.sshkeypathandidentityfile + #expect(ArgumentsCreatSSHKeys().sshkeypathandidentityfiledefault == arg6) + let arg7 = await sshcreatekey.argumentssshcopyid(offsiteServer: "raspberrypi", offsiteUsername: "thomas") + #expect(ArgumentsCreatSSHKeys().argumentssshcopyiddefault == arg7) + } + + @Test func createkeys() async { + let loadtestdata = ReadTestdataFromGitHub() + await loadtestdata.getdatanossh() + + let sshcreatekey = await SSHCreateKey(sharedsshport: String(TestSharedReference.shared.sshport ?? -1), + sharedsshkeypathandidentityfile: TestSharedReference.shared.sshkeypathandidentityfile) + // If new keypath is set create it + let sshrootpath = await sshcreatekey.testcreatesshkeyrootpath() + #expect(ArgumentsCreatSSHKeys().defaultURLfile == sshrootpath) + // Create keys + let arguments = await sshcreatekey.argumentscreatekey() + #expect(ArgumentsCreatSSHKeys().defaultsshcreate == arguments) + } + + @Test func createkeysdefault() async { + + let port = -1 + let identityfile: String? = nil + + let sshcreatekey = await SSHCreateKey(sharedsshport: String(port), + sharedsshkeypathandidentityfile: identityfile) + + let sshrootpath = await sshcreatekey.testcreatesshkeyrootpath() + #expect(ArgumentsCreatSSHKeys().defaultURLfile == sshrootpath) + let arguments = await sshcreatekey.argumentscreatekey() + #expect(ArgumentsCreatSSHKeys().defaultsshcreate == arguments) + } +} + diff --git a/Tests/SSHCreateKeyTests/TestSynchronizeConfiguration.swift b/Tests/SSHCreateKeyTests/TestSynchronizeConfiguration.swift index 9ef8a49..8a72822 100644 --- a/Tests/SSHCreateKeyTests/TestSynchronizeConfiguration.swift +++ b/Tests/SSHCreateKeyTests/TestSynchronizeConfiguration.swift @@ -18,8 +18,6 @@ struct TestSynchronizeConfiguration: Identifiable, Codable { var parameter2: String var parameter3: String var parameter4: String - var parameter5: String - var parameter6: String var offsiteServer: String var backupID: String var dateRun: String? @@ -60,8 +58,6 @@ struct TestSynchronizeConfiguration: Identifiable, Codable { parameter2 = data.parameter2 ?? "" parameter3 = data.parameter3 ?? "" parameter4 = data.parameter4 ?? "" - parameter5 = data.parameter5 ?? "" - parameter6 = data.parameter6 ?? "" parameter8 = data.parameter8 parameter9 = data.parameter9 rsyncdaemon = data.rsyncdaemon @@ -91,8 +87,6 @@ extension TestSynchronizeConfiguration: Hashable, Equatable { lhs.parameter2 == rhs.parameter2 && lhs.parameter3 == rhs.parameter3 && lhs.parameter4 == rhs.parameter4 && - lhs.parameter5 == rhs.parameter5 && - lhs.parameter6 == rhs.parameter6 && lhs.parameter8 == rhs.parameter8 && lhs.parameter9 == rhs.parameter9 && lhs.parameter10 == rhs.parameter10 && @@ -100,7 +94,8 @@ extension TestSynchronizeConfiguration: Hashable, Equatable { lhs.parameter12 == rhs.parameter12 && lhs.parameter13 == rhs.parameter13 && lhs.parameter14 == rhs.parameter14 && - lhs.dateRun == rhs.dateRun + lhs.dateRun == rhs.dateRun && + lhs.backupID == rhs.backupID } func hash(into hasher: inout Hasher) { @@ -113,8 +108,6 @@ extension TestSynchronizeConfiguration: Hashable, Equatable { hasher.combine(parameter2) hasher.combine(parameter3) hasher.combine(parameter4) - hasher.combine(parameter5) - hasher.combine(parameter6) hasher.combine(parameter8) hasher.combine(parameter9) hasher.combine(parameter10) @@ -123,6 +116,7 @@ extension TestSynchronizeConfiguration: Hashable, Equatable { hasher.combine(parameter13) hasher.combine(parameter14) hasher.combine(dateRun) + hasher.combine(backupID) } } -- GitLab