From d770bea2912e9fe02644183dce424193fe87ab7d Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 12 Jan 2009 15:33:56 +0000 Subject: Enhanced LoginServiceTests to test for authentication and response Expanded TestUserDataPlugin to cover new methods From: Arthur Rodrigo S Valadares --- .../Communications/Tests/LoginServiceTests.cs | 215 +++++++++++++++++++-- 1 file changed, 197 insertions(+), 18 deletions(-) (limited to 'OpenSim/Framework/Communications/Tests/LoginServiceTests.cs') diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 6c18d06..8111add 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -44,35 +44,35 @@ namespace OpenSim.Framework.Communications.Tests /// Test the login service. For now, most of this will be done through the LocalLoginService as LoginService /// is abstract /// - [TestFixture] + [TestFixture] public class LoginServiceTests - { + { /// /// Test the normal response to a login. Does not test authentication. - /// + /// [Test] - public void TestNormalLoginResponse() + public void T010_NormalLoginResponse() { //log4net.Config.XmlConfigurator.Configure(); - + string firstName = "Timmy"; string lastName = "Mallet"; string regionExternalName = "localhost"; IPEndPoint capsEndPoint = new IPEndPoint(IPAddress.Loopback, 9123); - CommunicationsManager commsManager + CommunicationsManager commsManager = new TestCommunicationsManager(new OpenSim.Framework.NetworkServersInfo(42, 43)); - + commsManager.GridService.RegisterRegion( new RegionInfo(42, 43, capsEndPoint, regionExternalName)); commsManager.GridService.RegionLoginsEnabled = true; - - LoginService loginService + + LoginService loginService = new LocalLoginService( - (UserManagerBase)commsManager.UserService, "Hello folks", commsManager.InterServiceInventoryService, - (LocalBackEndServices)commsManager.GridService, + (UserManagerBase)commsManager.UserService, "Hello folks", commsManager.InterServiceInventoryService, + (LocalBackEndServices)commsManager.GridService, commsManager.NetworkServersInfo, false, new LibraryRootFolder(String.Empty)); - + Hashtable loginParams = new Hashtable(); loginParams["first"] = firstName; loginParams["last"] = lastName; @@ -85,20 +85,199 @@ namespace OpenSim.Framework.Communications.Tests XmlRpcResponse response = loginService.XmlRpcLoginMethod(request); Hashtable responseData = (Hashtable)response.Value; - + + Assert.That(responseData["first_name"], Is.EqualTo(firstName)); + Assert.That(responseData["last_name"], Is.EqualTo(lastName)); + Assert.That( + responseData["circuit_code"], Is.GreaterThanOrEqualTo(0) & Is.LessThanOrEqualTo(System.Int32.MaxValue)); + + Regex capsSeedPattern + = new Regex("^http://" + + regionExternalName + + ":9000/CAPS/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}0000/$"); + + Assert.That(capsSeedPattern.IsMatch((string)responseData["seed_capability"]), Is.True); + } + + [Test] + public void T011_Auth_Login() + { + string firstName = "Adam"; + string lastName = "West"; + string regionExternalName = "localhost"; + IPEndPoint capsEndPoint = new IPEndPoint(IPAddress.Loopback, 9123); + + CommunicationsManager commsManager + = new TestCommunicationsManager(new OpenSim.Framework.NetworkServersInfo(42, 43)); + + commsManager.GridService.RegisterRegion( + new RegionInfo(42, 43, capsEndPoint, regionExternalName)); + commsManager.GridService.RegionLoginsEnabled = true; + + LocalUserServices lus = (LocalUserServices)commsManager.UserService; + + lus.AddUser(firstName,lastName,"boingboing","abc@ftw.com",42,43); + + + LoginService loginService + = new LocalLoginService( + (UserManagerBase)lus, "Hello folks", commsManager.InterServiceInventoryService, + (LocalBackEndServices)commsManager.GridService, + commsManager.NetworkServersInfo, true, new LibraryRootFolder(String.Empty)); + + // TODO: Not check inventory part of response yet. // TODO: Not checking all of login response thoroughly yet. - + + // 1) Test for positive authentication + + Hashtable loginParams = new Hashtable(); + loginParams["first"] = firstName; + loginParams["last"] = lastName; + loginParams["passwd"] = "boingboing"; + + ArrayList sendParams = new ArrayList(); + sendParams.Add(loginParams); + + XmlRpcRequest request = new XmlRpcRequest("login_to_simulator", sendParams); + + XmlRpcResponse response = loginService.XmlRpcLoginMethod(request); + Hashtable responseData = (Hashtable)response.Value; + + UserProfileData uprof = lus.GetUserProfile(firstName,lastName); + + UserAgentData uagent = uprof.CurrentAgent; + Assert.That(uagent,Is.Not.Null); + + Assert.That(responseData["first_name"], Is.Not.Null); Assert.That(responseData["first_name"], Is.EqualTo(firstName)); Assert.That(responseData["last_name"], Is.EqualTo(lastName)); + Assert.That(responseData["agent_id"], Is.EqualTo(uagent.ProfileID.ToString())); + Assert.That(responseData["session_id"], Is.EqualTo(uagent.SessionID.ToString())); + Assert.That(responseData["secure_session_id"], Is.EqualTo(uagent.SecureSessionID.ToString())); + ArrayList invlibroot = (ArrayList) responseData["inventory-lib-root"]; + Hashtable invlibroothash = (Hashtable) invlibroot[0]; + Assert.That(invlibroothash["folder_id"],Is.EqualTo("00000112-000f-0000-0000-000100bba000")); Assert.That( responseData["circuit_code"], Is.GreaterThanOrEqualTo(0) & Is.LessThanOrEqualTo(System.Int32.MaxValue)); + Assert.That(responseData["message"], Is.EqualTo("Hello folks")); + Assert.That(responseData["buddy-list"], Is.Empty); + Assert.That(responseData["start_location"], Is.EqualTo("last")); + + Regex capsSeedPattern + = new Regex("^http://" + + regionExternalName + + ":9000/CAPS/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}0000/$"); + + Assert.That(capsSeedPattern.IsMatch((string)responseData["seed_capability"]), Is.True); + + // 1.1) Test for budddies! + lus.AddUser("Friend","Number1","boingboing","abc@ftw.com",42,43); + lus.AddUser("Friend","Number2","boingboing","abc@ftw.com",42,43); + + UserProfileData friend1 = lus.GetUserProfile("Friend","Number1"); + UserProfileData friend2 = lus.GetUserProfile("Friend","Number2"); + lus.AddNewUserFriend(friend1.ID,uprof.ID,1); + lus.AddNewUserFriend(friend1.ID,friend2.ID,2); + + loginParams = new Hashtable(); + loginParams["first"] = "Friend"; + loginParams["last"] = "Number1"; + loginParams["passwd"] = "boingboing"; + + sendParams = new ArrayList(); + sendParams.Add(loginParams); + + request = new XmlRpcRequest("login_to_simulator", sendParams); + + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + + ArrayList friendslist = (ArrayList) responseData["buddy-list"]; + + Assert.That(friendslist,Is.Not.Null); + + + Hashtable buddy1 = (Hashtable) friendslist[0]; + Hashtable buddy2 = (Hashtable) friendslist[1]; + Assert.That(friendslist.Count, Is.EqualTo(2)); + Assert.That(uprof.ID.ToString(), Is.EqualTo(buddy1["buddy_id"]) | Is.EqualTo(buddy2["buddy_id"])); + Assert.That(friend2.ID.ToString(), Is.EqualTo(buddy1["buddy_id"]) | Is.EqualTo(buddy2["buddy_id"])); + + // 2) Test for negative authentication + // + string error_auth_message = "Could not authenticate your avatar. Please check your username and password, and check the grid if problems persist."; + string error_xml_message = "Error connecting to grid. Could not percieve credentials from login XML."; + string error_already_logged = "You appear to be already logged in. " + + "If this is not the case please wait for your session to timeout. " + + "If this takes longer than a few minutes please contact the grid owner. " + + "Please wait 5 minutes if you are going to connect to a region nearby to the region you were at previously."; + string error_region_unavailable = "The region you are attempting to log into is not responding. Please select another region and try again."; + // 2.1) Test for wrong user name + loginParams = new Hashtable(); + loginParams["first"] = lastName; + loginParams["last"] = firstName; + loginParams["passwd"] = "boingboing"; + + sendParams = new ArrayList(); + sendParams.Add(loginParams); + + request = new XmlRpcRequest("login_to_simulator", sendParams); + + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + Assert.That(responseData["message"], Is.EqualTo(error_auth_message)); + + // 2.2) Test for wrong password + loginParams = new Hashtable(); + loginParams["first"] = "Friend"; + loginParams["last"] = "Number2"; + loginParams["passwd"] = "boing"; + + sendParams = new ArrayList(); + sendParams.Add(loginParams); + + request = new XmlRpcRequest("login_to_simulator", sendParams); + + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + Assert.That(responseData["message"], Is.EqualTo(error_auth_message)); + + // 2.3) Bad XML + loginParams = new Hashtable(); + loginParams["first"] = "Friend"; + loginParams["banana"] = "Banana"; + loginParams["passwd"] = "boingboing"; + + sendParams = new ArrayList(); + sendParams.Add(loginParams); + + request = new XmlRpcRequest("login_to_simulator", sendParams); + + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + Assert.That(responseData["message"], Is.EqualTo(error_xml_message)); - Regex capsSeedPattern - = new Regex("^http://" + regionExternalName + ":" + NetworkServersInfo.DefaultHttpListenerPort - + "/CAPS/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}0000/$"); + // 2.4) Already logged in and sucessfull post login + loginParams = new Hashtable(); + loginParams["first"] = "Adam"; + loginParams["last"] = "West"; + loginParams["passwd"] = "boingboing"; + + sendParams = new ArrayList(); + sendParams.Add(loginParams); + + request = new XmlRpcRequest("login_to_simulator", sendParams); + + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + Assert.That(responseData["message"], Is.EqualTo(error_already_logged)); + + request = new XmlRpcRequest("login_to_simulator", sendParams); - Assert.That(capsSeedPattern.IsMatch((string)responseData["seed_capability"]), Is.True); + response = loginService.XmlRpcLoginMethod(request); + responseData = (Hashtable)response.Value; + Assert.That(responseData["message"], Is.EqualTo("Hello folks")); } } } -- cgit v1.1