def Write_Notification_Size_Greater_Than_MTU_3(scan_filter, bleAdapter): runTest._advertisement_connection_tests( scan_filter=scan_filter, bleAdapter=bleAdapter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb) runTest._simple_connect() runTest.stopAdvertisement(scan_filter) bleAdapter.gatt.updateLocalAttributeTable() # Data size > MTU - 3 send notification test bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID) #subscribe for next test isTestSuccessFull = True runTest.mainloop.run() isTestSuccessFull &= runTest.isNotificationDeclinedSuccessFull # unsubscribe isTestSuccessFull &= bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID, subscribe=False) #unsubscribe isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Check_ServiceData(scan_filter, bleAdapter, bEnableServiceData): isTestSuccessFull = True runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_16, discoveryEvent_Cb=runTest.discoveryEventCb_16bit, bleAdapter=bleAdapter) service_data = runTest.get_service_data(runTest.testDevice) if bEnableServiceData == False: if service_data is not None: print("ERROR: SERV_DATA is not None") isTestSuccessFull &= False else: if service_data is None: print("ERROR: SERV_DATA is None") isTestSuccessFull &= False else: for data in service_data: if data != runTest.SERV_DATA: print("SERV_DATA is not correct. Data received: %d" % data) isTestSuccessFull &= False runTest._simple_connect() runTest.stopAdvertisement(scan_filter) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Write_Notification_Size_Greater_Than_MTU_3(scan_filter, bleAdapter): runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) runTest._simple_connect() runTest.stopAdvertisement(scan_filter) isTestSuccessFull_discover = runTest.discoverPrimaryServices() bleAdapter.gatt.updateLocalAttributeTable() bleAdapter.setNotificationCallBack(runTest.notificationMTUCb) bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID) # subscribe for next test runTest.mainloop.run() isTestSuccessFull_notification = runTest.isNotificationDeclinedSuccessFull runTest.submitTestResult(isTestSuccessFull_notification, runTest.notification) isTestSuccessFull_removenotification = bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID, subscribe=False) # unsubscribe runTest.submitTestResult(isTestSuccessFull_removenotification, runTest.removeNotification) isTestSuccessFull_disconnect = bleAdapter.disconnect() testutils.removeBondedDevices() isTestSuccessFull = (isTestSuccessFull_discover & isTestSuccessFull_notification & isTestSuccessFull_removenotification & isTestSuccessFull_disconnect) return isTestSuccessFull
def teardown_test(agent): securityAgent.removeSecurityAgent() os.system("sudo rm -rf \"/var/lib/bluetooth/*\"") os.system("sudo hciconfig hci0 reset") testutils.removeBondedDevices() return agent
def _advertisement_connection_tests(scan_filter, bleAdapter, UUID, discoveryEvent_Cb): runTest._advertisement_start(scan_filter=scan_filter, UUID=UUID, discoveryEvent_Cb=discoveryEvent_Cb, bleAdapter=bleAdapter) runTest._simple_connect() runTest.stopAdvertisement(scan_filter) bleAdapter.disconnect() testutils.removeBondedDevices()
def Change_MTU_Size(scan_filter, bleAdapter): runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) runTest._simple_connect() time.sleep(5) isTestSuccessFull = bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Check_Bond_State(scan_filter, bleAdapter): runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) runTest._simple_connect() isTestSuccessFull = runTest.discoverPrimaryServices() runTest.submitTestResult(isTestSuccessFull, runTest.discoverPrimaryServices) bleAdapter.gatt.updateLocalAttributeTable() isTestSuccessFull &= bleAdapter.pair_cancelpairing() time.sleep(2) testutils.removeBondedDevices() return isTestSuccessFull
def Callback_NULL_check(scan_filter, bleAdapter): runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) runTest._simple_connect() isTestSuccessFull = runTest.discoverPrimaryServices() runTest.submitTestResult(isTestSuccessFull, runTest.discoverPrimaryServices) bleAdapter.gatt.updateLocalAttributeTable(False) isTestSuccessFull &= runTest.checkUUIDs(bleAdapter.gatt, False) time.sleep(5) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Advertise_Interval_Consistent_After_BT_Reset(scan_filter, bleAdapter): isTestSuccessFull = True runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) secondKPI = runTest._scan_discovery_with_timer(bleAdapter) runTest._simple_connect() isTestSuccessFull = runTest.discoverPrimaryServices() bleAdapter.gatt.updateLocalAttributeTable( False ) time.sleep(2) # wait for connection parameters update # Second time disconnect isTestSuccessFull &= bleAdapter.disconnect() # Third time connection # wait for DUT to start advertising thirdKPI = runTest._scan_discovery_with_timer(bleAdapter) isTestSuccessFull &= bleAdapter.connect(runTest.testDevice) if thirdKPI > secondKPI * 10: isTestSuccessFull &= False # write result back to server isTestSuccessFull = runTest.discoverPrimaryServices() bleAdapter.gatt.updateLocalAttributeTable( False ) isTestSuccessFull &= runTest.writeResultWithoutResponse( chr(isTestSuccessFull + 48)) runTest.stopAdvertisement(scan_filter) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Advertise_With_Manufacture_Data(scan_filter, bleAdapter): isTestSuccessFull = True # Check when manufacture data length is 0, but pointer is valid runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) manufacture_data = runTest.get_manufacture_data(runTest.testDevice) if manufacture_data is not None: isTestSuccessFull = False runTest._simple_connect() runTest.stopAdvertisement(scan_filter) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() # Check when manufacture data pointer is NULL, but length is not 0 runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) manufacture_data = runTest.get_manufacture_data(runTest.testDevice) if manufacture_data is not None: isTestSuccessFull = False runTest._simple_connect() runTest.stopAdvertisement(scan_filter) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() # Check when manufacture data length is not 0, and pointer is valid runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) manufacture_data = runTest.get_manufacture_data(runTest.testDevice) for data in manufacture_data: if data != runTest.MANU_DATA: isTestSuccessFull = False runTest._simple_connect() runTest.stopAdvertisement(scan_filter) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def Send_Data_After_Disconnected(scan_filter, bleAdapter): runTest._advertisement_start( scan_filter=scan_filter, UUID=runTest.DUT_UUID_128, discoveryEvent_Cb=runTest.discoveryEventCb, bleAdapter=bleAdapter) runTest._simple_connect() isTestSuccessFull = runTest.discoverPrimaryServices() runTest.submitTestResult(isTestSuccessFull, runTest.discoverPrimaryServices) bleAdapter.gatt.updateLocalAttributeTable() # Check device not present. After discovery of services, advertisement # should have stopped. runTest.stopAdvertisement(scan_filter) # Check write and read bleAdapter.writeCharacteristic(runTest.DUT_OPEN_CHAR_UUID, runTest.DUT_OPEN_DESCR_UUID) bleAdapter.readCharacteristic(runTest.DUT_OPEN_CHAR_UUID) # Enable and receive notification and indication then disable. bleAdapter.subscribeForNotification(runTest.DUT_NOTIFY_CHAR_UUID) bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID) # subscribe for next test time.sleep(2) # wait for connection parameters update # Check Notification and Indication bleAdapter.setNotificationCallBack(runTest.notificationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.notification) bleAdapter.setNotificationCallBack(runTest.indicationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.indication) isTestSuccessFull &= bleAdapter.disconnect() # Second time connection # wait for DUT to start advertising bleAdapter.startDiscovery(runTest.discoveryStartedCb) runTest.mainloop.run() bleAdapter.stopDiscovery() runTest._simple_connect() bleAdapter.subscribeForNotification(runTest.DUT_NOTIFY_CHAR_UUID) bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID) # subscribe for next test # Check write and read after reconnection bleAdapter.writeCharacteristic(runTest.DUT_OPEN_CHAR_UUID, runTest.DUT_OPEN_DESCR_UUID) bleAdapter.readCharacteristic(runTest.DUT_OPEN_CHAR_UUID) # Check Notification and Indication after reconnection bleAdapter.setNotificationCallBack(runTest.notificationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.notification) bleAdapter.setNotificationCallBack(runTest.indicationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.indication) isTestSuccessFull = bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID, subscribe=False) # unsubscribe isTestSuccessFull = True runTest.submitTestResult(isTestSuccessFull, runTest.removeNotification) isTestSuccessFull = bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID, subscribe=False) # unsubscribe isTestSuccessFull = True runTest.submitTestResult(isTestSuccessFull, runTest.removeIndication) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() return isTestSuccessFull
def main(): scan_filter = dict() bleAdapter.init() agent = securityAgent.createSecurityAgent() # default DUT_name: nimble(without set_property) # TODO: check DUT with MAC address instead of name. scan_filter.update({"UUIDs": [runTest.DUT_UUID_128]}) # default DUT_name: nimble(without set_property) # TODO: check DUT with MAC address instead of name. DUT_ORIGINAL_NAME = runTest.DUT_NAME runTest.DUT_NAME = "nimb" bleAdapter.setDiscoveryFilter(scan_filter) # Advertisement interval consistent after reset test # The first time uses different callback to get/check test device information. Use the second time and third time KPI to compare. # First time connection isTestSuccessFull = True bleAdapter.startDiscovery(runTest.discoveryEventCb) # firstStartScan = time.time() runTest.mainloop.run() # firstKPI = time.time() - firstStartScan runTest.submitTestResult(isTestSuccessFull, runTest.advertisement) bleAdapter.stopDiscovery() testDevice = runTest.getTestDevice() isTestSuccessFull = bleAdapter.connect(testDevice) runTest.submitTestResult(isTestSuccessFull, runTest.simpleConnection) time.sleep(2) #wait for connection parameters update isTestSuccessFull &= bleAdapter.disconnect() # Second time connection bleAdapter.startDiscovery( runTest.discoveryStartedCb) #wait for DUT to start advertising secondStartScan = time.time() runTest.mainloop.run() secondKPI = time.time() - secondStartScan bleAdapter.stopDiscovery() isConnectSuccessFull = bleAdapter.connect(testDevice) isTestSuccessFull &= isConnectSuccessFull runTest.submitTestResult(isTestSuccessFull, runTest.reConnection) time.sleep(2) #wait for connection parameters update # Second time disconnect isTestSuccessFull &= bleAdapter.disconnect() #Third time connection bleAdapter.startDiscovery( runTest.discoveryStartedCb) #wait for DUT to start advertising thirdStartScan = time.time() runTest.mainloop.run() thirdKPI = time.time() - thirdStartScan bleAdapter.stopDiscovery() isConnectSuccessFull = bleAdapter.connect(testDevice) isTestSuccessFull &= isConnectSuccessFull runTest.submitTestResult(isTestSuccessFull, runTest.reConnection) if thirdKPI > secondKPI * 10: isTestSuccessFull &= false # write result back to server isTestSuccessFull = runTest.discoverPrimaryServices() bleAdapter.gatt.updateLocalAttributeTable() isTestSuccessFull &= runTest.writeResultWithoutResponse( chr(isTestSuccessFull + 48)) runTest.submitTestResult(isTestSuccessFull, runTest.writeWithoutResponse) # Data size > MTU - 3 send notification test bleAdapter.setNotificationCallBack(runTest.notificationMTUCb) bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID) #subscribe for next test isTestSuccessFull = True runTest.mainloop.run() isTestSuccessFull = runTest.isNotificationDeclinedSuccessFull runTest.submitTestResult(isTestSuccessFull, runTest.notification) isTestSuccessFull = bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID, subscribe=False) #unsubscribe runTest.submitTestResult(isTestSuccessFull, runTest.removeNotification) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() runTest.DUT_NAME = DUT_ORIGINAL_NAME isTestSuccessFull = runTest.Advertise_With_16bit_ServiceUUID( scan_filter=scan_filter, bleAdapter=bleAdapter) runTest.submitTestResult(isTestSuccessFull, runTest.Advertise_With_16bit_ServiceUUID) scan_filter.update({"UUIDs": [runTest.DUT_UUID_128]}) # default DUT_name: nimble(without set_property) bleAdapter.setDiscoveryFilter(scan_filter) # First time connection isTestSuccessFull = True bleAdapter.startDiscovery(runTest.discoveryEventCb) runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.advertisement) bleAdapter.stopDiscovery() testDevice = runTest.getTestDevice() isTestSuccessFull = bleAdapter.connect(testDevice) runTest.submitTestResult(isTestSuccessFull, runTest.simpleConnection) isTestSuccessFull = runTest.discoverPrimaryServices() runTest.submitTestResult(isTestSuccessFull, runTest.discoverPrimaryServices) bleAdapter.gatt.updateLocalAttributeTable() # Check device not present. After discovery of services, advertisement should have stopped. runTest.stopAdvertisement(scan_filter) # Check write and read bleAdapter.writeCharacteristic(runTest.DUT_OPEN_CHAR_UUID, runTest.DUT_OPEN_DESCR_UUID) bleAdapter.readCharacteristic(runTest.DUT_OPEN_CHAR_UUID) # Enable and receive notification and indication then disable. bleAdapter.subscribeForNotification(runTest.DUT_NOTIFY_CHAR_UUID) bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID) #subscribe for next test time.sleep(2) #wait for connection parameters update # Check Notification and Indication bleAdapter.setNotificationCallBack(runTest.notificationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.notification) bleAdapter.setNotificationCallBack(runTest.indicationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.indication) isTestSuccessFull &= bleAdapter.disconnect() # Second time connection bleAdapter.startDiscovery( runTest.discoveryStartedCb) #wait for DUT to start advertising runTest.mainloop.run() bleAdapter.stopDiscovery() isConnectSuccessFull = bleAdapter.connect(testDevice) isTestSuccessFull &= isConnectSuccessFull runTest.submitTestResult(isTestSuccessFull, runTest.reConnection) bleAdapter.subscribeForNotification(runTest.DUT_NOTIFY_CHAR_UUID) bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID) #subscribe for next test # Check write and read after reconnection bleAdapter.writeCharacteristic(runTest.DUT_OPEN_CHAR_UUID, runTest.DUT_OPEN_DESCR_UUID) bleAdapter.readCharacteristic(runTest.DUT_OPEN_CHAR_UUID) # Check Notification and Indication after reconnection bleAdapter.setNotificationCallBack(runTest.notificationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.notification) bleAdapter.setNotificationCallBack(runTest.indicationCb) isTestSuccessFull = True runTest.mainloop.run() runTest.submitTestResult(isTestSuccessFull, runTest.indication) isTestSuccessFull = bleAdapter.subscribeForNotification( runTest.DUT_NOTIFY_CHAR_UUID, subscribe=False) #unsubscribe isTestSuccessFull = True runTest.submitTestResult(isTestSuccessFull, runTest.removeNotification) isTestSuccessFull = bleAdapter.subscribeForNotification( runTest.DUT_INDICATE_CHAR_UUID, subscribe=False) #unsubscribe isTestSuccessFull = True runTest.submitTestResult(isTestSuccessFull, runTest.removeIndication) isTestSuccessFull &= bleAdapter.disconnect() testutils.removeBondedDevices() time.sleep(2) #wait for connection parameters update runTest.submitTestResult(isTestSuccessFull, runTest.disconnect) runTest.printTestsSummary()
except ImportError: import gobject as GObject import testutils import startTests_afqp as startTests import threading import securityAgent devices = {} def backGroundEvents(): try: mainloop = GObject.MainLoop() mainloop.run() except KeyboardInterrupt: mainloop.quit() print("Thread: KeyboardInterrupt") return if __name__ == '__main__': dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) testutils.removeBondedDevices() #startBackGroundEvents = threading.Thread(target=backGroundEvents) #startBackGroundEvents.start() startTests.main()
def removeBondedDevices(): testutils.removeBondedDevices()