ClientAuthenticationTest_Success_MultiList_PostponePartialAccessAuthenticationMethod.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System.Collections.Generic;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Moq;
  4. namespace Renci.SshNet.Tests.Classes
  5. {
  6. [TestClass]
  7. public class ClientAuthenticationTest_Success_MultiList_PostponePartialAccessAuthenticationMethod : ClientAuthenticationTestBase
  8. {
  9. private int _partialSuccessLimit;
  10. private ClientAuthentication _clientAuthentication;
  11. protected override void SetupData()
  12. {
  13. _partialSuccessLimit = 3;
  14. }
  15. protected override void SetupMocks()
  16. {
  17. var seq = new MockSequence();
  18. _ = SessionMock.InSequence(seq)
  19. .Setup(p => p.RegisterMessage("SSH_MSG_USERAUTH_FAILURE"));
  20. _ = SessionMock.InSequence(seq)
  21. .Setup(p => p.RegisterMessage("SSH_MSG_USERAUTH_SUCCESS"));
  22. _ = SessionMock.InSequence(seq)
  23. .Setup(p => p.RegisterMessage("SSH_MSG_USERAUTH_BANNER"));
  24. _ = ConnectionInfoMock.InSequence(seq)
  25. .Setup(p => p.CreateNoneAuthenticationMethod())
  26. .Returns(NoneAuthenticationMethodMock.Object);
  27. _ = NoneAuthenticationMethodMock.InSequence(seq)
  28. .Setup(p => p.Authenticate(SessionMock.Object))
  29. .Returns(AuthenticationResult.Failure);
  30. _ = ConnectionInfoMock.InSequence(seq)
  31. .Setup(p => p.AuthenticationMethods)
  32. .Returns(new List<IAuthenticationMethod>
  33. {
  34. KeyboardInteractiveAuthenticationMethodMock.Object,
  35. PasswordAuthenticationMethodMock.Object,
  36. PublicKeyAuthenticationMethodMock.Object
  37. });
  38. _ = NoneAuthenticationMethodMock.InSequence(seq)
  39. .Setup(p => p.AllowedAuthentications)
  40. .Returns(new[] { "password" });
  41. _ = KeyboardInteractiveAuthenticationMethodMock.InSequence(seq)
  42. .Setup(p => p.Name)
  43. .Returns("keyboard-interactive");
  44. _ = PasswordAuthenticationMethodMock.InSequence(seq)
  45. .Setup(p => p.Name)
  46. .Returns("password");
  47. _ = PublicKeyAuthenticationMethodMock.InSequence(seq)
  48. .Setup(p => p.Name)
  49. .Returns("publickey");
  50. _ = PasswordAuthenticationMethodMock.InSequence(seq)
  51. .Setup(p => p.Authenticate(SessionMock.Object))
  52. .Returns(AuthenticationResult.PartialSuccess);
  53. _ = PasswordAuthenticationMethodMock.InSequence(seq)
  54. .Setup(p => p.AllowedAuthentications)
  55. .Returns(new[] {"password", "publickey"});
  56. _ = KeyboardInteractiveAuthenticationMethodMock.InSequence(seq)
  57. .Setup(p => p.Name)
  58. .Returns("keyboard-interactive");
  59. _ = PasswordAuthenticationMethodMock.InSequence(seq)
  60. .Setup(p => p.Name)
  61. .Returns("password");
  62. _ = PublicKeyAuthenticationMethodMock.InSequence(seq)
  63. .Setup(p => p.Name)
  64. .Returns("publickey");
  65. _ = PublicKeyAuthenticationMethodMock.InSequence(seq)
  66. .Setup(p => p.Authenticate(SessionMock.Object))
  67. .Returns(AuthenticationResult.Failure);
  68. _ = PublicKeyAuthenticationMethodMock.InSequence(seq)
  69. .Setup(p => p.Name)
  70. .Returns("publickey");
  71. _ = PasswordAuthenticationMethodMock.InSequence(seq)
  72. .Setup(p => p.Authenticate(SessionMock.Object))
  73. .Returns(AuthenticationResult.Success);
  74. _ = SessionMock.InSequence(seq)
  75. .Setup(p => p.UnRegisterMessage("SSH_MSG_USERAUTH_FAILURE"));
  76. _ = SessionMock.InSequence(seq)
  77. .Setup(p => p.UnRegisterMessage("SSH_MSG_USERAUTH_SUCCESS"));
  78. _ = SessionMock.InSequence(seq)
  79. .Setup(p => p.UnRegisterMessage("SSH_MSG_USERAUTH_BANNER"));
  80. }
  81. protected override void Arrange()
  82. {
  83. base.Arrange();
  84. _clientAuthentication = new ClientAuthentication(_partialSuccessLimit);
  85. }
  86. protected override void Act()
  87. {
  88. _clientAuthentication.Authenticate(ConnectionInfoMock.Object, SessionMock.Object);
  89. }
  90. }
  91. }