|
|
@@ -519,4 +519,80 @@ final class ReflectionServiceUnitTests: GRPCTestCase {
|
|
|
|
|
|
XCTAssertEqual(try extensionsFieldNumbersOfTypeResult.get(), [1, 2, 3, 4, 5, 130])
|
|
|
}
|
|
|
+
|
|
|
+ func testReadSerializedFileDescriptorProto() throws {
|
|
|
+ let initialFileDescriptorProto = generateFileDescriptorProto(fileName: "test", suffix: "1")
|
|
|
+ let data = try initialFileDescriptorProto.serializedData().base64EncodedData()
|
|
|
+ #if os(Linux)
|
|
|
+ let temporaryDirectory = "/tmp/"
|
|
|
+ #else
|
|
|
+ let temporaryDirectory = FileManager.default.temporaryDirectory.path()
|
|
|
+ #endif
|
|
|
+ let filePath = "\(temporaryDirectory)test\(UUID()).grpc.reflection"
|
|
|
+ FileManager.default.createFile(atPath: filePath, contents: data)
|
|
|
+ defer {
|
|
|
+ XCTAssertNoThrow(try FileManager.default.removeItem(atPath: filePath))
|
|
|
+ }
|
|
|
+ let reflectionServiceFileDescriptorProto =
|
|
|
+ try ReflectionService.readSerializedFileDescriptorProto(atPath: filePath)
|
|
|
+ XCTAssertEqual(reflectionServiceFileDescriptorProto, initialFileDescriptorProto)
|
|
|
+ }
|
|
|
+
|
|
|
+ func testReadSerializedFileDescriptorProtoInvalidFileContents() throws {
|
|
|
+ let invalidData = "%%%%%££££".data(using: .utf8)
|
|
|
+ #if os(Linux)
|
|
|
+ let temporaryDirectory = "/tmp/"
|
|
|
+ #else
|
|
|
+ let temporaryDirectory = FileManager.default.temporaryDirectory.path()
|
|
|
+ #endif
|
|
|
+ let filePath = "\(temporaryDirectory)test\(UUID()).grpc.reflection"
|
|
|
+ FileManager.default.createFile(atPath: filePath, contents: invalidData)
|
|
|
+ defer {
|
|
|
+ XCTAssertNoThrow(try FileManager.default.removeItem(atPath: filePath))
|
|
|
+ }
|
|
|
+
|
|
|
+ XCTAssertThrowsGRPCStatus(
|
|
|
+ try ReflectionService.readSerializedFileDescriptorProto(atPath: filePath)
|
|
|
+ ) {
|
|
|
+ status in
|
|
|
+ XCTAssertEqual(
|
|
|
+ status,
|
|
|
+ GRPCStatus(
|
|
|
+ code: .invalidArgument,
|
|
|
+ message:
|
|
|
+ """
|
|
|
+ The \(filePath) file contents could not be transformed \
|
|
|
+ into serialized data representing a file descriptor proto.
|
|
|
+ """
|
|
|
+ )
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ func testReadSerializedFileDescriptorProtos() throws {
|
|
|
+ let initialFileDescriptorProtos = makeProtosWithDependencies()
|
|
|
+ var filePaths: [String] = []
|
|
|
+
|
|
|
+ for initialFileDescriptorProto in initialFileDescriptorProtos {
|
|
|
+ let data = try initialFileDescriptorProto.serializedData()
|
|
|
+ .base64EncodedData()
|
|
|
+ #if os(Linux)
|
|
|
+ let temporaryDirectory = "/tmp/"
|
|
|
+ #else
|
|
|
+ let temporaryDirectory = FileManager.default.temporaryDirectory.path()
|
|
|
+ #endif
|
|
|
+ let filePath = "\(temporaryDirectory)test\(UUID()).grpc.reflection"
|
|
|
+ FileManager.default.createFile(atPath: filePath, contents: data)
|
|
|
+ filePaths.append(filePath)
|
|
|
+ }
|
|
|
+ defer {
|
|
|
+ for filePath in filePaths {
|
|
|
+ XCTAssertNoThrow(try FileManager.default.removeItem(atPath: filePath))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ let reflectionServiceFileDescriptorProtos =
|
|
|
+ try ReflectionService.readSerializedFileDescriptorProtos(atPaths: filePaths)
|
|
|
+ XCTAssertEqual(reflectionServiceFileDescriptorProtos, initialFileDescriptorProtos)
|
|
|
+ }
|
|
|
}
|