windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/iisrtl/sched-test/sched-test.cpp

141 lines
2.5 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
sched-test.cpp
Abstract:
This module tests the IIS Scheduler code
Author:
George V. Reilly (GeorgeRe) May-1999
Project:
Internet Servers Common Server DLL
Revisions:
--*/
#include <acache.hxx>
#include <issched.hxx>
#include <irtlmisc.h>
#include <dbgutil.h>
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#ifndef _NO_TRACING_
#include <initguid.h>
DEFINE_GUID(SchedTestGuid,
0x7a09df80, 0x2dbf, 0x11d3, 0x88, 0x84, 0x00, 0x50, 0x04, 0x60, 0x50, 0x4c);
#else
DECLARE_DEBUG_VARIABLE();
#endif
DECLARE_DEBUG_PRINTS_OBJECT();
#define MAX_WORK_ITEMS 10
#define MAX_TESTS 5
class CCookie
{
public:
CCookie()
: m_dwCookie(0),
m_dwSleep(0)
{}
DWORD m_dwCookie;
DWORD m_dwSleep;
};
CCookie g_aCookies[MAX_TESTS][MAX_WORK_ITEMS];
VOID
Callback(
void* pvContext)
{
CCookie* pc = (CCookie*) pvContext;
DBG_ASSERT(pc != NULL && pc >= &g_aCookies[0][0]);
int nRow = (pc - &g_aCookies[0][0]) / MAX_WORK_ITEMS;
int nCol = (pc - &g_aCookies[0][0]) % MAX_WORK_ITEMS;
printf("\tCallback [%d][%d] starting, sleeping for %d ms\n",
nRow, nCol, pc->m_dwSleep);
Sleep(pc->m_dwSleep);
printf("\tCallback [%d][%d] finishing\n", nRow, nCol);
}
void
TestScheduler(
int n,
bool fFlush)
{
printf("Initializing TestScheduler %d, %sflush\n",
n, fFlush ? "" : "no ");
// Initialize the Scheduler
InitializeIISRTL();
#ifdef _NO_TRACING_
SET_DEBUG_FLAGS(DEBUG_ERROR);
CREATE_DEBUG_PRINT_OBJECT("sched-test");
#else
CREATE_DEBUG_PRINT_OBJECT("sched-test", SchedTestGuid);
#endif
int i;
for (i = 0; i < MAX_WORK_ITEMS; i++)
{
g_aCookies[n][i].m_dwSleep = (i * 500 + 1);
g_aCookies[n][i].m_dwCookie =
ScheduleWorkItem(Callback, &g_aCookies[n][i], 100*i);
DBG_ASSERT(g_aCookies[n][i].m_dwCookie != 0);
printf("TestScheduler %d: ScheduleWorkItem(%d) = %u\n",
n, i, g_aCookies[n][i].m_dwCookie);
}
Sleep(2000);
if (fFlush)
{
for (i = MAX_WORK_ITEMS; --i >= 0; )
RemoveWorkItem(g_aCookies[n][i].m_dwCookie);
}
DELETE_DEBUG_PRINT_OBJECT();
TerminateIISRTL();
printf("Terminated TestScheduler %d\n", n);
}
int __cdecl
main(
int argc,
char **argv)
{
for (int n = 0; n < MAX_TESTS; ++n)
TestScheduler(n, true);
return 0;
}