utccredentials.pas 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. unit utccredentials;
  2. {$mode ObjFPC}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, system.credentials, fpcunit, testregistry;
  6. Type
  7. { TTestCredentials }
  8. TTestCredentials = class(TTestcase)
  9. private
  10. FSuccess : Boolean;
  11. FUser,FPass,FDom : String;
  12. FEventMethod,
  13. FEventMethod2 : TMethod;
  14. procedure DoLoginEvent(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
  15. procedure DoLoginEvent2(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
  16. procedure ReceiveEvent(Sender: TObject; const Username, Password, Domain: string; var Handled: Boolean);
  17. Public
  18. procedure AssertCredentials(const Msg, aUser, aPassword, aDomain: String);
  19. Procedure Setup; override;
  20. Procedure TearDown; override;
  21. Published
  22. Procedure TestHookup;
  23. Procedure TestAddHandler;
  24. Procedure TestRemoveHandler;
  25. Procedure TestGetLoginCredentialEvent;
  26. Procedure TestGetloginCredentials;
  27. procedure TestGetloginCredentials2;
  28. procedure TestGetloginCredentials3;
  29. end;
  30. implementation
  31. { TTestCredentials }
  32. procedure TTestCredentials.DoLoginEvent(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
  33. begin
  34. CallBack(Sender,FUser,FPass,FDom,Success);
  35. end;
  36. procedure TTestCredentials.DoLoginEvent2(Sender: TObject; Callback: TLoginCredentialService.TLoginEvent; var Success: Boolean);
  37. begin
  38. CallBack(Sender,FUser+'2',FPass+'2',FDom+'2',Success);
  39. end;
  40. procedure TTestCredentials.AssertCredentials(const Msg, aUser, aPassword, aDomain: String);
  41. begin
  42. AssertEquals(Msg+': User',FUser,aUser);
  43. AssertEquals(Msg+': Password',FPass,aPassword);
  44. AssertEquals(Msg+': Domain',FDom,aDomain);
  45. end;
  46. procedure TTestCredentials.Setup;
  47. begin
  48. inherited Setup;
  49. TLoginCredentialService.Clear;
  50. FEventMethod2:=TMethod(@Self.DoLoginEvent2);
  51. FEventMethod:=TMethod(@Self.DoLoginEvent);
  52. FUser:='U';
  53. FPass:='P';
  54. FDom:='D';
  55. FSuccess:=True;
  56. end;
  57. procedure TTestCredentials.TearDown;
  58. begin
  59. inherited TearDown;
  60. end;
  61. procedure TTestCredentials.TestHookup;
  62. begin
  63. AssertEquals('handler count',0,TLoginCredentialService.HandlerCount);
  64. AssertEquals('Default user','U',FUser);
  65. AssertEquals('Default pwd','P',FPass);
  66. AssertEquals('Default Dom','D',FDom);
  67. end;
  68. procedure TTestCredentials.TestAddHandler;
  69. begin
  70. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  71. AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
  72. TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent);
  73. AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
  74. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  75. AssertEquals('handler count c',2,TLoginCredentialService.HandlerCount);
  76. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent2);
  77. AssertEquals('handler count d',3,TLoginCredentialService.HandlerCount);
  78. end;
  79. procedure TTestCredentials.TestRemoveHandler;
  80. begin
  81. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  82. AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
  83. TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent);
  84. AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
  85. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  86. AssertEquals('handler count c',2,TLoginCredentialService.HandlerCount);
  87. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent2);
  88. AssertEquals('handler count d',3,TLoginCredentialService.HandlerCount);
  89. TLoginCredentialService.UnRegisterLoginHandler('x',@DoLoginEvent2);
  90. AssertEquals('handler count e',2,TLoginCredentialService.HandlerCount);
  91. TLoginCredentialService.UnRegisterLoginHandler('z',@DoLoginEvent2);
  92. AssertEquals('handler count f',2,TLoginCredentialService.HandlerCount);
  93. TLoginCredentialService.UnRegisterLoginHandler('y',@DoLoginEvent);
  94. AssertEquals('handler count g',1,TLoginCredentialService.HandlerCount);
  95. TLoginCredentialService.UnRegisterLoginHandler('x',@DoLoginEvent);
  96. AssertEquals('handler count h',0,TLoginCredentialService.HandlerCount);
  97. end;
  98. procedure TTestCredentials.TestGetLoginCredentialEvent;
  99. var
  100. E : TLoginCredentialService.TLoginCredentialEvent;
  101. ME : TMethod;
  102. begin
  103. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  104. AssertEquals('handler count a',1,TLoginCredentialService.HandlerCount);
  105. TLoginCredentialService.RegisterLoginHandler('y',@DoLoginEvent2);
  106. AssertEquals('handler count b',2,TLoginCredentialService.HandlerCount);
  107. E:=TLoginCredentialService.GetLoginCredentialEvent('y');
  108. ME:=TMethod(E);
  109. AssertTrue('Same method',(ME.Code=FEventMethod2.Code) and (ME.Data=FEventMethod2.Data));
  110. E:=TLoginCredentialService.GetLoginCredentialEvent('x');
  111. ME:=TMethod(E);
  112. AssertTrue('Same method',(ME.Code=FEventMethod.Code) and (ME.Data=FEventMethod.Data));
  113. E:=TLoginCredentialService.GetLoginCredentialEvent('z');
  114. AssertTrue('Same method',E=Nil);
  115. end;
  116. procedure TTestCredentials.TestGetloginCredentials;
  117. var
  118. U,P,D : String;
  119. begin
  120. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  121. AssertTrue('Getcreds',TLoginCredentialService.GetLoginCredentials('x',U,P,D));
  122. AssertCredentials('Login',U,P,D);
  123. end;
  124. procedure TTestCredentials.ReceiveEvent(Sender: TObject; const Username, Password, Domain: string; var Handled: Boolean) ;
  125. begin
  126. Handled:=FSuccess;
  127. AssertSame('Correct sender ',Sender,Self);
  128. if FSuccess then
  129. AssertCredentials('Login',UserName,Password,Domain);
  130. end;
  131. procedure TTestCredentials.TestGetloginCredentials2;
  132. var
  133. U,P,D : String;
  134. Res : Boolean;
  135. Function DoReceive(const Username, Password, Domain: string): Boolean;
  136. begin
  137. Result:=Res;
  138. if Res then
  139. begin
  140. U:=userName;
  141. P:=Password;
  142. D:=Domain;
  143. end;
  144. end;
  145. begin
  146. Res:=True;
  147. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  148. AssertTrue('Getcreds success',TLoginCredentialService.GetLoginCredentials('x',@DoReceive));
  149. AssertCredentials('Login',U,P,D);
  150. Res:=False;
  151. AssertFalse('Getcreds fail',TLoginCredentialService.GetLoginCredentials('x',@DoReceive));
  152. end;
  153. procedure TTestCredentials.TestGetloginCredentials3;
  154. begin
  155. TLoginCredentialService.RegisterLoginHandler('x',@DoLoginEvent);
  156. AssertTrue('Getcreds success',TLoginCredentialService.GetLoginCredentials('x',Self,@ReceiveEvent));
  157. FSuccess:=False;
  158. AssertFalse('Getcreds fail',TLoginCredentialService.GetLoginCredentials('x',Self,@ReceiveEvent));
  159. end;
  160. initialization
  161. RegisterTest(TTestCredentials);
  162. end.