-
Notifications
You must be signed in to change notification settings - Fork 30
[WIP] Refactored networking #500
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
mpretty-cyro
wants to merge
65
commits into
session-foundation:dev
Choose a base branch
from
mpretty-cyro:feature/refactored-networking
base: dev
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
[WIP] Refactored networking #500
mpretty-cyro
wants to merge
65
commits into
session-foundation:dev
from
mpretty-cyro:feature/refactored-networking
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9f39a5c to
f4f479b
Compare
• Started work on integrating refactored libSession networking • Fixed a couple of issues with the libSession build script
• Fixed some duplicate content in Logging • Fixed broken service node batch requests • Fixed a crash which could occur when using the storage publisher functions
05ffd72 to
cb6b5aa
Compare
• Added some convenience functions • Removed the database requirement to get some AuthenticationMethods
• Cleaned up the AppDelegate setup process a bit • Updated the LibSessionNetwork to be an actor (no more cache + singleton) • Updated LibSessionNetwork to support async/await (also supports Combine, but that is now deprecated) • Updated network observation to use async/await • Refactored IP2Country to be an actor and use async/await • Refactored the pollers to use async/await • Refactored the getSessionId API call to use async/await • Refactored the AppSetup and database migrations to be async/await
• Fixed a couple of build issues with the Job changes • Fixed a crash which could happen on the loading screen when it fails to get the profile
• Fixed unit test build issues
• Removed the "TestContext" as while it works for Quick/Nimble, it wouldn't work for Swift Testing without needing `withTestContext` boilerplate around every test (now missing mocks will show their errors against the mock function instead of the calling test)
• Updated the `then{Return/Throw}` functions to throw so we can indicate failures during mocking without relying of the failureReporter
• Added the ability to select the "Router" which should be used for networking via the dev settings • Updated to the latest CocoaLumberjack • Updated console log to include source file and line • Fixed an issue where the RetrieveDefaultOpenGroupRoomsJob would just retry endlessly (also removed the auto-retry as it's probably not worth it)
• Replaced most `data.write` usages with `dependencies[singleton: .fileManager].write` for unit test mocking • Fixed a warning that would appear when running migration tests due to invalid mock image data trying to be loaded • Fixed Onboarding unit tests • Fixed LibSession-related tests
• Added a mechanism to ignore the type comparison when comparing against `any` values (for things like `MockEndpoint.any`) • Fixed an issue where `any` values weren't being compared recursively (so it would fail to match if an argument of an argument was a wildcard) • Updated MockNetwork to use Mockable • Updated MockExtensionHelper to be Mockable
• Updated MockKeychain to be Mockable • Updated MockImageDataManager to be Mockable • Updated MockSnodeAPICache to be Mockable • Updated feature storage in TestDependencies to be in memory instead of in user defaults (which may not be mocked) • Simplified some request building logic
• Updated MockFileManager to use Mockable • Updated MockOGMCache to use Mockable • Updated MockJobRunner to use Mockable • Updated MockLibSessionCache to use Mockable • Removed old mocking system • Fixed some tests that were broken but not caught by the old mocking system • Fixed remaining failing tests
• Fixed a bug where requests without payloads were encode incorrectly • Fixed a bug where the CurrentUserPoller wouldn't get released when destroyed • Fixed an issue where pollers, the `RetrieveDefaultRoomsJob`, `SyncPushTokensJob, and the `ConfigurationSyncJob` would all continue their logic when the network instance was changed instead of waiting for it to have the "connected" status
…etworking # Conflicts: # Session.xcodeproj/project.pbxproj # Session/Closed Groups/EditGroupViewModel.swift # Session/Home/New Conversation/NewMessageScreen.swift # Session/Meta/AppDelegate.swift # Session/Meta/Session+SNUIKit.swift # Session/Notifications/SyncPushTokensJob.swift # Session/Settings/DeveloperSettings/DeveloperSettingsViewModel.swift # Session/Settings/NukeDataModal.swift # Session/Settings/SessionNetworkScreen/SessionNetworkScreen+ViewModel.swift # SessionMessagingKit/Database/Migrations/_036_GroupsRebuildChanges.swift # SessionMessagingKit/Database/Models/ClosedGroup.swift # SessionMessagingKit/Jobs/ConfigurationSyncJob.swift # SessionMessagingKit/Jobs/ExpirationUpdateJob.swift # SessionMessagingKit/Jobs/GetExpirationJob.swift # SessionMessagingKit/Jobs/RetrieveDefaultOpenGroupRoomsJob.swift # SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Groups.swift # SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+UnsendRequests.swift # SessionMessagingKit/Sending & Receiving/Message Handling/MessageSender+Groups.swift # SessionMessagingKit/Sending & Receiving/Notifications/Models/LegacyUnsubscribeRequest.swift # SessionMessagingKit/Sending & Receiving/Notifications/PushNotificationAPI.swift # SessionMessagingKit/Sending & Receiving/Pollers/CommunityPoller.swift # SessionMessagingKit/Sending & Receiving/Pollers/CurrentUserPoller.swift # SessionMessagingKit/Sending & Receiving/Pollers/GroupPoller.swift # SessionMessagingKit/Sending & Receiving/Pollers/PollerType.swift # SessionMessagingKit/Sending & Receiving/Pollers/SwarmPoller.swift # SessionMessagingKit/Utilities/Authentication+SessionMessagingKit.swift # SessionMessagingKitTests/Database/Models/MessageDeduplicationSpec.swift # SessionMessagingKitTests/Jobs/DisplayPictureDownloadJobSpec.swift # SessionMessagingKitTests/Jobs/MessageSendJobSpec.swift # SessionMessagingKitTests/Jobs/RetrieveDefaultOpenGroupRoomsJobSpec.swift # SessionMessagingKitTests/LibSession/LibSessionGroupInfoSpec.swift # SessionMessagingKitTests/LibSession/LibSessionGroupMembersSpec.swift # SessionMessagingKitTests/LibSession/LibSessionSpec.swift # SessionMessagingKitTests/Open Groups/Crypto/CryptoOpenGroupSpec.swift # SessionMessagingKitTests/Open Groups/OpenGroupManagerSpec.swift # SessionMessagingKitTests/Sending & Receiving/MessageReceiverGroupsSpec.swift # SessionMessagingKitTests/Sending & Receiving/MessageSenderGroupsSpec.swift # SessionMessagingKitTests/Sending & Receiving/MessageSenderSpec.swift # SessionMessagingKitTests/Sending & Receiving/Pollers/CommunityPollerSpec.swift # SessionMessagingKitTests/Utilities/ExtensionHelperSpec.swift # SessionMessagingKitTests/_TestUtilities/MockOGMCache.swift # SessionMessagingKitTests/_TestUtilities/MockPoller.swift # SessionMessagingKitTests/_TestUtilities/MockSwarmPoller.swift # SessionNetworkingKit/Crypto/Crypto+SessionNetworkingKit.swift # SessionNetworkingKit/Database/Models/SnodeReceivedMessageInfo.swift # SessionNetworkingKit/FileServer/Crypto/Crypto+FileServer.swift # SessionNetworkingKit/LibSession/LibSession+Networking.swift # SessionNetworkingKit/Models/AppVersionResponse.swift # SessionNetworkingKit/Models/DeleteAllMessagesRequest.swift # SessionNetworkingKit/Models/DeleteAllMessagesResponse.swift # SessionNetworkingKit/Models/DeleteMessagesRequest.swift # SessionNetworkingKit/Models/DeleteMessagesResponse.swift # SessionNetworkingKit/Models/GetExpiriesRequest.swift # SessionNetworkingKit/Models/GetExpiriesResponse.swift # SessionNetworkingKit/Models/GetMessagesRequest.swift # SessionNetworkingKit/Models/GetMessagesResponse.swift # SessionNetworkingKit/Models/GetNetworkTimestampResponse.swift # SessionNetworkingKit/Models/LegacyGetMessagesRequest.swift # SessionNetworkingKit/Models/LegacySendMessageRequest.swift # SessionNetworkingKit/Models/ONSResolveRequest.swift # SessionNetworkingKit/Models/ONSResolveResponse.swift # SessionNetworkingKit/Models/OxenDaemonRPCRequest.swift # SessionNetworkingKit/Models/RevokeSubaccountRequest.swift # SessionNetworkingKit/Models/RevokeSubaccountResponse.swift # SessionNetworkingKit/Models/SendMessageRequest.swift # SessionNetworkingKit/Models/SendMessageResponse.swift # SessionNetworkingKit/Models/SnodeAuthenticatedRequestBody.swift # SessionNetworkingKit/Models/SnodeMessage.swift # SessionNetworkingKit/Models/SnodeReceivedMessage.swift # SessionNetworkingKit/Models/SnodeRecursiveResponse.swift # SessionNetworkingKit/Models/SnodeResponse.swift # SessionNetworkingKit/Models/SnodeSwarmItem.swift # SessionNetworkingKit/Models/UnrevokeSubaccountRequest.swift # SessionNetworkingKit/Models/UnrevokeSubaccountResponse.swift # SessionNetworkingKit/Models/UpdateExpiryAllRequest.swift # SessionNetworkingKit/Models/UpdateExpiryAllResponse.swift # SessionNetworkingKit/Models/UpdateExpiryRequest.swift # SessionNetworkingKit/Models/UpdateExpiryResponse.swift # SessionNetworkingKit/PushNotification/Models/NotificationMetadata.swift # SessionNetworkingKit/PushNotification/Models/SubscribeRequest.swift # SessionNetworkingKit/PushNotification/Models/UnsubscribeRequest.swift # SessionNetworkingKit/PushNotification/Types/Request+PushNotificationAPI.swift # SessionNetworkingKit/SOGS/Models/SOGSMessage.swift # SessionNetworkingKit/SOGS/SOGSAPI.swift # SessionNetworkingKit/SOGS/SOGSEndpoint.swift # SessionNetworkingKit/SOGS/Types/HTTPHeader+SOGS.swift # SessionNetworkingKit/SOGS/Types/HTTPQueryParam+SOGS.swift # SessionNetworkingKit/SOGS/Types/Request+SOGS.swift # SessionNetworkingKit/SnodeAPI/ResponseInfo+SnodeAPI.swift # SessionNetworkingKit/SnodeAPI/SnodeAPI.swift # SessionNetworkingKit/SnodeAPI/SnodeAPIEndpoint.swift # SessionNetworkingKit/SnodeAPI/SnodeAPIError.swift # SessionNetworkingKit/SnodeAPI/SnodeAPINamespace.swift # SessionNetworkingKit/StorageServer/Database/SnodeReceivedMessageInfo.swift # SessionNetworkingKit/StorageServer/Models/DeleteAllBeforeRequest.swift # SessionNetworkingKit/StorageServer/Models/DeleteAllBeforeResponse.swift # SessionNetworkingKit/StorageServer/Models/DeleteAllMessagesRequest.swift # SessionNetworkingKit/StorageServer/Models/DeleteAllMessagesResponse.swift # SessionNetworkingKit/StorageServer/Models/DeleteMessagesRequest.swift # SessionNetworkingKit/StorageServer/Models/DeleteMessagesResponse.swift # SessionNetworkingKit/StorageServer/Models/GetExpiriesRequest.swift # SessionNetworkingKit/StorageServer/Models/GetExpiriesResponse.swift # SessionNetworkingKit/StorageServer/Models/GetMessagesRequest.swift # SessionNetworkingKit/StorageServer/Models/GetMessagesResponse.swift # SessionNetworkingKit/StorageServer/Models/GetNetworkTimestampResponse.swift # SessionNetworkingKit/StorageServer/Models/LegacyGetMessagesRequest.swift # SessionNetworkingKit/StorageServer/Models/LegacySendMessageRequest.swift # SessionNetworkingKit/StorageServer/Models/ONSResolveRequest.swift # SessionNetworkingKit/StorageServer/Models/ONSResolveResponse.swift # SessionNetworkingKit/StorageServer/Models/RevokeSubaccountRequest.swift # SessionNetworkingKit/StorageServer/Models/RevokeSubaccountResponse.swift # SessionNetworkingKit/StorageServer/Models/SendMessageRequest.swift # SessionNetworkingKit/StorageServer/Models/SendMessageResponse.swift # SessionNetworkingKit/StorageServer/Models/SnodeAuthenticatedRequestBody.swift # SessionNetworkingKit/StorageServer/Models/SnodeBatchRequest.swift # SessionNetworkingKit/StorageServer/Models/SnodeRecursiveResponse.swift # SessionNetworkingKit/StorageServer/Models/SnodeRequest.swift # SessionNetworkingKit/StorageServer/Models/SnodeResponse.swift # SessionNetworkingKit/StorageServer/Models/SnodeSwarmItem.swift # SessionNetworkingKit/StorageServer/Models/UnrevokeSubaccountRequest.swift # SessionNetworkingKit/StorageServer/Models/UnrevokeSubaccountResponse.swift # SessionNetworkingKit/StorageServer/Models/UpdateExpiryAllRequest.swift # SessionNetworkingKit/StorageServer/Models/UpdateExpiryAllResponse.swift # SessionNetworkingKit/StorageServer/Models/UpdateExpiryRequest.swift # SessionNetworkingKit/StorageServer/Models/UpdateExpiryResponse.swift # SessionNetworkingKit/StorageServer/SnodeAPIEndpoint.swift # SessionNetworkingKit/StorageServer/SnodeAPIError.swift # SessionNetworkingKit/StorageServer/SnodeAPINamespace.swift # SessionNetworkingKit/StorageServer/Types/Request+SnodeAPI.swift # SessionNetworkingKit/StorageServer/Types/ResponseInfo+SnodeAPI.swift # SessionNetworkingKit/StorageServer/Types/SnodeMessage.swift # SessionNetworkingKit/StorageServer/Types/SnodeReceivedMessage.swift # SessionNetworkingKit/Types/Network.swift # SessionNetworkingKit/Types/PreparedRequest+Sending.swift # SessionNetworkingKit/Types/SwarmDrainBehaviour.swift # SessionNetworkingKit/Types/UpdatableTimestamp.swift # SessionNetworkingKitTests/Models/SnodeRequestSpec.swift # SessionNetworkingKitTests/SOGS/Models/SOGSMessageSpec.swift # SessionNetworkingKitTests/SOGS/SOGSAPISpec.swift # SessionNetworkingKitTests/SOGS/Types/SOGSEndpointSpec.swift # SessionNetworkingKitTests/_TestUtilities/MockNetwork.swift # SessionNetworkingKitTests/_TestUtilities/MockSnodeAPICache.swift # SessionShareExtension/ShareNavController.swift # SessionShareExtension/ThreadPickerVC.swift # SessionSnodeKit/Crypto/Crypto+SessionSnodeKit.swift # SessionSnodeKit/Database/Models/SnodeReceivedMessageInfo.swift # SessionSnodeKit/Models/DeleteAllMessagesRequest.swift # SessionSnodeKit/Models/DeleteAllMessagesResponse.swift # SessionSnodeKit/Models/DeleteMessagesRequest.swift # SessionSnodeKit/Models/DeleteMessagesResponse.swift # SessionSnodeKit/Models/GetExpiriesRequest.swift # SessionSnodeKit/Models/GetExpiriesResponse.swift # SessionSnodeKit/Models/GetMessagesRequest.swift # SessionSnodeKit/Models/GetMessagesResponse.swift # SessionSnodeKit/Models/GetNetworkTimestampResponse.swift # SessionSnodeKit/Models/LegacyGetMessagesRequest.swift # SessionSnodeKit/Models/LegacySendMessageRequest.swift # SessionSnodeKit/Models/ONSResolveRequest.swift # SessionSnodeKit/Models/ONSResolveResponse.swift # SessionSnodeKit/Models/RevokeSubaccountRequest.swift # SessionSnodeKit/Models/RevokeSubaccountResponse.swift # SessionSnodeKit/Models/SendMessageRequest.swift # SessionSnodeKit/Models/SendMessageResponse.swift # SessionSnodeKit/Models/SnodeAuthenticatedRequestBody.swift # SessionSnodeKit/Models/SnodeMessage.swift # SessionSnodeKit/Models/SnodeReceivedMessage.swift # SessionSnodeKit/Models/SnodeRecursiveResponse.swift # SessionSnodeKit/Models/SnodeResponse.swift # SessionSnodeKit/Models/SnodeSwarmItem.swift # SessionSnodeKit/Models/UnrevokeSubaccountRequest.swift # SessionSnodeKit/Models/UnrevokeSubaccountResponse.swift # SessionSnodeKit/Models/UpdateExpiryAllRequest.swift # SessionSnodeKit/Models/UpdateExpiryAllResponse.swift # SessionSnodeKit/Models/UpdateExpiryRequest.swift # SessionSnodeKit/Models/UpdateExpiryResponse.swift # SessionSnodeKit/SnodeAPI/ResponseInfo+SnodeAPI.swift # SessionSnodeKit/SnodeAPI/SnodeAPIEndpoint.swift # SessionSnodeKit/SnodeAPI/SnodeAPIError.swift # SessionSnodeKit/SnodeAPI/SnodeAPINamespace.swift # SessionTests/Conversations/Settings/ThreadDisappearingMessagesViewModelSpec.swift # SessionTests/Conversations/Settings/ThreadNotificationSettingsViewModelSpec.swift # SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift # SessionTests/Database/DatabaseSpec.swift # SessionTests/Onboarding/OnboardingSpec.swift # SessionTests/Settings/NotificationContentViewModelSpec.swift # SessionUtilitiesKit/Database/Storage.swift # SessionUtilitiesKit/General/Logging.swift # SessionUtilitiesKit/LibSession/LibSession.swift # SessionUtilitiesKitTests/Database/Models/IdentitySpec.swift # SessionUtilitiesKitTests/JobRunner/JobRunnerSpec.swift # SignalUtilitiesKit/Utilities/AppSetup.swift # _SharedTestUtilities/SynchronousStorage.swift
• Refactored the OGMCache to be part of the OpenGroupManager (which is also now an actor) • Fixed a broken test
• Removed the StorageServerCache • Cleaned up DSL for getting the network offset timestamp • Updated the ExpirationUpdateJob to use async/await internally
• Enabled "Direct" mode for routing in dev settings • Fixed a bug where the disappearing messages job would run in an excessive loop due to an incorrect value being used
…etworking # Conflicts: # Session.xcodeproj/project.pbxproj # Session/Settings/DeveloperSettings/DeveloperSettingsViewModel+Testing.swift # Session/Settings/DeveloperSettings/DeveloperSettingsViewModel.swift # SessionMessagingKit/Jobs/RetrieveDefaultOpenGroupRoomsJob.swift # SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift # SessionMessagingKit/Utilities/ExtensionHelper.swift # SessionMessagingKitTests/Jobs/RetrieveDefaultOpenGroupRoomsJobSpec.swift # SessionMessagingKitTests/_TestUtilities/ArgumentDescribing+SMK.swift # SessionMessagingKitTests/_TestUtilities/CustomArgSummaryDescribable+SMK.swift # SessionMessagingKitTests/_TestUtilities/CustomArgSummaryDescribable+SessionMessagingKit.swift # SessionNetworkingKit/LibSession/LibSession+Networking.swift # SessionUtilitiesKit/Observations/ObservationManager.swift
• Added proper async dependency notification functions • Added the `disableDeveloperMode` functionality to the `DeveloperSettingsNetworkViewModel` • Refactored the RetrieveDefaultOpenGroupRoomsJob to use async/await internally • Removed the auth that was incorrectly re-added to the default SOGS retrieval • Fixed failing unit tests
• Tweaked the code to avoid applying the "router" change until applying other changes when modifying network config • Tweaked the code to unsubscribe from current PNs when changing the environment (previously the requests were very likely to just immediately fail due to the network being swapped) • Fixed some failing tests • Fixed some cases where we might fail to unsubscribe from group PNs • Fixed a multithreading crash when changing the network configuration (would affect other code)
…etworking # Conflicts: # Session.xcodeproj/project.pbxproj # SessionNetworkingKit/PushNotification/PushNotificationAPI.swift
• Disabled dependency observation in iOS 15 to avoid version-specific crashes • Cleaned up some logic in the async/await tools
…etworking # Conflicts: # Session.xcodeproj/project.pbxproj # Session/Meta/SessionApp.swift
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
bug
Something isn't working
enhancement
New feature or request
Jira
This ticket is being tracked in Jira
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Note: This is based on #501