rpcrt4: Implement NdrMapCommAndFaultStatus.
Add tests for this function.
This commit is contained in:
parent
c370980dfa
commit
e0c67a189b
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue