public void Rdpei_TouchInputTest_Positive_SingleTouchEvent() { Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); this.rdpeiSUTControlAdapter.TriggerOneTouchEventOnClient(this.TestContext.TestName); // RDPEI running phase Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_TOUCH_EVENT_PDU ..."); RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); VerifyRdpInputTouchEventPdu(touchEventPdu, true); if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }
public override void Initialize(ITestSite testSite) { this.site = testSite; this.rdprfxAdapter = Site.GetAdapter <IRdprfxAdapter>(); this.rdprfxAdapter.Initialize(testSite); this.rdpbcgrAdapter = Site.GetAdapter <IRdpbcgrAdapter>(); RdpeiUtility.Initialized(this.site); }
/// <summary> /// Send a circle to the client. /// </summary> /// <param name="diam">The diameter of the circle.</param> /// <param name="color">The color of the circle.</param> /// <param name="left">The left position of the circle.</param> /// <param name="top">The top position of the circle.</param> public static void SendCircle(ushort diam, Color color, ushort left, ushort top) { Bitmap img = new Bitmap(diam, diam); Graphics graph = Graphics.FromImage(img); graph.FillEllipse(new SolidBrush(color), 0, 0, diam, diam); RdpeiUtility.SendImageToClient(img, left, top, 0); }
public void Rdpei_TouchInputTest_Positive_MultiTouchEvent() { Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); ushort contactCount = (csReadyPdu.maxTouchContacts > 5) ? (ushort)5 : csReadyPdu.maxTouchContacts; this.rdpeiSUTControlAdapter.TriggerMultiTouchEventOnClient(this.TestContext.TestName, contactCount); // RDPEI running phase Site.Log.Add(LogEntryKind.Debug, "Expecting multitouch RDPINPUT_TOUCH_EVENT_PDU ..."); bool isFirstFrame = true; DateTime endTime = DateTime.Now + waitTime; bool isExpectedFrameReceived = false; while (DateTime.Now < endTime && !isExpectedFrameReceived) { RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); Site.Assert.IsNotNull(touchEventPdu, "Client is expected to send to the server a RDPINPUT_TOUCH_EVENT_PDU whose contactCount is {0}.", contactCount); VerifyRdpInputTouchEventPdu(touchEventPdu, isFirstFrame); if (isFirstFrame) { isFirstFrame = false; } foreach (RDPINPUT_TOUCH_FRAME f in touchEventPdu.frames) { if (f.contactCount.ToUShort() == contactCount) { isExpectedFrameReceived = true; break; } } } Site.Assert.IsTrue(isExpectedFrameReceived, "Client is expected to send to the server a RDPINPUT_TOUCH_EVENT_PDU whose contactCount is {0}.", contactCount); if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }
public int TriggerContinuousTouchEventOnClient(string caseName) { this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext); this.rdprfxAdapter.ReceiveAndCheckClientCoreData(); TS_RFX_ICAP[] supportedRfxCaps; this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps); RdpeiUtility.SendInstruction(RdpeiSUTControlData.ContinuousTouchEventControlData); return(1); }
public int TriggerMultiTouchEventOnClient(ushort contactCount) { this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext); this.rdprfxAdapter.ReceiveAndCheckClientCoreData(); TS_RFX_ICAP[] supportedRfxCaps; this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps); RdpeiUtility.SendInstruction(RdpeiSUTControlData.MultitouchEventControlData(contactCount)); return(1); }
protected override void TestInitialize() { base.TestInitialize(); this.rdpeiSUTControlAdapter = (IRdpeiSUTControlAdapter)this.TestSite.GetAdapter(typeof(IRdpeiSUTControlAdapter)); this.rdpeiSUTControlAdapter.Reset(); this.rdpbcgrAdapter.TurnVerificationOff(true); RdpeiUtility.Initialized(this.TestSite); isManagedAdapter = Site.Config.GetAdapterConfig("IRdpeiSUTControlAdapter").GetType().Name.Equals("ManagedAdapterConfig"); isInteractiveAdapter = Site.Config.GetAdapterConfig("IRdpeiSUTControlAdapter").GetType().Name.Equals("InteractiveAdapterConfig"); //Start RDP listening. this.TestSite.Log.Add(LogEntryKind.Comment, "Starting RDP listening with transport protocol: {0}", transportProtocol.ToString()); this.rdpbcgrAdapter.StartRDPListening(transportProtocol); }
public int TriggerDismissHoveringContactPduOnClient(string caseName) { this.rdprfxAdapter.Accept(rdpbcgrAdapter.ServerStack, rdpbcgrAdapter.SessionContext); this.rdprfxAdapter.ReceiveAndCheckClientCoreData(); TS_RFX_ICAP[] supportedRfxCaps; this.rdprfxAdapter.ReceiveAndCheckClientCapabilities(maxRequestSize, out supportedRfxCaps); RdpeiUtility.SendInstruction(RdpeiSUTControlData.DismissHoveringContactPduControlData); ushort btnLeft = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - 160); ushort btnTop = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - 120); RdpeiUtility.AddButton("Exit", btnLeft, btnTop); return(1); }
public void Rdpei_TouchControlTest_Negative_DuplicatedResume() { Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); // RDPEI running phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SUSPEND_TOUCH_PDU."); RDPINPUT_SUSPEND_TOUCH_PDU suspendPdu = this.rdpeiServer.CreateRdpInputSuspendTouchPdu(); this.rdpeiServer.SendRdpInputSuspendTouchPdu(suspendPdu); Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_RESUME_TOUCH_PDU."); RDPINPUT_RESUME_TOUCH_PDU resumePdu = this.rdpeiServer.CreateRdpInputResumeTouchPdu(); this.rdpeiServer.SendRdpInputResumeTouchPdu(resumePdu); // Send a duplicated resume message to test the client will ignore it, since the Touch Remoting Suspended ADM element is already set to FALSE. Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_RESUME_TOUCH_PDU."); this.rdpeiServer.SendRdpInputResumeTouchPdu(resumePdu); this.rdpeiSUTControlAdapter.TriggerOneTouchEventOnClient(this.TestContext.TestName); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_TOUCH_EVENT_PDU ..."); RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); VerifyRdpInputTouchEventPdu(touchEventPdu, true); if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }
public void Rdpei_TouchControlTest_Negative_InvalidSuspendPduLength() { Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); // RDPEI running phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SUSPEND_TOUCH_PDU with invalid PduLength."); RDPINPUT_INVALID_PDU invalidPdu = CreateRdpInputInvalidPdu((ushort)EventId_Values.EVENTID_SUSPEND_TOUCH, 16, null); SendRdpInvalidPdu(invalidPdu); // Expect the client to ignore the RDPINPUT_SUSPEND_TOUCH_PDU with invalid pduLength. this.rdpeiSUTControlAdapter.TriggerOneTouchEventOnClient(this.TestContext.TestName); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_TOUCH_EVENT_PDU ..."); RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); Site.Assert.IsNotNull(touchEventPdu, "Client should ignore the RDPINPUT_SUSPEND_TOUCH_PDU message when the pduLength field is inconsistent with the amount of data read from DVC."); VerifyRdpInputTouchEventPdu(touchEventPdu, true); if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }
public void Rdpei_TouchInputTest_Positive_DismissHoveringContact() { Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); // Trigger the user to determin whether the client device supports proximity. If not, negative value will be returned when using interactive adapter. if (this.rdpeiSUTControlAdapter.TriggerDismissHoveringContactPduOnClient(this.TestContext.TestName) < 0) { TestSite.Assume.Inconclusive("The client device does not support proximity."); } // RDPEI running phase RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); this.stateMachine = new TouchContactStateMachine(); this.stateMachine.Initialize(); VerifyAndUpdateContactState(touchEventPdu, true); // Verify the user input. ushort left = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - 160); ushort top = (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - 120); ushort width = 100; ushort height = 60; if (touchEventPdu != null && touchEventPdu.frames != null) { foreach (RDPINPUT_TOUCH_FRAME f in touchEventPdu.frames) { foreach (RDPINPUT_CONTACT_DATA d in f.contacts) { int x = d.x.ToInt(); int y = d.y.ToInt(); if (x >= left && x <= (left + width) && y >= top && y <= (top + height)) { TestSite.Assume.Inconclusive("The client device does not support proximity."); } } } } // The client supports proximity, waiting for RDPINPUT_DISMISS_HOVERING_CONTACT_PDU. Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_DISMISS_HOVERING_CONTACT_PDU ..."); DateTime endTime = DateTime.Now + waitTime; bool isExpectedFrameReceived = false; while (DateTime.Now < endTime && !isExpectedFrameReceived) { RDPINPUT_PDU pdu = this.rdpeiServer.ExpectRdpInputPdu(waitTime); // Intent to check whether the state transition of received RDPINPUT_DISMISS_HOVERING_CONTACT_PDU is valid. VerifyAndUpdateContactState(pdu, false); if (pdu != null && pdu is RDPINPUT_DISMISS_HOVERING_CONTACT_PDU) { isExpectedFrameReceived = true; } } TestSite.Assert.IsTrue(isExpectedFrameReceived, "Client is expected to send RDPINPUT_DISMISS_HOVERING_CONTACT_PDU to the server."); if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }
public void Rdpei_TouchInputTest_Positive_SingleTouchContactPosition() { if (isInteractiveAdapter) { Site.Assume.Inconclusive("This case will not be bun when using interactive client control adapter."); } Site.Log.Add(LogEntryKind.Debug, "Establishing RDP connection ..."); StartRDPConnection(); Site.Log.Add(LogEntryKind.Debug, "Creating dynamic virtual channels for MS-RDPEI ..."); bool bProtocolSupported = this.rdpeiServer.CreateRdpeiDvc(waitTime); TestSite.Assert.IsTrue(bProtocolSupported, "Client should support this protocol."); // RDPEI initializing phase Site.Log.Add(LogEntryKind.Debug, "Sending a RDPINPUT_SC_READY_PDU."); RDPINPUT_SC_READY_PDU scReadyPdu = this.rdpeiServer.CreateRdpInputScReadyPdu(); this.rdpeiServer.SendRdpInputScReadyPdu(scReadyPdu); Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_CS_READY_PDU ..."); RDPINPUT_CS_READY_PDU csReadyPdu = this.rdpeiServer.ExpectRdpInputCsReadyPdu(waitTime); TestSite.Assert.IsTrue(csReadyPdu != null, "Client is expected to send RDPINPUT_CS_READY_PDU to the server."); this.rdpeiSUTControlAdapter.TriggerPositionSpecifiedTouchEventOnClient("Rdpei_TouchInputTest_Positive_SingleTouchEvent"); // RDPEI running phase ushort width = this.rdpbcgrAdapter.CapabilitySetting.DesktopWidth; ushort height = this.rdpbcgrAdapter.CapabilitySetting.DesktopHeight; // The diameter of the circle to be sent to the client. ushort diam = 64; Random random = new Random(); // The left and top position of the circles to be sent to the client. //ushort[] arr = { 0, 0, 0, (ushort)(height - diam), (ushort)(width - diam), 0, (ushort)(width - diam), (ushort)(height - diam), (ushort)(random.Next(width - diam * 2) + diam), (ushort)(random.Next(height - diam * 2) + diam) }; ushort[] arr = { 0, 0, 0, (ushort)(height - diam), (ushort)(width - diam), 0, (ushort)(width - diam), (ushort)(height - diam), (ushort)(width / 2 - diam / 2), (ushort)(height / 2 - diam / 2) }; bool isFirstFrame = true; for (int i = 0; i < 5; i++) { ushort left = arr[i * 2]; ushort top = arr[i * 2 + 1]; if (isManagedAdapter) { RdpeiUtility.SendCircle(diam, Color.Red, left, top); } Site.Log.Add(LogEntryKind.Debug, "Expecting RDPINPUT_TOUCH_EVENT_PDU ..."); ushort preLeft = (i == 0) ? (ushort)(width + 1) : arr[(i - 1) * 2]; ushort preTop = (i == 0) ? (ushort)(height + 1) : arr[2 * i - 1]; bool isExpectedFrameReceived = false; while (!isExpectedFrameReceived) { RDPINPUT_TOUCH_EVENT_PDU touchEventPdu = this.rdpeiServer.ExpectRdpInputTouchEventPdu(waitTime); VerifyRdpInputTouchEventPdu(touchEventPdu, isFirstFrame); if (isFirstFrame) { isFirstFrame = false; } foreach (RDPINPUT_TOUCH_FRAME f in touchEventPdu.frames) { foreach (RDPINPUT_CONTACT_DATA d in f.contacts) { int contactX = d.x.ToInt(); int contactY = d.y.ToInt(); // Consume the RDPINPUT_TOUCH_EVENT_PDU received from last touch action. if (contactX >= preLeft && contactX <= preLeft + diam && contactY >= preTop && contactY <= preTop + diam) { continue; } // Touch out of the valid range, send the unexpected position instruction to the client, and fail the case. if (contactX < left || contactX > left + diam || contactY < top || contactY > top + diam) { if (isManagedAdapter) { ushort l = (contactX < diam / 2) ? (ushort)0 : (contactX > (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - diam / 2) ? (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopWidth - diam) : (ushort)(contactX - diam / 2)); ushort t = (contactY < diam / 2) ? (ushort)0 : (contactY > (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - diam / 2) ? (ushort)(rdpbcgrAdapter.CapabilitySetting.DesktopHeight - diam) : (ushort)(contactY - diam / 2)); RdpeiUtility.SendCircle(diam, Color.Green, l, t); RdpeiUtility.SendInstruction(RdpeiSUTControlData.UnexpectedPositionNotice); } Site.Assert.IsTrue(false, "Client is expected to send a RDPINPUT_TOUCH_EVENT_PDU whose contact position near ({0}, {1}), not ({2}, {3}).", left + diam / 2, top + diam / 2, contactX, contactY); } else { isExpectedFrameReceived = true; } } } } // Update on the client screen. if (isManagedAdapter) { RdpeiUtility.SendCircle(diam, Color.Black, left, top); } } if (isManagedAdapter) { RdpeiUtility.SendConfirmImage(); } }