VirtualBox

Ignore:
Timestamp:
May 26, 2021 8:23:56 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
144632
Message:

Audio/ValKit: Added "--ats-host" to the VKAT selftest command to also enable testing of other ATS instances. bugref:10008

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/utils/audio/vkat.cpp

    r89265 r89286  
    279279{
    280280    VKAT_VERIFY_OPT_TAG = 900
     281};
     282
     283/**
     284 * Long option values for the 'selftest' command.
     285 */
     286enum
     287{
     288    VKAT_SELFTEST_OPT_ATS_HOST = 900
    281289};
    282290
     
    25692577static const RTGETOPTDEF g_aCmdSelftestOptions[] =
    25702578{
     2579    { "--ats-host",         VKAT_SELFTEST_OPT_ATS_HOST,   RTGETOPT_REQ_STRING },
    25712580    { "--backend",          'b',                          RTGETOPT_REQ_STRING  },
    25722581    { "--with-drv-audio",   'd',                          RTGETOPT_REQ_NOTHING },
     
    26452654 * Tests the Audio Test Service (ATS).
    26462655 *
     2656 * @returns VBox status code.
    26472657 * @param   pDrvReg             Backend driver to use.
    2648  * @returns VBox status code.
    2649  */
    2650 static int audioTestDoSelftestSvc(PCPDMDRVREG pDrvReg)
     2658 * @param   pszAdr              Address of ATS server to connect to.
     2659 *                              If NULL, an own (local) ATS server will be created.
     2660 */
     2661static int audioTestDoSelftestAts(PCPDMDRVREG pDrvReg, const char *pszAdr)
    26512662{
    26522663    AUDIOTESTDRVSTACK DrvStack;
     
    26542665    if (RT_SUCCESS(rc))
    26552666    {
     2667        /** @todo Make stream parameters configurable. */
    26562668        PDMAUDIOPCMPROPS  Props;
    26572669        PDMAudioPropsInit(&Props, 16 /* bit */ / 8, true /* fSigned */, 2 /* Channels */, 44100 /* Hz */);
     
    26762688                Callbacks.pvUser      = &Ctx;
    26772689
     2690                /* Start an own ATS instance if no address to connect was specified. */
    26782691                ATSSERVER Srv;
    2679                 rc = AudioTestSvcInit(&Srv, &Callbacks);
     2692                if (pszAdr == NULL)
     2693                {
     2694                    RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Starting ATS ...\n");
     2695
     2696                    rc = AudioTestSvcInit(&Srv, &Callbacks);
     2697                    if (RT_SUCCESS(rc))
     2698                    {
     2699                        rc = AudioTestSvcStart(&Srv);
     2700                        if (RT_SUCCESS(rc))
     2701                            RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "ATS running\n");
     2702                    }
     2703                }
     2704                else
     2705                    RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connecting to ATS at '%s' ...\n", pszAdr);
     2706
    26802707                if (RT_SUCCESS(rc))
    26812708                {
    2682                     rc = AudioTestSvcStart(&Srv);
     2709                    ATSCLIENT Conn;
     2710                    rc = AudioTestSvcClientConnect(&Conn, NULL);
    26832711                    if (RT_SUCCESS(rc))
    26842712                    {
    2685                         ATSCLIENT Conn;
    2686                         rc = AudioTestSvcClientConnect(&Conn, NULL);
    2687                         if (RT_SUCCESS(rc))
    2688                         {
    2689                             /* Do the bare minimum here to get a test tone out. */
    2690                             AUDIOTESTTONEPARMS ToneParms;
    2691                             RT_ZERO(ToneParms);
    2692                             ToneParms.msDuration = 2000;
    2693                             memcpy(&ToneParms.Props, &CfgAcq.Props, sizeof(PDMAUDIOPCMPROPS));
    2694 
    2695                             rc = AudioTestSvcClientTonePlay(&Conn, &CfgAcq, &ToneParms);
    2696 
    2697                             int rc2 = AudioTestSvcClientClose(&Conn);
    2698                             if (RT_SUCCESS(rc))
    2699                                 rc = rc2;
    2700                         }
    2701 
    2702                         int rc2 = AudioTestSvcShutdown(&Srv);
     2713                        RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connected to ATS, testing ...\n");
     2714
     2715                        /* Do the bare minimum here to get a test tone out. */
     2716                        AUDIOTESTTONEPARMS ToneParms;
     2717                        RT_ZERO(ToneParms);
     2718                        ToneParms.msDuration = RTRandU32Ex(250, 1000 * 5);
     2719                        memcpy(&ToneParms.Props, &CfgAcq.Props, sizeof(PDMAUDIOPCMPROPS));
     2720
     2721                        rc = AudioTestSvcClientTonePlay(&Conn, &CfgAcq, &ToneParms);
     2722
     2723                        int rc2 = AudioTestSvcClientClose(&Conn);
    27032724                        if (RT_SUCCESS(rc))
    27042725                            rc = rc2;
    27052726                    }
    2706 
    2707                     int rc2 = AudioTestSvcDestroy(&Srv);
     2727                    else
     2728                        RTTestFailed(g_hTest, "Connecting to ATS failed, rc=%Rrc\n", rc);
     2729
     2730                    int rc2 = AudioTestSvcShutdown(&Srv);
    27082731                    if (RT_SUCCESS(rc))
    27092732                        rc = rc2;
    27102733                }
     2734
     2735                if (pszAdr == NULL)
     2736                {
     2737                    RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Shutting down ATS ...\n");
     2738
     2739                    int rc2 = AudioTestSvcDestroy(&Srv);
     2740                        if (RT_SUCCESS(rc))
     2741                            rc = rc2;
     2742                }
    27112743            }
    27122744        }
    27132745    }
    27142746
     2747    if (RT_FAILURE(rc))
     2748        RTTestFailed(g_hTest, "Testing ATS failed with %Rrc\n", rc);
     2749
    27152750    return rc;
    27162751}
     
    27212756 * @returns VBox status code.
    27222757 * @param   pDrvReg             Backend driver to use.
    2723  */
    2724 static int audioTestDoSelftest(PCPDMDRVREG pDrvReg)
    2725 {
    2726     int rc = audioTestDoSelftestSvc(pDrvReg);
     2758 * @param   pszAtsAdr           Address of ATS server to connect to.
     2759 *                              If NULL, an own (local) ATS server will be created.
     2760 */
     2761static int audioTestDoSelftest(PCPDMDRVREG pDrvReg, const char *pszAtsAdr)
     2762{
     2763    int rc = audioTestDoSelftestAts(pDrvReg, pszAtsAdr);
    27272764    if (RT_FAILURE(rc))
    27282765        RTTestFailed(g_hTest, "Self-test failed with: %Rrc", rc);
     
    27422779    PCPDMDRVREG pDrvReg           = g_aBackends[0].pDrvReg;
    27432780    bool        fWithDrvAudio     = false;
     2781    char       *pszAtsAddr        = NULL;
    27442782
    27452783    /* Argument processing loop: */
     
    27502788        switch (rc)
    27512789        {
     2790            case VKAT_SELFTEST_OPT_ATS_HOST:
     2791            {
     2792                pszAtsAddr = RTStrDup(ValueUnion.psz);
     2793                break;
     2794            }
     2795
    27522796            case 'b':
     2797            {
    27532798                pDrvReg = NULL;
    27542799                for (uintptr_t i = 0; i < RT_ELEMENTS(g_aBackends); i++)
     
    27622807                    return RTMsgErrorExit(RTEXITCODE_SYNTAX, "Unknown backend: '%s'", ValueUnion.psz);
    27632808                break;
     2809            }
    27642810
    27652811            case 'd':
     2812            {
    27662813                fWithDrvAudio = true;
    27672814                break;
     2815            }
    27682816
    27692817            case VINF_GETOPT_NOT_OPTION:
     
    27792827    }
    27802828
    2781     audioTestDoSelftest(pDrvReg);
    2782         /*
     2829    audioTestDoSelftest(pDrvReg, pszAtsAddr);
     2830
     2831    RTStrFree(pszAtsAddr);
     2832
     2833    /*
    27832834     * Print summary and exit.
    27842835     */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette