Skip to content

Commit 2655645

Browse files
authored
fix: storage instance issue (#118)
1 parent 96b95ba commit 2655645

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

Sources/Amplitude/Utilities/OutputFileStream.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,21 @@ internal class OutputFileStream {
5050
if fileHandle != nil { return }
5151
do {
5252
fileHandle = try FileHandle(forWritingTo: fileURL)
53+
if #available(macOS 10.15.4, iOS 13.4, macCatalyst 13.4, tvOS 13.4, watchOS 6.2, *) {
54+
_ = try? fileHandle?.seekToEnd()
55+
} else if #available(tvOS 13.0, *) {
56+
try? fileHandle?.seek(toOffset: .max)
57+
} else {
58+
fileHandle?.seekToEndOfFile()
59+
}
5360
} catch {
5461
throw OutputStreamError.unableToOpen(fileURL.path)
5562
}
5663
}
5764

5865
func write(_ data: Data) throws {
5966
guard data.isEmpty == false else { return }
60-
if #available(macOS 10.15.4, iOS 13.4, macCatalyst 13.4, tvOS 13.4, watchOS 13.4, *) {
67+
if #available(macOS 10.15.4, iOS 13.4, macCatalyst 13.4, tvOS 13.4, watchOS 6.2, *) {
6168
do {
6269
try fileHandle?.write(contentsOf: data)
6370
} catch {

Tests/AmplitudeTests/Storages/PersistentStorageTests.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,33 @@ final class PersistentStorageTests: XCTestCase {
5050
persistentStorage.reset()
5151
}
5252

53+
func testWriteWithTwoInstances() {
54+
let persistentStorage1 = PersistentStorage(storagePrefix: "xxx-instance")
55+
try? persistentStorage1.write(
56+
key: StorageKey.EVENTS,
57+
value: BaseEvent(eventType: "test1")
58+
)
59+
let persistentStorage2 = PersistentStorage(storagePrefix: "xxx-instance")
60+
try? persistentStorage2.write(
61+
key: StorageKey.EVENTS,
62+
value: BaseEvent(eventType: "test2")
63+
)
64+
// Only read from second instance, reading from first instance insert the "]" at the wrong cursor.
65+
let eventFiles2: [URL]? = persistentStorage2.read(key: StorageKey.EVENTS)
66+
XCTAssertEqual(eventFiles2?[0].absoluteString.contains("xxx-instance.events.index"), true)
67+
XCTAssertNotEqual(eventFiles2?[0].pathExtension, PersistentStorage.TEMP_FILE_EXTENSION)
68+
69+
XCTAssertEqual(eventFiles2?.count, 1)
70+
71+
let eventString2 = persistentStorage2.getEventsString(eventBlock: (eventFiles2?[0])!)
72+
let decodedEvents = BaseEvent.fromArrayString(jsonString: eventString2!)
73+
XCTAssertEqual(decodedEvents!.count, 2)
74+
XCTAssertEqual(decodedEvents![0].eventType, "test1")
75+
XCTAssertEqual(decodedEvents![1].eventType, "test2")
76+
persistentStorage1.reset()
77+
persistentStorage2.reset()
78+
}
79+
5380
#if os(macOS)
5481
func testMacOsStorageDirectorySandboxedWhenAppSandboxDisabled() {
5582
let persistentStorage = PersistentStorage(storagePrefix: "mac-instance")

0 commit comments

Comments
 (0)