diff mbox

[U-Boot,2/2] test/py: dfu: error out if USB device already exists

Message ID 1453831183-22998-2-git-send-email-swarren@wwwdotorg.org
State Accepted
Commit be1df82656b15663dee9216a320dc177c7d9c6c4
Delegated to: Simon Glass
Headers show

Commit Message

Stephen Warren Jan. 26, 2016, 5:59 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

The DFU test requests U-Boot configure its USB controller in device mode,
then waits for the host machine to enumerate the USB device and create a
device node for it. However, this wait can be fooled if the USB device
node already exists before the test starts, e.g. if some previous software
stack already configured the USB controller into device mode and never
de-configured it. This "previous software stack" could even be another
test/py test, if U-Boot's own USB teardown does not operate correctly. If
this happens, dfu-util may be run before U-Boot is ready to serve DFU
commands, which may cause false test failures.

Enhance the dfu test to fail if the device node exists before it is
expected to.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
This patch depends on the previous patch "ARM: tegra: shut down USB
device controller at boot", so needs to be applied in the same branch.
Otherwise, test failures will occur.
---
 test/py/tests/test_dfu.py | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Simon Glass Jan. 26, 2016, 7:59 p.m. UTC | #1
On 26 January 2016 at 10:59, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> The DFU test requests U-Boot configure its USB controller in device mode,
> then waits for the host machine to enumerate the USB device and create a
> device node for it. However, this wait can be fooled if the USB device
> node already exists before the test starts, e.g. if some previous software
> stack already configured the USB controller into device mode and never
> de-configured it. This "previous software stack" could even be another
> test/py test, if U-Boot's own USB teardown does not operate correctly. If
> this happens, dfu-util may be run before U-Boot is ready to serve DFU
> commands, which may cause false test failures.
>
> Enhance the dfu test to fail if the device node exists before it is
> expected to.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> This patch depends on the previous patch "ARM: tegra: shut down USB
> device controller at boot", so needs to be applied in the same branch.
> Otherwise, test failures will occur.
> ---
>  test/py/tests/test_dfu.py | 6 ++++++
>  1 file changed, 6 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Simon Glass Jan. 29, 2016, 4:01 a.m. UTC | #2
On 26 January 2016 at 12:59, Simon Glass <sjg@chromium.org> wrote:
> On 26 January 2016 at 10:59, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> The DFU test requests U-Boot configure its USB controller in device mode,
>> then waits for the host machine to enumerate the USB device and create a
>> device node for it. However, this wait can be fooled if the USB device
>> node already exists before the test starts, e.g. if some previous software
>> stack already configured the USB controller into device mode and never
>> de-configured it. This "previous software stack" could even be another
>> test/py test, if U-Boot's own USB teardown does not operate correctly. If
>> this happens, dfu-util may be run before U-Boot is ready to serve DFU
>> commands, which may cause false test failures.
>>
>> Enhance the dfu test to fail if the device node exists before it is
>> expected to.
>>
>> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>> ---
>> This patch depends on the previous patch "ARM: tegra: shut down USB
>> device controller at boot", so needs to be applied in the same branch.
>> Otherwise, test failures will occur.
>> ---
>>  test/py/tests/test_dfu.py | 6 ++++++
>>  1 file changed, 6 insertions(+)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/test/py/tests/test_dfu.py b/test/py/tests/test_dfu.py
index cc4b8d8e04e6..6c1a363b02df 100644
--- a/test/py/tests/test_dfu.py
+++ b/test/py/tests/test_dfu.py
@@ -100,6 +100,12 @@  def test_dfu(u_boot_console, env__usb_dev_port, env__dfu_config):
             Nothing.
         '''
 
+        fh = u_boot_utils.attempt_to_open_file(
+            env__usb_dev_port['host_usb_dev_node'])
+        if fh:
+            fh.close()
+            raise Exception('USB device present before dfu command invoked')
+
         u_boot_console.log.action(
             'Starting long-running U-Boot dfu shell command')