/// <summary> /// Initialize receive SMBDirect data transfer test case /// And send the SMB2 READ request to peer /// </summary> /// <param name="maxReceiveCredit"></param> /// <param name="maxSendCredit"></param> /// <param name="smb2ReadResponseSize"></param> /// <param name="isUseMaxSendSize"></param> public void Initialize_ReceiveSmbdDataTransferTestCase( ushort maxReceiveCredit, ushort maxSendCredit, uint smb2ReadResponseSize, bool isUseMaxSendSize = false) { BaseTestSite.Log.Add(LogEntryKind.TestStep, "Connect to server over RDMA"); NtStatus status = smbdAdapter.ConnectToServerOverRDMA(); BaseTestSite.Assert.AreEqual <NtStatus>(NtStatus.STATUS_SUCCESS, status, "Status of SMBD connection is {0}", status); BaseTestSite.Log.Add(LogEntryKind.TestStep, "SMBD Negotiate"); SmbdNegotiateResponse response; status = smbdAdapter.SmbdNegotiate(maxSendCredit, maxReceiveCredit, out response); BaseTestSite.Assert.AreEqual <NtStatus>(NtStatus.STATUS_SUCCESS, status, "Status of SMBD negotiate is {0}", status); // SMB2 Negotiate, Session Setup, Tree Connect and Create BaseTestSite.Log.Add(LogEntryKind.TestStep, "Establish SMB2 connection and open file " + smbdAdapter.TestConfig.TestFileName_LargeFile); status = smbdAdapter.Smb2EstablishSessionAndOpenFile(smbdAdapter.TestConfig.TestFileName_LargeFile); BaseTestSite.Assert.AreEqual <NtStatus>(NtStatus.STATUS_SUCCESS, status, "Status of SMB2 establish session and open file is {0}", status); // calculate file size and generate file content int receivedFileSize = (int)smb2ReadResponseSize - Smb2OverSmbdTestClient.READ_RESPONSE_HEADER_SIZE;// calculate the file content size if (isUseMaxSendSize) { receivedFileSize = (int)(smbdAdapter.ClientConnection.MaxReceiveSize - Smb2OverSmbdTestClient.READ_RESPONSE_HEADER_SIZE); } byte[] readRequestPacket = smbdAdapter.Smb2GetReadRequest((uint)receivedFileSize); BaseTestSite.Log.Add(LogEntryKind.TestStep, "Send SMB2 Read request over RDMA"); status = (NtStatus)smbdAdapter.SmbdSendDataTransferMessage( maxReceiveCredit, 0, SmbdDataTransfer_Flags.NONE, 0, (uint)SmbdDataTransferMessage.DEFAULT_DATA_OFFSET, (uint)readRequestPacket.Length, readRequestPacket ); BaseTestSite.Assert.AreEqual <NtStatus>(status, NtStatus.STATUS_SUCCESS, "Status of send SMB2 Read request is {0}", status); }