mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
351 lines
7.8 KiB
351 lines
7.8 KiB
/*++
|
|
|
|
Copyright (c) 1993-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dceclnt.c
|
|
|
|
Abstract:
|
|
|
|
This is the client side of the test program for newndr.dll.
|
|
|
|
Author:
|
|
|
|
Michael Montague (mikemon) 13-Apr-1993
|
|
|
|
Revision History:
|
|
|
|
RyszardK Nov 30, 1993 Added tests for rpc_sm* package.
|
|
RyszardK Jan 3, 1993 Carved out this independent test for newndr
|
|
|
|
|
|
--*/
|
|
|
|
#include <sysinc.h>
|
|
#include <rpc.h>
|
|
#include "rpcndr.h"
|
|
|
|
void
|
|
ApiError (
|
|
char * TestName,
|
|
char * ApiName,
|
|
RPC_STATUS RpcStatus
|
|
)
|
|
{
|
|
PrintToConsole(" ApiError in %s (%s = %u [%lx])\n", TestName, ApiName,
|
|
RpcStatus, RpcStatus);
|
|
}
|
|
|
|
unsigned int MississippiBlockCount = 0;
|
|
unsigned int VistulaBlockCount = 0;
|
|
|
|
void *
|
|
MississippiAllocate (
|
|
unsigned long Size
|
|
)
|
|
{
|
|
MississippiBlockCount += 1;
|
|
return(I_RpcAllocate((unsigned int) Size));
|
|
}
|
|
|
|
void
|
|
MississippiFree (
|
|
void * Pointer
|
|
)
|
|
{
|
|
MississippiBlockCount -= 1;
|
|
I_RpcFree(Pointer);
|
|
}
|
|
|
|
void *
|
|
VistulaAllocate (
|
|
unsigned long Size
|
|
)
|
|
{
|
|
VistulaBlockCount += 1;
|
|
return(I_RpcAllocate((unsigned int) Size));
|
|
}
|
|
|
|
void
|
|
VistulaFree (
|
|
void * Pointer
|
|
)
|
|
{
|
|
VistulaBlockCount -= 1;
|
|
I_RpcFree(Pointer);
|
|
}
|
|
|
|
#define MISSISSIPPI_MAXIMUM 256
|
|
#define VISTULA_MAXIMUM 4
|
|
|
|
void * __RPC_API
|
|
MIDL_user_allocate (
|
|
size_t Size
|
|
);
|
|
|
|
void __RPC_API
|
|
MIDL_user_free (
|
|
void * Buffer
|
|
);
|
|
|
|
|
|
void
|
|
Mississippi (
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We will test the memory allocator, both client and server, in this routine.
|
|
|
|
--*/
|
|
{
|
|
unsigned int Count, Iterations;
|
|
void * Pointer;
|
|
// void * AllocatedBlocks[MISSISSIPPI_MAXIMUM];
|
|
unsigned int MississippiPassed = 1;
|
|
|
|
PrintToConsole("Mississippi : Test Ss* Memory Allocation\n");
|
|
|
|
RpcTryExcept
|
|
{
|
|
for (Iterations = 1; Iterations < 64; Iterations++)
|
|
{
|
|
PrintToConsole(".");
|
|
RpcSsEnableAllocate();
|
|
|
|
for (Count = 0; Count < 2048; Count++)
|
|
{
|
|
Pointer = RpcSsAllocate(Count);
|
|
if ( Count % Iterations == 0 )
|
|
{
|
|
RpcSsFree(Pointer);
|
|
}
|
|
}
|
|
|
|
RpcSsDisableAllocate();
|
|
}
|
|
PrintToConsole("\n");
|
|
}
|
|
RpcExcept(1)
|
|
{
|
|
PrintToConsole("Mississippi : FAIL - Exception %d (%lx)\n",
|
|
RpcExceptionCode(), RpcExceptionCode());
|
|
MississippiPassed = 0;
|
|
}
|
|
RpcEndExcept
|
|
|
|
#if 0
|
|
RpcTryExcept
|
|
{
|
|
for (Count = 0; Count < MISSISSIPPI_MAXIMUM; Count++)
|
|
{
|
|
AllocatedBlocks[Count] = MIDL_user_allocate(Count);
|
|
}
|
|
|
|
for (Count = 0; Count < MISSISSIPPI_MAXIMUM; Count++)
|
|
{
|
|
MIDL_user_free(AllocatedBlocks[Count]);
|
|
}
|
|
|
|
RpcSsSetClientAllocFree(MississippiAllocate, MississippiFree);
|
|
|
|
for (Count = 0; Count < MISSISSIPPI_MAXIMUM; Count++)
|
|
{
|
|
AllocatedBlocks[Count] = MIDL_user_allocate(Count);
|
|
}
|
|
|
|
if ( MississippiBlockCount != MISSISSIPPI_MAXIMUM )
|
|
{
|
|
PrintToConsole("Mississippi : FAIL - ");
|
|
PrintToConsole("MississippiBlockCount != MISSISSIPPI_MAXIMUM\n");
|
|
MississippiPassed = 0;
|
|
}
|
|
|
|
for (Count = 0; Count < MISSISSIPPI_MAXIMUM; Count++)
|
|
{
|
|
MIDL_user_free(AllocatedBlocks[Count]);
|
|
}
|
|
|
|
if ( MississippiBlockCount != 0 )
|
|
{
|
|
PrintToConsole("Mississippi : FAIL - ");
|
|
PrintToConsole("MississippiBlockCount != 0");
|
|
PrintToConsole(" (%d)\n", MississippiBlockCount );
|
|
MississippiPassed = 0;
|
|
}
|
|
}
|
|
RpcExcept(1)
|
|
{
|
|
PrintToConsole("Mississippi : FAIL - Exception %d (%lx)\n",
|
|
RpcExceptionCode(), RpcExceptionCode());
|
|
MississippiPassed = 0;
|
|
}
|
|
RpcEndExcept
|
|
#endif
|
|
|
|
if ( MississippiPassed != 0 )
|
|
{
|
|
PrintToConsole("Mississippi : PASS\n");
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
Vistula (
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
We will test the memory allocator in this routine.
|
|
This is cloned from the Mississippi bvt case.
|
|
|
|
--*/
|
|
{
|
|
unsigned int Count, Iterations;
|
|
void * Pointer;
|
|
// void * AllocatedBlocks[VISTULA_MAXIMUM];
|
|
RPC_SS_THREAD_HANDLE ThreadHandle = 0;
|
|
unsigned int VistulaPassed = 1;
|
|
RPC_STATUS Status;
|
|
int Result = 0;
|
|
|
|
PrintToConsole("Vistula : Test Sm* Memory Allocation\n");
|
|
|
|
RpcTryExcept
|
|
{
|
|
for (Iterations = 1; Iterations < 64; Iterations++)
|
|
{
|
|
PrintToConsole(".");
|
|
ThreadHandle = RpcSmGetThreadHandle( &Status );
|
|
if ( ThreadHandle != 0 )
|
|
PrintToConsole("H");
|
|
if ( RpcSmEnableAllocate() != RPC_S_OK )
|
|
{
|
|
Result++;
|
|
PrintToConsole("!");
|
|
}
|
|
ThreadHandle = RpcSmGetThreadHandle( &Status );
|
|
if ( ThreadHandle == 0 )
|
|
PrintToConsole("h");
|
|
|
|
for (Count = 0; Count < 2048; Count++)
|
|
{
|
|
Pointer = RpcSmAllocate( Count, &Status );
|
|
if ( Status != RPC_S_OK )
|
|
{
|
|
Result++;
|
|
PrintToConsole("a");
|
|
}
|
|
|
|
if ( Count % Iterations == 0 )
|
|
{
|
|
Status = RpcSmFree(Pointer);
|
|
if ( Status != RPC_S_OK )
|
|
{
|
|
Result++;
|
|
PrintToConsole("f");
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( RpcSmDisableAllocate() != RPC_S_OK )
|
|
{
|
|
Result++;
|
|
PrintToConsole("?");
|
|
}
|
|
|
|
}
|
|
PrintToConsole("\n");
|
|
}
|
|
RpcExcept(1)
|
|
{
|
|
PrintToConsole("Vistula : FAIL - Exception %d (%lx)\n",
|
|
RpcExceptionCode(), RpcExceptionCode());
|
|
VistulaPassed = 0;
|
|
}
|
|
RpcEndExcept
|
|
|
|
if ( Result )
|
|
{
|
|
PrintToConsole("Vistula : FAIL - %d\n", Result );
|
|
VistulaPassed = 0;
|
|
}
|
|
|
|
#if 0
|
|
RpcTryExcept
|
|
{
|
|
for (Count = 0; Count < VISTULA_MAXIMUM; Count++)
|
|
{
|
|
AllocatedBlocks[Count] = MIDL_user_allocate(Count);
|
|
}
|
|
|
|
for (Count = 0; Count < VISTULA_MAXIMUM; Count++)
|
|
{
|
|
MIDL_user_free(AllocatedBlocks[Count]);
|
|
}
|
|
|
|
Status = RpcSmSetClientAllocFree( VistulaAllocate, VistulaFree);
|
|
|
|
for (Count = 0; Count < VISTULA_MAXIMUM; Count++)
|
|
{
|
|
AllocatedBlocks[Count] = MIDL_user_allocate(Count);
|
|
}
|
|
|
|
if ( Status != RPC_S_OK ||
|
|
VistulaBlockCount != VISTULA_MAXIMUM )
|
|
{
|
|
PrintToConsole("Vistula : FAIL - ");
|
|
PrintToConsole("VistulaBlockCount != VISTULA_MAXIMUM\n");
|
|
VistulaPassed = 0;
|
|
}
|
|
|
|
for (Count = 0; Count < VISTULA_MAXIMUM; Count++)
|
|
{
|
|
MIDL_user_free(AllocatedBlocks[Count]);
|
|
}
|
|
|
|
if ( VistulaBlockCount != 0 )
|
|
{
|
|
PrintToConsole("Vistula : FAIL - ");
|
|
PrintToConsole("VistulaBlockCount != 0\n");
|
|
VistulaPassed = 0;
|
|
}
|
|
}
|
|
RpcExcept(1)
|
|
{
|
|
PrintToConsole("Vistula : FAIL - Exception %d (%lx)\n",
|
|
RpcExceptionCode(), RpcExceptionCode());
|
|
VistulaPassed = 0;
|
|
}
|
|
RpcEndExcept
|
|
#endif
|
|
|
|
if ( VistulaPassed != 0 )
|
|
{
|
|
PrintToConsole("Vistula : PASS\n");
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef NTENV
|
|
int __cdecl
|
|
#else // NTENV
|
|
int
|
|
#endif // NTENV
|
|
main (
|
|
int argc,
|
|
char * argv[]
|
|
)
|
|
{
|
|
Mississippi();
|
|
Vistula();
|
|
|
|
// To keep the compiler happy. There is nothing worse than an unhappy
|
|
// compiler.
|
|
|
|
return(0);
|
|
}
|
|
|