VirtualBox

Changeset 90117 in vbox


Ignore:
Timestamp:
Jul 9, 2021 11:45:26 AM (4 years ago)
Author:
vboxsync
Message:

Audio/ValKit: Made daemonizing of VKAT / VBoxAudioTest more generic to support all commands. bugref:10008

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

Legend:

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

    r90100 r90117  
    114114{
    115115    VKAT_TEST_OPT_COUNT = 900,
    116     VKAT_TEST_OPT_DAEMONIZE,
    117     VKAT_TEST_OPT_DAEMONIZED,
    118116    VKAT_TEST_OPT_DEV,
    119117    VKAT_TEST_OPT_GUEST_ATS_ADDR,
     
    149147    { "--quiet",            'q',                                        RTGETOPT_REQ_NOTHING },
    150148    { "--verbose",          'v',                                        RTGETOPT_REQ_NOTHING },
     149    { "--daemonize",        AUDIO_TEST_OPT_CMN_DAEMONIZE,               RTGETOPT_REQ_NOTHING },
     150    { "--daemonized",       AUDIO_TEST_OPT_CMN_DAEMONIZED,              RTGETOPT_REQ_NOTHING },
    151151    { "--debug-audio",      AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_ENABLE,      RTGETOPT_REQ_NOTHING },
    152152    { "--debug-audio-path", AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_PATH,        RTGETOPT_REQ_STRING  },
     
    169169    { "--outdir",            VKAT_TEST_OPT_OUTDIR,         RTGETOPT_REQ_STRING  },
    170170    { "--count",             VKAT_TEST_OPT_COUNT,          RTGETOPT_REQ_UINT32  },
    171     { "--daemonize",         VKAT_TEST_OPT_DAEMONIZE,      RTGETOPT_REQ_NOTHING },
    172     { "--daemonized",        VKAT_TEST_OPT_DAEMONIZED,     RTGETOPT_REQ_NOTHING },
    173171    { "--device",            VKAT_TEST_OPT_DEV,            RTGETOPT_REQ_STRING  },
    174172    { "--pause",             VKAT_TEST_OPT_PAUSE,          RTGETOPT_REQ_UINT32  },
     
    632630        case 'e':                          return "Exclude the given test id from the list";
    633631        case 'i':                          return "Include the given test id in the list";
    634         case VKAT_TEST_OPT_DAEMONIZE:      return "Run in background (daemonized)";
    635         case VKAT_TEST_OPT_DEV:            return "Use the specified audio device";
    636632        case VKAT_TEST_OPT_GUEST_ATS_ADDR: return "Address of guest ATS to connect to";
    637633        case VKAT_TEST_OPT_GUEST_ATS_PORT: return "Port of guest ATS to connect to [6042]";
     
    676672    bool        fPcmSigned    = true;
    677673
    678     bool        fDaemonize    = false;
    679     bool        fDaemonized   = false;
    680 
    681674    const char *pszGuestTcpAddr  = NULL;
    682675    uint16_t    uGuestTcpPort    = ATS_TCP_DEF_BIND_PORT_GUEST;
     
    746739                return RTMsgErrorExitFailure("Not yet implemented!");
    747740
    748             case VKAT_TEST_OPT_DAEMONIZE:
    749                 fDaemonize = true;
    750                 break;
    751 
    752             case VKAT_TEST_OPT_DAEMONIZED:
    753                 fDaemonized = true;
    754                 break;
    755 
    756741            case VKAT_TEST_OPT_DEV:
    757742                rc = RTStrCopy(TstEnv.szDev, sizeof(TstEnv.szDev), ValueUnion.psz);
     
    805790                if (RT_FAILURE(rc))
    806791                    return RTGetOptPrintError(ch, &ValueUnion);
    807         }
    808     }
    809 
    810     /*
    811      * Daemonize ourselves if asked to.
    812      */
    813     if (fDaemonize)
    814     {
    815         if (!fDaemonized)
    816         {
    817             if (g_uVerbosity > 0)
    818                 RTMsgInfo("Daemonizing...");
    819             rc = RTProcDaemonize(pGetState->argv, "--daemonized");
    820             if (RT_FAILURE(rc))
    821                 return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTProcDaemonize: %Rrc\n", rc);
    822             return RTEXITCODE_SUCCESS;
    823         }
    824         else
    825         {
    826             if (g_uVerbosity > 0)
    827                 RTMsgInfo("Running daemonized ...");
    828792        }
    829793    }
     
    11821146{
    11831147    /*
    1184      * Init IPRT and globals.
     1148     * Init IPRT.
    11851149     */
    1186     RTEXITCODE rcExit = RTTestInitAndCreate("AudioTest", &g_hTest);
    1187     if (rcExit != RTEXITCODE_SUCCESS)
    1188         return rcExit;
     1150    int rc = RTR3InitExe(argc, &argv, 0);
     1151    if (RT_FAILURE(rc))
     1152    {
     1153        RTPrintf("RTR3InitExe() failed with %Rrc\n", rc);
     1154        return RTMsgInitFailure(rc);
     1155    }
     1156
     1157    /*
     1158     * Daemonize ourselves if asked to.
     1159     */
     1160    bool fDaemonize  = false;
     1161    bool fDaemonized = false;
     1162
     1163    for (int i = 1; i < argc; i++)
     1164    {
     1165        const char *psz = argv[i];
     1166        if (!RTStrICmp(psz, "--daemonize"))
     1167        {
     1168            fDaemonize = true;
     1169            continue;
     1170        }
     1171        else if (!RTStrICmp(psz, "--daemonized"))
     1172        {
     1173            fDaemonized = true;
     1174            continue;
     1175        }
     1176    }
     1177
     1178    if (fDaemonize)
     1179    {
     1180        if (!fDaemonized)
     1181        {
     1182            rc = RTProcDaemonize(argv, "--daemonized");
     1183            if (RT_FAILURE(rc))
     1184                return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTProcDaemonize() failed with %Rrc\n", rc);
     1185
     1186            RTMsgInfo("Starting in background (daemonizing) ...");
     1187            return RTEXITCODE_SUCCESS;
     1188        }
     1189        /* else continue running in background. */
     1190    }
     1191
     1192    /*
     1193     * Init test and globals.
     1194     * Note: Needs to be done *after* daemonizing, otherwise the child will fail!
     1195     */
     1196    rc = RTTestCreate("AudioTest", &g_hTest);
     1197    if (RT_FAILURE(rc))
     1198        return RTMsgErrorExit(RTEXITCODE_FAILURE, "RTTestCreate() failed with %Rrc\n", rc);
    11891199
    11901200#ifdef RT_OS_WINDOWS
     
    11981208     */
    11991209    static const char * const g_apszLogGroups[] = VBOX_LOGGROUP_NAMES;
    1200     int rc = RTLogCreate(&g_pRelLogger, RTLOGFLAGS_PREFIX_THREAD, "all.e.l", "VKAT_RELEASE_LOG",
    1201                          RT_ELEMENTS(g_apszLogGroups), g_apszLogGroups, RTLOGDEST_STDERR, NULL /*"vkat-release.log"*/);
     1210    rc = RTLogCreate(&g_pRelLogger, RTLOGFLAGS_PREFIX_THREAD, "all.e.l", "VKAT_RELEASE_LOG",
     1211                     RT_ELEMENTS(g_apszLogGroups), g_apszLogGroups, RTLOGDEST_STDERR, NULL /*"vkat-release.log"*/);
    12021212    if (RT_SUCCESS(rc))
    12031213        RTLogRelSetDefaultInstance(g_pRelLogger);
     
    12681278                            if (RT_SUCCESS(rc))
    12691279                            {
    1270                                 rcExit = pCmd->pfnHandler(&GetState);
     1280                                RTEXITCODE rcExit = pCmd->pfnHandler(&GetState);
    12711281                                RTMemFree(paCombinedOptions);
    12721282                                return rcExit;
  • trunk/src/VBox/ValidationKit/utils/audio/vkatInternal.h

    r89962 r90117  
    478478enum
    479479{
    480     AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_ENABLE = 256,
     480    AUDIO_TEST_OPT_CMN_DAEMONIZE = 256,
     481    AUDIO_TEST_OPT_CMN_DAEMONIZED,
     482    AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_ENABLE,
    481483    AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_PATH
    482484};
     
    509511            case AUDIO_TEST_OPT_CMN_DEBUG_AUDIO_PATH: \
    510512                g_pszDrvAudioDebug = (a_ValueUnion).psz; \
    511                 break
     513                break; \
     514            case AUDIO_TEST_OPT_CMN_DAEMONIZE: \
     515                break; \
     516            case AUDIO_TEST_OPT_CMN_DAEMONIZED: \
     517                break;
    512518
    513519#endif /* !VBOX_INCLUDED_SRC_audio_vkatInternal_h */
Note: See TracChangeset for help on using the changeset viewer.

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