rpcrt4: Implement NdrMapCommAndFaultStatus.

Add tests for this function.
oldstable
Rob Shearman 2008-01-08 18:14:20 +00:00 committed by Alexandre Julliard
parent c370980dfa
commit e0c67a189b
2 changed files with 66 additions and 3 deletions

View File

@ -216,10 +216,29 @@ RPC_STATUS RPC_ENTRY NdrMapCommAndFaultStatus( PMIDL_STUB_MESSAGE pStubMsg,
ULONG *pFaultStatus,
RPC_STATUS Status )
{
FIXME("(%p, %p, %p, %ld): stub\n", pStubMsg, pCommStatus, pFaultStatus, Status);
TRACE("(%p, %p, %p, %ld)\n", pStubMsg, pCommStatus, pFaultStatus, Status);
*pCommStatus = 0;
*pFaultStatus = 0;
switch (Status)
{
case ERROR_INVALID_HANDLE:
case RPC_S_INVALID_BINDING:
case RPC_S_UNKNOWN_IF:
case RPC_S_SERVER_UNAVAILABLE:
case RPC_S_SERVER_TOO_BUSY:
case RPC_S_CALL_FAILED_DNE:
case RPC_S_PROTOCOL_ERROR:
case RPC_S_UNSUPPORTED_TRANS_SYN:
case RPC_S_UNSUPPORTED_TYPE:
case RPC_S_PROCNUM_OUT_OF_RANGE:
case EPT_S_NOT_REGISTERED:
case RPC_S_COMM_FAILURE:
*pCommStatus = Status;
*pFaultStatus = 0;
break;
default:
*pCommStatus = 0;
*pFaultStatus = Status;
}
return RPC_S_OK;
}

View File

@ -1605,6 +1605,49 @@ todo_wine
ok(status == RPC_S_OK, "RpcServerUnregisterIf failed (%lu)\n", status);
}
static void test_NdrMapCommAndFaultStatus(void)
{
RPC_STATUS rpc_status;
MIDL_STUB_MESSAGE StubMsg;
RPC_MESSAGE RpcMessage;
NdrClientInitializeNew(&RpcMessage, &StubMsg, &Object_StubDesc, 5);
for (rpc_status = 0; rpc_status < 10000; rpc_status++)
{
RPC_STATUS status;
ULONG comm_status = 0;
ULONG fault_status = 0;
ULONG expected_comm_status = 0;
ULONG expected_fault_status = 0;
status = NdrMapCommAndFaultStatus(&StubMsg, &comm_status, &fault_status, rpc_status);
ok(status == RPC_S_OK, "NdrMapCommAndFaultStatus failed with error %ld\n", status);
switch (rpc_status)
{
case ERROR_INVALID_HANDLE:
case RPC_S_INVALID_BINDING:
case RPC_S_UNKNOWN_IF:
case RPC_S_SERVER_UNAVAILABLE:
case RPC_S_SERVER_TOO_BUSY:
case RPC_S_CALL_FAILED_DNE:
case RPC_S_PROTOCOL_ERROR:
case RPC_S_UNSUPPORTED_TRANS_SYN:
case RPC_S_UNSUPPORTED_TYPE:
case RPC_S_PROCNUM_OUT_OF_RANGE:
case EPT_S_NOT_REGISTERED:
case RPC_S_COMM_FAILURE:
expected_comm_status = rpc_status;
break;
default:
expected_fault_status = rpc_status;
}
ok(comm_status == expected_comm_status, "NdrMapCommAndFaultStatus should have mapped %ld to comm status %d instead of %d\n",
rpc_status, expected_comm_status, comm_status);
ok(fault_status == expected_fault_status, "NdrMapCommAndFaultStatus should have mapped %ld to fault status %d instead of %d\n",
rpc_status, expected_fault_status, fault_status);
}
}
START_TEST( ndr_marshall )
{
test_ndr_simple_type();
@ -1618,4 +1661,5 @@ START_TEST( ndr_marshall )
test_conformant_string();
test_nonconformant_string();
test_ndr_buffer();
test_NdrMapCommAndFaultStatus();
}