Browse Source

Merge pull request #162 from grpc/test-with-debug-builds

Test with debug builds.
Tim Burks 7 years ago
parent
commit
1efd21a00a

+ 1 - 1
.travis-install.sh

@@ -30,7 +30,7 @@ mkdir -p local
 
 
 # Install swift
-SWIFT_URL=https://swift.org/builds/swift-4.0-branch/ubuntu1404/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-12-04-a/swift-4.0-DEVELOPMENT-SNAPSHOT-2017-12-04-a-ubuntu14.04.tar.gz
+SWIFT_URL=https://swift.org/builds/swift-4.0.3-release/ubuntu1404/swift-4.0.3-RELEASE/swift-4.0.3-RELEASE-ubuntu14.04.tar.gz
 echo $SWIFT_URL
 curl -fSsL $SWIFT_URL -o swift.tar.gz 
 tar -xzf swift.tar.gz --strip-components=2 --directory=local

+ 2 - 2
Examples/Echo/PackageManager/Makefile

@@ -1,7 +1,7 @@
 
 all:
-	swift build -c release --product Echo
-	cp .build/release/Echo .
+	swift build -c debug --product Echo
+	cp .build/debug/Echo .
 
 test:	all
 	./Echo serve & /bin/echo $$! > echo.pid

+ 4 - 0
Examples/Echo/PackageManager/Sources/main.swift

@@ -87,6 +87,7 @@ Group {
 
   $0.command("get", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a unary get().") { ssl, address, port, message in
+    print("calling get")
     let service = buildEchoService(ssl, address, port, message)
     var requestMessage = Echo_EchoRequest()
     requestMessage.text = message
@@ -97,6 +98,7 @@ Group {
 
   $0.command("expand", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a server-streaming expand().") { ssl, address, port, message in
+    print("calling expand")
     let service = buildEchoService(ssl, address, port, message)
     var requestMessage = Echo_EchoRequest()
     requestMessage.text = message
@@ -124,6 +126,7 @@ Group {
 
   $0.command("collect", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a client-streaming collect().") { ssl, address, port, message in
+    print("calling collect")
     let service = buildEchoService(ssl, address, port, message)
     let sem = DispatchSemaphore(value: 0)
     var callResult : CallResult?
@@ -169,6 +172,7 @@ Group {
 
   $0.command("update", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a bidirectional-streaming update().") { ssl, address, port, message in
+    print("calling update")
     let service = buildEchoService(ssl, address, port, message)
     let sem = DispatchSemaphore(value: 0)
     var callResult : CallResult?

+ 4 - 0
Examples/Echo/PackageManager/test.gold

@@ -1,17 +1,21 @@
+calling get
 get sending: Testing 1 2 3
 get received: Swift echo get: Testing 1 2 3
+calling expand
 expand sending: Testing 1 2 3
 expand received: Swift echo expand (0): Testing
 expand received: Swift echo expand (1): 1
 expand received: Swift echo expand (2): 2
 expand received: Swift echo expand (3): 3
 expand completed with code ok
+calling collect
 collect sending: Testing
 collect sending: 1
 collect sending: 2
 collect sending: 3
 collect received: Swift echo collect: Testing 1 2 3
 collect completed with status ok
+calling update
 update sending: Testing
 update sending: 1
 update sending: 2

+ 64 - 13
Examples/Echo2/Sources/main.swift

@@ -25,7 +25,7 @@ func addressOption(_ address: String) -> Option<String> {
 }
 
 let portOption = Option("port",
-                        default: "8081",
+                        default: "8080",
                         description: "port of server")
 let messageOption = Option("message",
                            default: "Testing 1 2 3",
@@ -87,6 +87,7 @@ Group {
 
   $0.command("get", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a unary get().") { ssl, address, port, message in
+    print("calling get")
     let service = buildEchoService(ssl, address, port, message)
     var requestMessage = Echo_EchoRequest()
     requestMessage.text = message
@@ -97,6 +98,7 @@ Group {
 
   $0.command("expand", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a server-streaming expand().") { ssl, address, port, message in
+    print("calling expand")
     let service = buildEchoService(ssl, address, port, message)
     var requestMessage = Echo_EchoRequest()
     requestMessage.text = message
@@ -117,13 +119,14 @@ Group {
       }
     }
     _ = sem.wait(timeout: DispatchTime.distantFuture)
-    if let statusMessage = callResult?.statusMessage {
-      print("expand completed with result \(statusMessage)")
+    if let statusCode = callResult?.statusCode {
+      print("expand completed with code \(statusCode)")
     }
   }
 
   $0.command("collect", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a client-streaming collect().") { ssl, address, port, message in
+    print("calling collect")
     let service = buildEchoService(ssl, address, port, message)
     let sem = DispatchSemaphore(value: 0)
     var callResult : CallResult?
@@ -131,24 +134,45 @@ Group {
       callResult = result
       sem.signal()
     }
+
+    let sendCountMutex = Mutex()
+    var sendCount = 0
+
     let parts = message.components(separatedBy: " ")
     for part in parts {
       var requestMessage = Echo_EchoRequest()
       requestMessage.text = part
       print("collect sending: " + part)
-      try collectCall.send(requestMessage) { error in print(error) }
-      usleep(100000)
+      try collectCall.send(requestMessage) {
+        error in
+        sendCountMutex.synchronize {
+          sendCount = sendCount + 1
+        }
+	if let error = error {	
+          print("collect send error \(error)")
+	}
+      }
+    }
+    // don't close until all sends have completed
+    var waiting = true
+    while (waiting) {
+      sendCountMutex.synchronize {
+        if sendCount == parts.count {
+          waiting = false
+        }
+      }
     }
     let responseMessage = try collectCall.closeAndReceive()
     print("collect received: \(responseMessage.text)")
     _ = sem.wait(timeout: DispatchTime.distantFuture)
-    if let statusMessage = callResult?.statusMessage {
-      print("collect completed with result \(statusMessage)")
+    if let statusCode = callResult?.statusCode {
+      print("collect completed with status \(statusCode)")
     }
   }
 
   $0.command("update", sslFlag, addressOption("localhost"), portOption, messageOption,
              description: "Perform a bidirectional-streaming update().") { ssl, address, port, message in
+    print("calling update")
     let service = buildEchoService(ssl, address, port, message)
     let sem = DispatchSemaphore(value: 0)
     var callResult : CallResult?
@@ -157,31 +181,58 @@ Group {
       sem.signal()
     }
 
+    let responsesMutex = Mutex()
+    var responses : [String] = []
+
     DispatchQueue.global().async {
       var running = true
       while running {
         do {
           let responseMessage = try updateCall.receive()
-          print("update received: \(responseMessage.text)")
+          responsesMutex.synchronize {
+            responses.append("update received: \(responseMessage.text)")
+          }
         } catch ClientError.endOfStream {
           running = false
         } catch (let error) {
-          print("error: \(error)")
+          responsesMutex.synchronize {
+            responses.append("update receive error: \(error)")
+          }
         }
       }
     }
+
     let parts = message.components(separatedBy: " ")
     for part in parts {
       var requestMessage = Echo_EchoRequest()
       requestMessage.text = part
       print("update sending: " + requestMessage.text)
-      try updateCall.send(requestMessage) { error in print(error) }
-      usleep(100000)
+      try updateCall.send(requestMessage) {
+        error in
+        if let error = error {
+          print("update send error: \(error)")
+        }
+      }
+    }
+
+    // don't close until last update is received
+    var waiting = true
+    while (waiting) {
+      responsesMutex.synchronize {
+        if responses.count == parts.count {
+          waiting = false
+        }
+      }
     }
     try updateCall.closeSend()
+
     _ = sem.wait(timeout: DispatchTime.distantFuture)
-    if let statusMessage = callResult?.statusMessage {
-      print("update completed with result \(statusMessage)")
+
+    for response in responses {
+      print(response)
+    }
+    if let statusCode = callResult?.statusCode {
+      print("update completed with status \(statusCode)")
     }
   }