VirtualBox

Ignore:
Timestamp:
Jun 11, 2021 6:34:13 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
145058
Message:

Audio/ValKit: Implemented support for downloading (guest) test sets. bugref:10008

Location:
trunk/src/VBox/ValidationKit/utils/audio
Files:
3 edited

Legend:

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

    r89575 r89614  
    545545            if (RT_SUCCESS(rc))
    546546                rc = rc2;
     547
    547548            rc2 = AudioTestSvcClientTestSetEnd(&pTstEnv->u.Host.AtsClValKit, szTagHost);
    548549            if (RT_SUCCESS(rc))
    549550                rc = rc2;
     551
     552            if (RT_SUCCESS(rc))
     553            {
     554                /*
     555                 * Download guest test set to host.
     556                 */
     557                char szFileName[RTPATH_MAX];
     558                if (RTStrPrintf2(szFileName, sizeof(szFileName), "%s.tar.gz", szTagGuest))
     559                {
     560                    char szFilePath[RTPATH_MAX];
     561                    rc2 = RTPathJoin(szFilePath, sizeof(szFilePath), pTstEnv->szPathOut, szFileName);
     562                    if (RT_SUCCESS(rc2))
     563                    {
     564                        RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Downloading guest test set to '%s'\n", szFilePath);
     565                        rc2 = AudioTestSvcClientTestSetDownload(&pTstEnv->u.Host.AtsClGuest, szTagGuest, szFilePath);
     566                    }
     567                }
     568                else
     569                    rc2 = VERR_BUFFER_OVERFLOW;
     570
     571                if (RT_SUCCESS(rc))
     572                    rc = rc2;
     573            }
    550574        }
    551575    }
  • trunk/src/VBox/ValidationKit/utils/audio/vkatCommon.cpp

    r89584 r89614  
    6464typedef struct ATSCALLBACKCTX
    6565{
     66    /** The test environment bound to this context. */
    6667    PAUDIOTESTENV pTstEnv;
     68    /** Absolute path to the packed up test set archive.
     69     *  Keep it simple for now and only support one (open) archive at a time. */
     70    char          szTestSetArchive[RTPATH_MAX];
     71    /** File handle to the (opened) test set archive for reading. */
     72    RTFILE        hTestSetArchive;
    6773} ATSCALLBACKCTX;
    6874typedef ATSCALLBACKCTX *PATSCALLBACKCTX;
     
    421427    RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Ending test set '%s'\n", pszTag);
    422428
    423     return audioTestEnvPrologue(pTstEnv);
     429    /* Pack up everything to be ready for transmission. */
     430    return audioTestEnvPrologue(pTstEnv, true /* fPack */, pCtx->szTestSetArchive, sizeof(pCtx->szTestSetArchive));
    424431}
    425432
     
    507514    else
    508515        RTTestFailed(g_hTest, "Error creating input stream, rc=%Rrc\n", rc);
     516
     517    return rc;
     518}
     519
     520/** @copydoc ATSCALLBACKS::pfnTestSetSendBegin */
     521static DECLCALLBACK(int) audioTestGstAtsTestSetSendBeginCallback(void const *pvUser, const char *pszTag)
     522{
     523    RT_NOREF(pszTag);
     524
     525    PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser;
     526
     527    if (!RTFileExists(pCtx->szTestSetArchive)) /* Has the archive successfully been created yet? */
     528        return VERR_WRONG_ORDER;
     529
     530    int rc = RTFileOpen(&pCtx->hTestSetArchive, pCtx->szTestSetArchive, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
     531    if (RT_SUCCESS(rc))
     532    {
     533        uint64_t uSize;
     534        rc = RTFileQuerySize(pCtx->hTestSetArchive, &uSize);
     535        if (RT_SUCCESS(rc))
     536            RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Sending test set '%s' (%zu bytes)\n", pCtx->szTestSetArchive, uSize);
     537    }
     538
     539    return rc;
     540}
     541
     542/** @copydoc ATSCALLBACKS::pfnTestSetSendRead */
     543static DECLCALLBACK(int) audioTestGstAtsTestSetSendReadCallback(void const *pvUser,
     544                                                                const char *pszTag, void *pvBuf, size_t cbBuf, size_t *pcbRead)
     545{
     546    RT_NOREF(pszTag);
     547
     548    PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser;
     549
     550    return RTFileRead(pCtx->hTestSetArchive, pvBuf, cbBuf, pcbRead);
     551}
     552
     553/** @copydoc ATSCALLBACKS::pfnTestSetSendEnd */
     554static DECLCALLBACK(int) audioTestGstAtsTestSetSendEndCallback(void const *pvUser, const char *pszTag)
     555{
     556    RT_NOREF(pszTag);
     557
     558    PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser;
     559
     560    int rc = RTFileClose(pCtx->hTestSetArchive);
     561    if (RT_SUCCESS(rc))
     562    {
     563        pCtx->hTestSetArchive = NIL_RTFILE;
     564    }
    509565
    510566    return rc;
     
    658714
    659715        ATSCALLBACKS Callbacks;
    660         Callbacks.pfnTestSetBegin = audioTestGstAtsTestSetBeginCallback;
    661         Callbacks.pfnTestSetEnd   = audioTestGstAtsTestSetEndCallback;
    662         Callbacks.pfnTonePlay     = audioTestGstAtsTonePlayCallback;
    663         Callbacks.pfnToneRecord   = audioTestGstAtsToneRecordCallback;
    664         Callbacks.pvUser          = &Ctx;
     716        Callbacks.pfnTestSetBegin     = audioTestGstAtsTestSetBeginCallback;
     717        Callbacks.pfnTestSetEnd       = audioTestGstAtsTestSetEndCallback;
     718        Callbacks.pfnTonePlay         = audioTestGstAtsTonePlayCallback;
     719        Callbacks.pfnToneRecord       = audioTestGstAtsToneRecordCallback;
     720        Callbacks.pfnTestSetSendBegin = audioTestGstAtsTestSetSendBeginCallback;
     721        Callbacks.pfnTestSetSendRead  = audioTestGstAtsTestSetSendReadCallback;
     722        Callbacks.pfnTestSetSendEnd   = audioTestGstAtsTestSetSendEndCallback;
     723        Callbacks.pvUser              = &Ctx;
    665724
    666725        /*
     
    725784 * @returns VBox status code.
    726785 * @param   pTstEnv             Test environment to handle.
    727  */
    728 int audioTestEnvPrologue(PAUDIOTESTENV pTstEnv)
     786 * @param   fPack               Whether to pack the test set up before destroying / wiping it.
     787 * @param   pszPackFile         Where to store the packed test set file on success. Can be NULL if \a fPack is \c false.
     788 * @param   cbPackFile          Size (in bytes) of \a pszPackFile. Can be 0 if \a fPack is \c false.
     789 */
     790int audioTestEnvPrologue(PAUDIOTESTENV pTstEnv, bool fPack, char *pszPackFile, size_t cbPackFile)
    729791{
    730792    /* Close the test set first. */
    731793    AudioTestSetClose(&pTstEnv->Set);
    732794
    733     /* Before destroying the test environment, pack up the test set so
    734      * that it's ready for transmission. */
    735     char szFileOut[RTPATH_MAX];
    736     int rc = AudioTestSetPack(&pTstEnv->Set, pTstEnv->szPathOut, szFileOut, sizeof(szFileOut));
    737     if (RT_SUCCESS(rc))
    738         RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Test set packed up to '%s'\n", szFileOut);
     795    int rc = VINF_SUCCESS;
     796
     797    if (fPack)
     798    {
     799        /* Before destroying the test environment, pack up the test set so
     800         * that it's ready for transmission. */
     801        rc = AudioTestSetPack(&pTstEnv->Set, pTstEnv->szPathOut, pszPackFile, cbPackFile);
     802        if (RT_SUCCESS(rc))
     803            RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Test set packed up to '%s'\n", pszPackFile);
     804    }
    739805
    740806    /* ignore rc */ AudioTestSetWipe(&pTstEnv->Set);
  • trunk/src/VBox/ValidationKit/utils/audio/vkatInternal.h

    r89584 r89614  
    420420int         audioTestEnvInit(PAUDIOTESTENV pTstEnv, PCPDMDRVREG pDrvReg, bool fWithDrvAudio, const char *pszHostTcpAddr, uint32_t uHostTcpPort, const char *pszGuestTcpAddr, uint32_t uGuestTcpPort);
    421421void        audioTestEnvDestroy(PAUDIOTESTENV pTstEnv);
    422 int         audioTestEnvPrologue(PAUDIOTESTENV pTstEnv);
     422int         audioTestEnvPrologue(PAUDIOTESTENV pTstEnv, bool fPack, char *pszFilePath, size_t cbFilePath);
    423423
    424424void        audioTestParmsInit(PAUDIOTESTPARMS pTstParms);
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