From 6452fda1b92a059d1f515bf1452aa4dc8ba1e37e Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Sun, 11 Dec 2022 16:23:28 +1100 Subject: [PATCH 1/6] Added support for #1061 Window Change Request in ShellStream --- src/Renci.SshNet/ShellStream.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Renci.SshNet/ShellStream.cs b/src/Renci.SshNet/ShellStream.cs index 3274fe19c..49dc9263c 100644 --- a/src/Renci.SshNet/ShellStream.cs +++ b/src/Renci.SshNet/ShellStream.cs @@ -7,6 +7,8 @@ using System.Threading; using System.Text.RegularExpressions; using Renci.SshNet.Abstractions; +using System.CodeDom; +using System.Runtime.InteropServices; namespace Renci.SshNet { @@ -52,6 +54,19 @@ public bool DataAvailable } } } + /// + /// Sends a Window Change Request via the Channel. + /// + /// New screen width in # of columns + /// New screen height in # of rows + /// New screen width in Pixels + /// New screen height in Pixels + /// true when change is successful, or false when channel is NOT open or the request + public bool WindowChangeRequest(uint columns, uint rows, uint width, uint height ) + { + if (_channel==null || !_channel.IsOpen) return false; + return _channel.SendWindowChangeRequest(columns, rows, width, height); + } /// /// Gets the number of bytes that will be written to the internal buffer. From 485adffc4ee0376363eaf716f78ec07c80c6eb7d Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Sun, 11 Dec 2022 16:37:59 +1100 Subject: [PATCH 2/6] #1061 Added not connected test case window-change:WindowChangeRequestInfo --- src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs index ecec9d30e..ad4375001 100644 --- a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs +++ b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs @@ -103,6 +103,14 @@ public void WriteLine_Line_ShouldOnlyWriteLineTerminatorWhenLineIsNull() _channelSessionMock.Verify(p => p.SendData(lineTerminator), Times.Once); } + [TestMethod] + public void WindowChangeRequest_ShouldReturnFalseWhenNotConnected() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(false); + Assert.IsFalse(shellStream.WindowChangeRequest(80, 25, 0, 0)); + } + private ShellStream CreateShellStream() { _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); From a5d7b017fb6b17fd56dfe15a195a7aef42e6d9bd Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Sun, 11 Dec 2022 16:39:01 +1100 Subject: [PATCH 3/6] #1061 Added Request Failed and Request Successed test cases for window-change:WindowChangeRequestInfo --- .../Classes/ShellStreamTest.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs index ad4375001..aa64bed45 100644 --- a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs +++ b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs @@ -111,6 +111,28 @@ public void WindowChangeRequest_ShouldReturnFalseWhenNotConnected() Assert.IsFalse(shellStream.WindowChangeRequest(80, 25, 0, 0)); } + [TestMethod] + public void WindowChangeRequest_ShouldReturnFalseWhenResultFails() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(true); + _channelSessionMock.Setup(s => s.SendWindowChangeRequest( + It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny())).Returns(false); + Assert.IsFalse(shellStream.WindowChangeRequest(80, 25, 0, 0)); + } + + [TestMethod] + public void WindowChangeRequest_ShouldReturnTrueWhenResultSucceeds() + { + var shellStream = CreateShellStream(); + _channelSessionMock.Setup(s => s.IsOpen).Returns(true); + _channelSessionMock.Setup(s => s.SendWindowChangeRequest( + It.IsAny(), It.IsAny(), + It.IsAny(), It.IsAny())).Returns(true); + Assert.IsTrue(shellStream.WindowChangeRequest(80, 25, 0, 0)); + } + private ShellStream CreateShellStream() { _sessionMock.Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object); From ec60725c205f3102bde71285542b9a87d53e6a12 Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Thu, 15 Dec 2022 07:45:09 +1100 Subject: [PATCH 4/6] Removed extra whitespace before closing parenthesis --- src/Renci.SshNet/ShellStream.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Renci.SshNet/ShellStream.cs b/src/Renci.SshNet/ShellStream.cs index 49dc9263c..7640ecb3f 100644 --- a/src/Renci.SshNet/ShellStream.cs +++ b/src/Renci.SshNet/ShellStream.cs @@ -62,7 +62,7 @@ public bool DataAvailable /// New screen width in Pixels /// New screen height in Pixels /// true when change is successful, or false when channel is NOT open or the request - public bool WindowChangeRequest(uint columns, uint rows, uint width, uint height ) + public bool WindowChangeRequest(uint columns, uint rows, uint width, uint height) { if (_channel==null || !_channel.IsOpen) return false; return _channel.SendWindowChangeRequest(columns, rows, width, height); From f77df6a6e1805cf1b06ff8a7d08a354fe6f52252 Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Thu, 15 Dec 2022 08:43:03 +1100 Subject: [PATCH 5/6] Ensure SendWindowChangeRequest is called once. --- src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs index aa64bed45..e743e7789 100644 --- a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs +++ b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs @@ -131,6 +131,7 @@ public void WindowChangeRequest_ShouldReturnTrueWhenResultSucceeds() It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(true); Assert.IsTrue(shellStream.WindowChangeRequest(80, 25, 0, 0)); + _channelSessionMock.Verify(v => v.SendWindowChangeRequest(80,25,0,0), Times.Once()); } private ShellStream CreateShellStream() From 61d53248a2bc914d2fb2d13d44e652e1838ce5ab Mon Sep 17 00:00:00 2001 From: "glenk@galkam.com.au" Date: Thu, 15 Dec 2022 09:07:10 +1100 Subject: [PATCH 6/6] Changed WindowChangeRequest to friendlier name. --- src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs | 6 +++--- src/Renci.SshNet/ShellStream.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs index e743e7789..4408a4b57 100644 --- a/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs +++ b/src/Renci.SshNet.Tests/Classes/ShellStreamTest.cs @@ -108,7 +108,7 @@ public void WindowChangeRequest_ShouldReturnFalseWhenNotConnected() { var shellStream = CreateShellStream(); _channelSessionMock.Setup(s => s.IsOpen).Returns(false); - Assert.IsFalse(shellStream.WindowChangeRequest(80, 25, 0, 0)); + Assert.IsFalse(shellStream.ChangeWindow(80, 25, 0, 0)); } [TestMethod] @@ -119,7 +119,7 @@ public void WindowChangeRequest_ShouldReturnFalseWhenResultFails() _channelSessionMock.Setup(s => s.SendWindowChangeRequest( It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(false); - Assert.IsFalse(shellStream.WindowChangeRequest(80, 25, 0, 0)); + Assert.IsFalse(shellStream.ChangeWindow(80, 25, 0, 0)); } [TestMethod] @@ -130,7 +130,7 @@ public void WindowChangeRequest_ShouldReturnTrueWhenResultSucceeds() _channelSessionMock.Setup(s => s.SendWindowChangeRequest( It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).Returns(true); - Assert.IsTrue(shellStream.WindowChangeRequest(80, 25, 0, 0)); + Assert.IsTrue(shellStream.ChangeWindow(80, 25, 0, 0)); _channelSessionMock.Verify(v => v.SendWindowChangeRequest(80,25,0,0), Times.Once()); } diff --git a/src/Renci.SshNet/ShellStream.cs b/src/Renci.SshNet/ShellStream.cs index 7640ecb3f..720f1ccc8 100644 --- a/src/Renci.SshNet/ShellStream.cs +++ b/src/Renci.SshNet/ShellStream.cs @@ -62,7 +62,7 @@ public bool DataAvailable /// New screen width in Pixels /// New screen height in Pixels /// true when change is successful, or false when channel is NOT open or the request - public bool WindowChangeRequest(uint columns, uint rows, uint width, uint height) + public bool ChangeWindow(uint columns, uint rows, uint width, uint height ) { if (_channel==null || !_channel.IsOpen) return false; return _channel.SendWindowChangeRequest(columns, rows, width, height);