cannot run unit tests on remote linux target through VS test explorer

Sysprogs forums Forums VisualGDB cannot run unit tests on remote linux target through VS test explorer

Tagged: 

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #23482
    dabramson
    Participant

    The test project, and shared object project that the test project references build successfully.

    The tests appear correctly in Test Explorer.

    I click “Run All” in test explorer and I get an error creating a temporary pipe…here is the output from the “Tests” output window.

    [1/15/2019 2:31:51 PM Informational] ------ Discover test started ------
    [1/15/2019 2:31:51 PM Informational] Loading C:\Clients\PxC\AXIOL\AxioLink\HelloWorldVgdb\HelloWorldVgdbMsBuild2\TestSharedObj_HelloWorldVgdbMsBuild2\VisualGDB\VisualGDBCache\TestSharedObj_HelloWorldVgdbMsBuild2-Debug\TestSharedObj_HelloWorldVgdbMsBuild2.vgdbtestcontainer...
    [1/15/2019 2:31:57 PM Informational] Downloading /tmp/VisualGDB/c/Clients/PxC/AXIOL/AxioLink/HelloWorldVgdb/HelloWorldVgdbMsBuild2/TestSharedObj_HelloWorldVgdbMsBuild2/../VisualGDB/Debug/TestSharedObj_HelloWorldVgdbMsBuild2 to discover tests...

    [1/15/2019 2:31:57 PM Informational] Test container loaded (lookup: 6 msec, fetch: 1698 msec, symbol list: 182 msec)

    [1/15/2019 2:31:57 PM Informational] ========== Discover test finished: 3 found (0:00:06.546417) ==========
    [1/15/2019 2:32:29 PM Informational] ------ Run test started ------
    [1/15/2019 2:32:30 PM Informational] Running tests from C:\Clients\PxC\AXIOL\AxioLink\HelloWorldVgdb\HelloWorldVgdbMsBuild2\TestSharedObj_HelloWorldVgdbMsBuild2\VisualGDB\VisualGDBCache\TestSharedObj_HelloWorldVgdbMsBuild2-Debug\TestSharedObj_HelloWorldVgdbMsBuild2.vgdbtestcontainer...
    [1/15/2019 2:32:32 PM Informational] Downloading /tmp/VisualGDB/c/Clients/PxC/AXIOL/AxioLink/HelloWorldVgdb/HelloWorldVgdbMsBuild2/TestSharedObj_HelloWorldVgdbMsBuild2/../VisualGDB/Debug/TestSharedObj_HelloWorldVgdbMsBuild2 to discover tests...

    [1/15/2019 2:32:33 PM Informational] Test container loaded (lookup: 5 msec, fetch: 1477 msec, symbol list: 170 msec)

    [1/15/2019 2:32:35 PM Error] Failed to create a temporary pipe for reading the test reports
    [1/15/2019 2:32:35 PM Informational] System.Exception: Failed to create a temporary pipe for reading the test reports
    [1/15/2019 2:32:35 PM Informational] at pe.b1()
    [1/15/2019 2:32:35 PM Informational] at du.d1(hb1 a)
    [1/15/2019 2:32:35 PM Informational] at VisualGDBTestExtensionShared.VisualGDBTestExecutor.RunTestsInSource(String source, Dictionary2 selectedTests, IRunContext runContext, IFrameworkHandle frameworkHandle)
    [1/15/2019 2:32:35 PM Informational] at VisualGDBTestExtensionShared.VisualGDBTestExecutor.RunTests(IEnumerable1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle)
    [1/15/2019 2:32:35 PM Error] An exception occurred while invoking executor 'executor://visualgdb/TestRunner': Failed to create a temporary pipe for reading the test reports
    [1/15/2019 2:32:35 PM Informational] ========== Run test finished: 0 run (0:00:06.0520913) ==========

    I can ssh directly to the test executable and run it on the target without a problem.

     

    Also, after the pipe error the tests disappear from Test Explorer. They come back if I rebuild.

    • This topic was modified 5 years, 2 months ago by dabramson.
    #23484
    dabramson
    Participant

    I did a bit more digging and found this output in the VGDB diagnostics window when I ‘debug’ the tests in test explorer.

    SSH [99]: executing command: "/opt/psi/BKMainApp/TestSharedObj_HelloWorldVgdbMsBuild2" --gtest_list_tests
    SSH [99]: command exited with code 0 after 50 msec
    TestSharedObj_HelloWorldVgdbMsBuild2 => 6 output lines
    Discovered 3 tests using the advanced discoverer
    SSH [100]: executing command: "mkfifo" "/tmp/01d673d5-eb13-41d1-999a-8c7eda47ea45"
    SSH [100]: command exited with code 127 after 94 msec
    Unexpected exception: Failed to create a temporary pipe for reading the test reports
    ------------------ System.Exception ------------------
    System.Exception: Failed to create a temporary pipe for reading the test reports
    at pe.b1()
    at t91.m(k52 a)
    at s52.y()
    at yv.x_2()
    at VisualGDB.GDBDebugEngine.q1(ba1 b, s1 a)
    Unexpected exception: Failed to create a temporary pipe for reading the test reports
    ------------------ System.Exception ------------------
    System.Exception: Failed to create a temporary pipe for reading the test reports
    at pe.b1()
    at t91.m(k52 a)
    at s52.y()
    at yv.x_2()
    at VisualGDB.GDBDebugEngine.q1(ba1 b, s1 a)
    SSH [101]: executing command: "rm" '/tmp/01d673d5-eb13-41d1-999a-8c7eda47ea45'
    SSH [101]: command exited with code 1 after 49 msec

    I’m guessing the that mkfifo not being present on the target is an issue. Can you confirm?

    Also, can you tell me any other commands that running unit tests from test explorer will rely on? I’d like to try and get them added in one group if there are more as our guy that manages busybox for the target is only part-time.

    Thanks,

    Dave

    • This reply was modified 5 years, 2 months ago by dabramson. Reason: additional related information requested
    #23486
    support
    Keymaster

    Hi,

    Most likely this happens due to the missing mkfifo executable, or missing permissions. Please try running mkfifo /tmp/01d673d5-eb13-41d1-999a-8c7eda47ea45 manually via SSH to see why it fails. As soon as you fix the underlying issue, you should be able to run tests as usual.

    #23501
    dabramson
    Participant

    I added mkfifo to my system and things get further. I run all tests from test explorer, but all tests are skipped. It appears to be an incorrect formatting of the test names supplied to the –gtest_filter argument.

    Here is what was passed by (I’m assuming) VGDB:

    BasicCounterTests_ctor_WhenCalled.ResetsCount:BasicCounterTests_GetNextCount_WhenCalledRepeatedly.IncrementsCountForEachCall:BasicCounterTests_A_Failing.Test

    The class name is BasicCounterTests and all test names have 2 underscores, but in the filter above there is a ‘.’ where the last underscore should be. If I run the tests manually on the target and put the ‘.’ after the classname and correct the test name (. becomes _) then all of the tests run as expected.

    • This reply was modified 5 years, 2 months ago by dabramson.
    #23525
    support
    Keymaster

    Hi,

    Sorry about that, it indeed looks like our bug. Please try this build: http://sysprogs.com/files/tmp/VisualGDB-5.4.100.2751.msi

    Please replace the <Linux> section inside the %LOCALAPPDATA%\VisualGDB\TestFrameworks\com.sysprogs.unittest.googletest\TestFramework.xml file with the following lines:

      <Linux>
        <AdditionalSourceFiles />
        <AdditionalHeaderFiles />
        <AdditionalPreprocessorMacros />
        <AdditionalLibraries>
          <string>pthread</string>
        </AdditionalLibraries>
        <InitializationLines>
          <string>testing::InitGoogleTest(&amp;argc, argv);</string>
          <string>return RUN_ALL_TESTS();</string>
        </InitializationLines>
        <AdvancedTestDiscoverers>
          <TestDiscoverer xsi:type="OutputBasedTestDiscoverer">
            <TargetDemangledNames>true</TargetDemangledNames>
            <CommandLineArguments>--gtest_list_tests</CommandLineArguments>
            <TestGroupRegex>^(|[^/]+/)([^ \t/]+)\.$</TestGroupRegex>
            <TestRegex>^[ \t]+([^ \t/]+)(|/[^ \t/]+)($| )</TestRegex>
            <UniqueNameFormat>{1}{2}_{4}{5}</UniqueNameFormat>
            <StructuredInternalNameFormat>{1}{2}.{4}{5}</StructuredInternalNameFormat>
            <UserFriendlyNameFormat>{1}{2}::{4}{5}</UserFriendlyNameFormat>
            <SecondaryIDFormat>{1}{2}::{4}{5}</SecondaryIDFormat>
            <ShortUserFriendlyNameFormat>{4}{5}</ShortUserFriendlyNameFormat>
            <LocationSymbolFormat>{2}_{4}_Test::TestBody()</LocationSymbolFormat>
          </TestDiscoverer>
        </AdvancedTestDiscoverers>
        <TestSelection xsi:type="ArgumentBasedTestSelection">
          <GlobalArgumentTemplate>--gtest_filter=$(PerTestArguments)</GlobalArgumentTemplate>
          <PerTestArgumentTemplate>$(1).$(2)</PerTestArgumentTemplate>
          <PerTestArgumentSeparator>:</PerTestArgumentSeparator>
          <TestIDRegex>(.*)::(.*)</TestIDRegex>
          <IDType>SecondaryID</IDType>
        </TestSelection>
        <TestReportChannel xsi:type="PipeBasedTestChannelWithEnv">
          <PipeTimestampVariableName>g_SysprogsTestReportTimestamp</PipeTimestampVariableName>
          <EnvironmentVariableName>SYSPROGS_TEST_REPORTING_PIPE</EnvironmentVariableName>
        </TestReportChannel>
      </Linux>

    We will publish an official update to our googletest package after the next maintenance release (R2) in the next few days.

    #23530
    dabramson
    Participant

    Gtests are now running on my target and I see the results in Test Explorer. Thanks for the fix!

Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.