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

        
        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 }
        }
        

            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 (Date() >= (start + 30))
                && testChecklist.discoverAllPrimaryServices
                && testChecklist.discoverPrimaryServicesByUUID
                && testChecklist.discoverAllCharacteristics
        }
        
        // execute IO
