From f87b8de9f05097b65e8896f41c4e5161240c634d Mon Sep 17 00:00:00 2001 From: Joe Heck Date: Fri, 10 May 2024 07:51:00 -0700 Subject: [PATCH] illustrating hang in repo.find --- .../RepoWebsocketIntegrationTests.swift | 19 --------------- Tests/AutomergeRepoTests/RepoFindTest.swift | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 19 deletions(-) create mode 100644 Tests/AutomergeRepoTests/RepoFindTest.swift diff --git a/IntegrationTests/Tests/IntegrationTestsTests/RepoWebsocketIntegrationTests.swift b/IntegrationTests/Tests/IntegrationTestsTests/RepoWebsocketIntegrationTests.swift index 58440f0..2bff887 100644 --- a/IntegrationTests/Tests/IntegrationTestsTests/RepoWebsocketIntegrationTests.swift +++ b/IntegrationTests/Tests/IntegrationTestsTests/RepoWebsocketIntegrationTests.swift @@ -102,23 +102,4 @@ final class RepoWebsocketIntegrationTests: XCTestCase { XCTAssertEqual(foundDocHandle.id, handle.id) XCTAssertTrue(RepoHelpers.equalContents(doc1: foundDocHandle.doc, doc2: handle.doc)) } - - func testFindWithRandomId() async throws { - let repo = Repo(sharePolicy: SharePolicy.agreeable) - let websocket = WebSocketProvider(.init(reconnectOnError: false, loggingAt: .tracing)) - await repo.addNetworkAdapter(adapter: websocket) - - let url = try XCTUnwrap(URL(string: syncDestination)) - try await websocket.connect(to: url) - - let randomId = DocumentId() - do { - let _ = try await repo.find(id: randomId) - XCTFail("Repo shouldn't return a new, empty document for a random Document ID") - } catch let error as Errors.Unavailable { - XCTAssertEqual(error.id, randomId) - } catch { - XCTFail("Unknown error returned") - } - } } diff --git a/Tests/AutomergeRepoTests/RepoFindTest.swift b/Tests/AutomergeRepoTests/RepoFindTest.swift new file mode 100644 index 0000000..fa72c73 --- /dev/null +++ b/Tests/AutomergeRepoTests/RepoFindTest.swift @@ -0,0 +1,23 @@ +import Automerge +@testable import AutomergeRepo +import AutomergeUtilities +import XCTest + +final class RepoFindTest: XCTestCase { + func testRepoFindWithoutNetworkingActive() async throws { + let repo = Repo(sharePolicy: SharePolicy.agreeable) + let websocket = WebSocketProvider(.init(reconnectOnError: false, loggingAt: .tracing)) + await repo.addNetworkAdapter(adapter: websocket) + + let unavailableExpectation = expectation(description: "find should throw an Unavailable error") + Task { + do { + let handle = try await repo.find(id: DocumentId()) // never completes, never errors + print(handle) + } catch { + unavailableExpectation.fulfill() + } + } + await fulfillment(of: [unavailableExpectation], timeout: 5) + } +}