             print("discoverAllPrimaryServicesByUUID")
             dump($0)
             guard case let .value(value) = $0 else { return }
+            
             testChecklist.discoverPrimaryServicesByUUID = value.count == 1
                 && value.contains { $0.uuid == TestProfile.TestService.uuid }
+            
+            if let service = value.first {
+                
+                client.discoverAllCharacteristics(of: service) {
+                    print("discoverAllCharacteristics")
+                    dump($0)
+                    guard case let .value(value) = $0 else { return }
+                    
+                    let uuids = value.map { $0.uuid }
+                    
+                    testChecklist.discoverAllCharacteristics = Set(uuids) == Set(characteristicUUIDs)
+                }
+            }
         }
+        
+        let start = Date()
         
         func didFinish() -> Bool {
             
-            return testChecklist.discoverAllPrimaryServices
+            return (Date() >= (start + 30))
+                && testChecklist.discoverAllPrimaryServices
                 && testChecklist.discoverPrimaryServicesByUUID
+                && testChecklist.discoverAllCharacteristics
         }
         
         // execute IO

        
        var testChecklist = GATTClientTests()
        
        client.discoverAllPrimaryServices {
            print("discoverAllPrimaryServices")
            dump($0)
            guard case let .value(value) = $0 else { return }
            testChecklist.discoverAllPrimaryServices = value.contains { $0.uuid == TestProfile.TestService.uuid }
        }
        

    
    var discoverAllPrimaryServices = false
    var discoverPrimaryServicesByUUID = false
    var discoverAllCharacteristics = false
}
