| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423 |
- using System;
- using System.Globalization;
- using System.Linq;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Renci.SshNet.Common;
- using Renci.SshNet.Messages.Authentication;
- using Renci.SshNet.Messages.Transport;
- namespace Renci.SshNet.Tests.Classes
- {
- [TestClass]
- public class SshMessageFactoryTest
- {
- private SshMessageFactory _sshMessageFactory;
- [TestInitialize]
- public void SetUp()
- {
- _sshMessageFactory = new SshMessageFactory();
- }
- [TestMethod]
- public void CreateShouldThrowSshExceptionWhenMessageIsNotEnabled()
- {
- const byte messageNumber = 60;
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void CreateShouldThrowSshExceptionWhenMessageDoesNotExist_OutsideOfMessageNumberRange()
- {
- const byte messageNumber = 255;
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not supported.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void CreateShouldThrowSshExceptionWhenMessageDoesNotExist_WithinMessageNumberRange()
- {
- const byte messageNumber = 5;
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not supported.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void CreateShouldThrowSshExceptionWhenMessageIsNotActivated()
- {
- const byte messageNumber = 60;
- const string messageName = "SSH_MSG_USERAUTH_PASSWD_CHANGEREQ";
- _sshMessageFactory.EnableAndActivateMessage(messageName);
- _sshMessageFactory.DisableAndDeactivateMessage(messageName);
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void CreateShouldReturnMessageInstanceCorrespondingToMessageNumberWhenMessageIsEnabledAndActivated()
- {
- const byte messageNumber = 60;
- const string messageName = "SSH_MSG_USERAUTH_PASSWD_CHANGEREQ";
- _sshMessageFactory.EnableAndActivateMessage(messageName);
- var actual = _sshMessageFactory.Create(messageNumber);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- _sshMessageFactory.DisableAndDeactivateMessage(messageName);
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_INFO_REQUEST");
- actual = _sshMessageFactory.Create(messageNumber);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(InformationRequestMessage), actual.GetType());
- }
- [TestMethod]
- public void DisableAndDeactivateMessageShouldThrowSshExceptionWhenAnotherMessageWithSameMessageNumberIsEnabled()
- {
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- try
- {
- _sshMessageFactory.DisableAndDeactivateMessage("SSH_MSG_USERAUTH_INFO_REQUEST");
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual("Cannot enable message 'SSH_MSG_USERAUTH_INFO_REQUEST'. Message type 60 is already enabled for 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ'.", ex.Message);
- }
- // verify that the original message remains enabled
- var actual = _sshMessageFactory.Create(60);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- }
- [TestMethod]
- public void DisableAndDeactivateMessageShouldNotThrowExceptionWhenMessageIsAlreadyDisabled()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableAndDeactivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableAndDeactivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- // verify that message remains disabled
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void DisableAndDeactivateMessageShouldNotThrowExceptionWhenMessageWasNeverEnabled()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.DisableAndDeactivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- // verify that message is disabled
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void DisableAndDeactivateMessageShouldThrowSshExceptionWhenMessageIsNotSupported()
- {
- const string messageName = "WHATEVER";
- try
- {
- _sshMessageFactory.DisableAndDeactivateMessage("WHATEVER");
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format("Message '{0}' is not supported.", messageName), ex.Message);
- }
- }
- [TestMethod]
- public void DisableAndDeactivateMessageShouldThrowArgumentNullExceptionWhenMessageNameIsNull()
- {
- const string messageName = null;
- try
- {
- _sshMessageFactory.DisableAndDeactivateMessage(messageName);
- Assert.Fail();
- }
- catch (ArgumentNullException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual("messageName", ex.ParamName);
- }
- }
- [TestMethod]
- public void EnableAndActivateMessageShouldThrowSshExceptionWhenAnotherMessageWithSameMessageNumberIsAlreadyEnabled()
- {
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- try
- {
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_INFO_REQUEST");
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual("Cannot enable message 'SSH_MSG_USERAUTH_INFO_REQUEST'. Message type 60 is already enabled for 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ'.", ex.Message);
- }
- // verify that the original message remains enabled
- var actual = _sshMessageFactory.Create(60);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- }
- [TestMethod]
- public void EnableAndActivateMessageShouldNotThrowExceptionWhenMessageIsAlreadyEnabled()
- {
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- var actual = _sshMessageFactory.Create(60);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- }
- [TestMethod]
- public void EnableAndActivateMessageShouldThrowSshExceptionWhenMessageIsNotSupported()
- {
- const string messageName = "WHATEVER";
- try
- {
- _sshMessageFactory.EnableAndActivateMessage("WHATEVER");
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format("Message '{0}' is not supported.", messageName), ex.Message);
- }
- }
- [TestMethod]
- public void EnableAndActivateMessageShouldThrowArgumentNullExceptionWhenMessageNameIsNull()
- {
- const string messageName = null;
- try
- {
- _sshMessageFactory.EnableAndActivateMessage(messageName);
- Assert.Fail();
- }
- catch (ArgumentNullException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual("messageName", ex.ParamName);
- }
- }
- [TestMethod]
- public void DisableNonKeyExchangeMessagesShouldDisableNonKeyExchangeMessages()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- // verify that message is disabled
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void DisableNonKeyExchangeMessagesShouldNotDisableKeyExchangeMessages()
- {
- const byte messageNumber = 21;
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_NEWKEYS");
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- // verify that message remains enabled
- var actual = _sshMessageFactory.Create(messageNumber);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(NewKeysMessage), actual.GetType());
- }
- [TestMethod]
- public void EnableActivatedMessagesShouldEnableMessagesThatWereEnabledPriorToInvokingDisableNonKeyExchangeMessages()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- _sshMessageFactory.EnableActivatedMessages();
- var actual = _sshMessageFactory.Create(messageNumber);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- }
- [TestMethod]
- public void EnableActivatedMessagesShouldNotEnableMessagesThatWereDisabledPriorToInvokingDisableNonKeyExchangeMessages()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- _sshMessageFactory.EnableActivatedMessages();
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void EnableActivatedMessagesShouldNotEnableMessagesThatWereDisabledAfterInvokingDisableNonKeyExchangeMessages()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- _sshMessageFactory.DisableAndDeactivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.EnableActivatedMessages();
- try
- {
- _sshMessageFactory.Create(messageNumber);
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, "Message type {0} is not valid in the current context.", messageNumber), ex.Message);
- }
- }
- [TestMethod]
- public void EnableActivatedMessagesShouldThrowSshExceptionWhenAnothersMessageWithSameMessageNumberWasEnabledAfterInvokingDisableNonKeyExchangeMessages()
- {
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_INFO_REQUEST");
- try
- {
- _sshMessageFactory.EnableActivatedMessages();
- Assert.Fail();
- }
- catch (SshException ex)
- {
- Assert.IsNull(ex.InnerException);
- Assert.AreEqual("Cannot enable message 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ'. Message type 60 is already enabled for 'SSH_MSG_USERAUTH_INFO_REQUEST'.", ex.Message);
- }
- }
- [TestMethod]
- public void EnableActivatedMessagesShouldLeaveMessagesEnabledThatWereEnabledAfterInvokingDisableNonKeyExchangeMessages()
- {
- const byte messageNumber = 60;
- _sshMessageFactory.DisableNonKeyExchangeMessages(strict: false);
- _sshMessageFactory.EnableAndActivateMessage("SSH_MSG_USERAUTH_PASSWD_CHANGEREQ");
- _sshMessageFactory.EnableActivatedMessages();
- var actual = _sshMessageFactory.Create(messageNumber);
- Assert.IsNotNull(actual);
- Assert.AreEqual(typeof(PasswordChangeRequiredMessage), actual.GetType());
- }
- [TestMethod]
- public void HighestMessageNumberShouldCorrespondWithHighestSupportedMessageNumber()
- {
- var highestSupportMessageNumber = SshMessageFactory.AllMessages.Max(m => m.Number);
- Assert.AreEqual(highestSupportMessageNumber, SshMessageFactory.HighestMessageNumber);
- }
- [TestMethod]
- public void TotalMessageCountShouldBeTotalNumberOfSupportedMessages()
- {
- var totalNumberOfSupportedMessages = SshMessageFactory.AllMessages.Length;
- Assert.AreEqual(totalNumberOfSupportedMessages, SshMessageFactory.TotalMessageCount);
- }
- }
- }
|