コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
def teardown_test(agent):
    securityAgent.removeSecurityAgent()

    os.system("sudo rm -rf \"/var/lib/bluetooth/*\"")
    os.system("sudo hciconfig hci0 reset")

    testutils.removeBondedDevices()
    return agent
コード例 #5
0
    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()
コード例 #6
0
    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
コード例 #7
0
    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
コード例 #8
0
    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
コード例 #9
0
    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
コード例 #10
0
    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
コード例 #11
0
    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
コード例 #12
0
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()
コード例 #13
0
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()
コード例 #14
0
 def removeBondedDevices():
     testutils.removeBondedDevices()