VirtualBox

Changeset 104309 in vbox for trunk/src


Ignore:
Timestamp:
Apr 12, 2024 10:07:34 AM (10 months ago)
Author:
vboxsync
Message:

Shared Clipboard/tstClipboardHttpServer: Added testing unsupported stuff like directories or symlinks. bugref:9437

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/SharedClipboard/testcase/tstClipboardHttpServer.cpp

    r102917 r104309  
    6666static struct
    6767{
    68     /** File name to serve via HTTP server. */
    69     const char *pszFileName;
    70     /** URL to use for downloading the file via RTHttp APIs. */
     68    /** File mode. Used for RTFS_TYPE_XXX only. */
     69    RTFMODE     fMode;
     70    /** Local path to serve via HTTP server. */
     71    const char *pszPath;
     72    /** URL to use for downloading the file via RTHttp APIs. Has to be fully escaped. */
    7173    const char *pszUrl;
    7274    /** File allocation size.
     
    7779} g_aTests[] =
    7880{
    79     "file1.txt",                          "file1.txt",                  _64K,       VINF_SUCCESS,
     81    /*
     82     * Files.
     83     */
     84    RTFS_TYPE_FILE, "file1.txt",                          "file1.txt",                  _64K,       VINF_SUCCESS,
    8085    /* Note: For RTHttpGetFile() the URL needs to be percent-encoded. */
    81     "file2 with spaces.txt",              "file2%20with%20spaces.txt",  _64K,       VINF_SUCCESS,
    82     "bigfile.bin",                        "bigfile.bin",                _512M,      VINF_SUCCESS,
    83     "zerobytes",                          "zerobytes",                  0,          VINF_SUCCESS,
    84     "file\\with\\slashes",                "file%5Cwith%5Cslashes",      42,         VINF_SUCCESS,
     86    RTFS_TYPE_FILE, "file2 with spaces.txt",              "file2%20with%20spaces.txt",  _64K,       VINF_SUCCESS,
     87    RTFS_TYPE_FILE, "bigfile.bin",                        "bigfile.bin",                _512M,      VINF_SUCCESS,
     88    RTFS_TYPE_FILE, "zerobytes",                          "zerobytes",                  0,          VINF_SUCCESS,
     89    RTFS_TYPE_FILE, "file\\with\\slashes",                "file%5Cwith%5Cslashes",      42,         VINF_SUCCESS,
    8590    /* Korean encoding. */
    86     "VirtualBox가 크게 성공했습니다!",         "VirtualBox%EA%B0%80%20%ED%81%AC%EA%B2%8C%20%EC%84%B1%EA%B3%B5%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4%21", 42, VINF_SUCCESS
     91    RTFS_TYPE_FILE, "VirtualBox가 크게 성공했습니다!",         "VirtualBox%EA%B0%80%20%ED%81%AC%EA%B2%8C%20%EC%84%B1%EA%B3%B5%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4%21", 42, VINF_SUCCESS,
     92    /*
     93     * Other stuff (not supported).
     94     */
     95    RTFS_TYPE_DIRECTORY, "test-directory",                "test-directory",             0,          VERR_HTTP_NOT_SUPPORTED,
     96    RTFS_TYPE_SYMLINK,   "test-symlink",                  "test-symlink",               0,          VERR_HTTP_NOT_SUPPORTED
    8797};
    8898
    8999
    90100static void tstCreateTransferSingle(RTTEST hTest, PSHCLTRANSFERCTX pTransferCtx, PSHCLHTTPSERVER pSrv,
    91                                     const char *pszFile, PSHCLTXPROVIDER pProvider)
     101                                    const char *pszPath, PSHCLTXPROVIDER pProvider)
    92102{
     103    RTTestPrintf(hTest, RTTESTLVL_DEBUG, "tstCreateTransferSingle: pszPath=%s\n", pszPath);
     104
    93105    PSHCLTRANSFER pTx;
    94106    RTTEST_CHECK_RC_OK(hTest, ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, NULL /* Callbacks */, &pTx));
    95107    RTTEST_CHECK_RC_OK(hTest, ShClTransferSetProvider(pTx, pProvider));
     108    RTTEST_CHECK_RC_OK(hTest, ShClTransferRootsInitFromPath(pTx, pszPath));
    96109    RTTEST_CHECK_RC_OK(hTest, ShClTransferInit(pTx));
    97     RTTEST_CHECK_RC_OK(hTest, ShClTransferRootsInitFromFile(pTx, pszFile));
    98110    RTTEST_CHECK_RC_OK(hTest, ShClTransferCtxRegister(pTransferCtx, pTx, NULL));
    99111    RTTEST_CHECK_RC_OK(hTest, ShClTransferHttpServerRegisterTransfer(pSrv, pTx));
     
    362374    if (!g_fManual)
    363375    {
    364         char szFilePath[RTPATH_MAX];
     376        char szPath[RTPATH_MAX];
    365377        for (size_t i = 0; i < RT_ELEMENTS(g_aTests); i++)
    366378        {
    367             RTTEST_CHECK      (hTest, RTStrPrintf(szFilePath, sizeof(szFilePath),  szTempDir));
    368             RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szFilePath, sizeof(szFilePath), g_aTests[i].pszFileName));
     379            RTTEST_CHECK      (hTest, RTStrPrintf(szPath, sizeof(szPath),  szTempDir));
     380            RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szPath, sizeof(szPath), g_aTests[i].pszPath));
    369381
    370382            size_t cbSize =  g_aTests[i].cbSize == UINT64_MAX ? RTRandU32Ex(0, _256M) : g_aTests[i].cbSize;
    371383
    372             RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Random test file (%zu bytes): %s\n", cbSize, szFilePath);
    373 
    374             RTFILE hFile;
    375             rc = RTFileOpen(&hFile, szFilePath, RTFILE_O_WRITE | RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_NONE);
     384            switch (g_aTests[i].fMode & RTFS_TYPE_MASK)
     385            {
     386                case RTFS_TYPE_FILE:
     387                {
     388                    RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Random test file (%zu bytes): %s\n", cbSize, szPath);
     389
     390                    RTFILE hFile;
     391                    rc = RTFileOpen(&hFile, szPath, RTFILE_O_WRITE | RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_NONE);
     392                    if (RT_SUCCESS(rc))
     393                    {
     394                        uint8_t abBuf[_64K]; RTRandBytes(abBuf, sizeof(abBuf));
     395
     396                        while (cbSize > 0)
     397                        {
     398                            size_t cbToWrite = sizeof(abBuf);
     399                            if (cbToWrite > cbSize)
     400                                cbToWrite = cbSize;
     401                            rc = RTFileWrite(hFile, abBuf, cbToWrite, NULL);
     402                            if (RT_FAILURE(rc))
     403                            {
     404                                RTTestIFailed("RTFileWrite(%#x) -> %Rrc\n", cbToWrite, rc);
     405                                break;
     406                            }
     407                            cbSize -= cbToWrite;
     408                        }
     409
     410                        RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
     411                    }
     412                    else
     413                        RTTestIFailed("RTFileOpen(%s) -> %Rrc\n", szPath, rc);
     414                    break;
     415                }
     416
     417                case RTFS_TYPE_DIRECTORY:
     418                    RTTESTI_CHECK_RC_OK(RTDirCreate(szPath, 0755 /* fMode */, 0 /* fCreate */));
     419                    break;
     420
     421                case RTFS_TYPE_SYMLINK:
     422                    RTTESTI_CHECK_RC_OK(RTSymlinkCreate(szPath, szTempDir, RTSYMLINKTYPE_UNKNOWN, 0 /* fCreate */));
     423                    break;
     424
     425                default:
     426                    break;
     427            }
     428
    376429            if (RT_SUCCESS(rc))
    377             {
    378                 uint8_t abBuf[_64K]; RTRandBytes(abBuf, sizeof(abBuf));
    379 
    380                 while (cbSize > 0)
    381                 {
    382                     size_t cbToWrite = sizeof(abBuf);
    383                     if (cbToWrite > cbSize)
    384                         cbToWrite = cbSize;
    385                     rc = RTFileWrite(hFile, abBuf, cbToWrite, NULL);
    386                     if (RT_FAILURE(rc))
    387                     {
    388                         RTTestIFailed("RTFileWrite(%#x) -> %Rrc\n", cbToWrite, rc);
    389                         break;
    390                     }
    391                     cbSize -= cbToWrite;
    392                 }
    393 
    394                 RTTESTI_CHECK_RC(RTFileClose(hFile), VINF_SUCCESS);
    395 
    396                 if (RT_SUCCESS(rc))
    397                     tstCreateTransferSingle(hTest, &TxCtx, &HttpSrv, szFilePath, &Provider);
    398             }
    399             else
    400                 RTTestIFailed("RTFileOpen(%s) -> %Rrc\n", szFilePath, rc);
     430                tstCreateTransferSingle(hTest, &TxCtx, &HttpSrv, szPath, &Provider);
    401431        }
    402432    }
     
    428458                    PSHCLTRANSFER pTx = ShClTransferCtxGetTransferByIndex(&TxCtx, i);
    429459                    char *pszUrlBase  = ShClTransferHttpServerGetUrlA(&HttpSrv, ShClTransferGetID(pTx), UINT64_MAX);
    430 
    431460                    RTTEST_CHECK(hTest, RTStrPrintf2(szURL, sizeof(szURL), "%s/%s", pszUrlBase, g_aTests[i].pszUrl));
    432 
    433461                    RTStrFree(pszUrlBase);
    434462
    435                     /* Download to destination file. */
    436                     char szDstFile[RTPATH_MAX];
    437                     RTTEST_CHECK_RC_OK(hTest, RTPathTemp(szDstFile, sizeof(szDstFile)));
    438                     RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szDstFile, sizeof(szDstFile), "tstClipboardHttpServer-XXXXXX"));
    439                     RTTEST_CHECK_RC_OK(hTest, RTFileCreateTemp(szDstFile, 0600));
    440                     RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Downloading '%s' -> '%s'\n", szURL, szDstFile);
    441                     RTTEST_CHECK_RC_OK(hTest, RTHttpGetFile(hClient, szURL, szDstFile));
    442 
    443                     /* Compare files. */
    444                     char szSrcFile[RTPATH_MAX];
    445                     RTTEST_CHECK      (hTest, RTStrPrintf(szSrcFile, sizeof(szSrcFile),  szTempDir));
    446                     RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szSrcFile, sizeof(szSrcFile), g_aTests[i].pszFileName));
    447                     RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Comparing files '%s' vs. '%s'\n", szSrcFile, szDstFile);
    448                     RTTEST_CHECK_RC_OK(hTest, RTFileCompare(szSrcFile, szDstFile));
    449 
    450                     RTTEST_CHECK_RC_OK(hTest, RTFileDelete(szDstFile));
     463                    switch (g_aTests[i].fMode & RTFS_TYPE_MASK)
     464                    {
     465                        case RTFS_TYPE_FILE:
     466                        {
     467                            /* Download to destination file. */
     468                            char szDstFile[RTPATH_MAX];
     469                            RTTEST_CHECK_RC_OK(hTest, RTPathTemp(szDstFile, sizeof(szDstFile)));
     470                            RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szDstFile, sizeof(szDstFile), "tstClipboardHttpServer-XXXXXX"));
     471                            RTTEST_CHECK_RC_OK(hTest, RTFileCreateTemp(szDstFile, 0600));
     472                            RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Downloading file '%s' -> '%s'\n", szURL, szDstFile);
     473                            RTTEST_CHECK_RC_OK(hTest, RTHttpGetFile(hClient, szURL, szDstFile));
     474
     475                            /* Compare files. */
     476                            char szSrcFile[RTPATH_MAX];
     477                            RTTEST_CHECK      (hTest, RTStrPrintf(szSrcFile, sizeof(szSrcFile),  szTempDir));
     478                            RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szSrcFile, sizeof(szSrcFile), g_aTests[i].pszPath));
     479                            RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Comparing files '%s' vs. '%s'\n", szSrcFile, szDstFile);
     480                            RTTEST_CHECK_RC_OK(hTest, RTFileCompare(szSrcFile, szDstFile));
     481
     482                            RTTEST_CHECK_RC_OK(hTest, RTFileDelete(szDstFile));
     483                            break;
     484                        }
     485
     486                        case RTFS_TYPE_DIRECTORY:
     487                            RT_FALL_THROUGH();
     488                        case RTFS_TYPE_SYMLINK:
     489                        {
     490                            char szDstFile[RTPATH_MAX];
     491                            RTTEST_CHECK_RC_OK(hTest, RTPathTemp(szDstFile, sizeof(szDstFile)));
     492                            RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szDstFile, sizeof(szDstFile), "tstClipboardHttpServer-XXXXXX"));
     493                            RTTEST_CHECK_RC_OK(hTest, RTFileCreateTemp(szDstFile, 0600));
     494                            RTTEST_CHECK_RC   (hTest, RTHttpGetFile(hClient, szURL, szDstFile), g_aTests[i].rc);
     495                            RTTEST_CHECK_RC_OK(hTest, RTFileDelete(szDstFile));
     496                            break;
     497                        }
     498
     499                        default:
     500                            break;
     501                    }
    451502                }
    452503
     
    465516     * Cleanup
    466517     */
    467     char szFilePath[RTPATH_MAX];
     518    char szPath[RTPATH_MAX];
    468519    for (size_t i = 0; i < RT_ELEMENTS(g_aTests); i++)
    469520    {
    470         RTTEST_CHECK      (hTest, RTStrPrintf(szFilePath, sizeof(szFilePath), szTempDir));
    471         RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szFilePath, sizeof(szFilePath), g_aTests[i].pszFileName));
    472         RTTEST_CHECK_RC_OK(hTest, RTFileDelete(szFilePath));
     521        RTTEST_CHECK      (hTest, RTStrPrintf(szPath, sizeof(szPath), szTempDir));
     522        RTTEST_CHECK_RC_OK(hTest, RTPathAppend(szPath, sizeof(szPath), g_aTests[i].pszPath));
     523
     524        switch (g_aTests[i].fMode & RTFS_TYPE_MASK)
     525        {
     526            case RTFS_TYPE_FILE:
     527            {
     528                RTTEST_CHECK_RC_OK(hTest, RTFileDelete(szPath));
     529                break;
     530            }
     531
     532            case RTFS_TYPE_DIRECTORY:
     533            {
     534                RTTEST_CHECK_RC_OK(hTest, RTDirRemove(szPath)); /* ASSUMES empty dir. */
     535                break;
     536            }
     537
     538            case RTFS_TYPE_SYMLINK:
     539            {
     540                RTTEST_CHECK_RC_OK(hTest, RTSymlinkDelete(szPath, 0 /* fDelete */));
     541                break;
     542            }
     543
     544            default:
     545                break;
     546        }
    473547    }
    474548    RTTEST_CHECK_RC_OK(hTest, RTDirRemove(szTempDir));
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