From 923a57a91fa9629a844da6cd59ca8e9d2b0fbcde Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Mon, 11 May 2015 19:55:23 -0700
Subject: Added tests for UserAccountService in Robust. In the process fixed a
 couple of bugs in the network connectors. For some reason the robust-bound
 code had a CreateUser method, while the client-bound code had no such method.
 I assume someone is extending the client-side code with their own connectors.
 I added the missing method, but didn't add it to the service interface.

---
 .../UserAccounts/UserAccountServerPostHandler.cs   |   3 +-
 .../UserAccounts/UserAccountServicesConnector.cs   |  35 ++++-
 .../Tests/Clients/UserAccounts/OpenSim.Server.ini  |  33 -----
 .../Clients/UserAccounts/UserAccountsClient.cs     | 144 ---------------------
 .../Clients/UserAccounts/UserAccountsClient.cs     |  81 ++++++++++++
 5 files changed, 115 insertions(+), 181 deletions(-)
 delete mode 100644 OpenSim/Tests/Clients/UserAccounts/OpenSim.Server.ini
 delete mode 100644 OpenSim/Tests/Clients/UserAccounts/UserAccountsClient.cs
 create mode 100644 OpenSim/Tests/Robust/Clients/UserAccounts/UserAccountsClient.cs

(limited to 'OpenSim')

diff --git a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
index a77d78e..21eb790 100644
--- a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
@@ -257,8 +257,7 @@ namespace OpenSim.Server.Handlers.UserAccounts
 
         byte[] CreateUser(Dictionary<string, object> request)
         {
-            if (!
-                request.ContainsKey("FirstName")
+            if (! request.ContainsKey("FirstName")
                     && request.ContainsKey("LastName")
                     && request.ContainsKey("Password"))
                 return FailureResult();
diff --git a/OpenSim/Services/Connectors/UserAccounts/UserAccountServicesConnector.cs b/OpenSim/Services/Connectors/UserAccounts/UserAccountServicesConnector.cs
index 3f61d9a..560e6c4 100644
--- a/OpenSim/Services/Connectors/UserAccounts/UserAccountServicesConnector.cs
+++ b/OpenSim/Services/Connectors/UserAccounts/UserAccountServicesConnector.cs
@@ -215,9 +215,39 @@ namespace OpenSim.Services.Connectors
                 sendData[kvp.Key] = kvp.Value.ToString();
             }
 
-            return SendAndGetBoolReply(sendData);
+            if (SendAndGetReply(sendData) != null)
+                return true;
+            else
+                return false;
         }
 
+        /// <summary>
+        /// Create user remotely. Note this this is not part of the IUserAccountsService
+        /// </summary>
+        /// <param name="first"></param>
+        /// <param name="last"></param>
+        /// <param name="password"></param>
+        /// <param name="email"></param>
+        /// <param name="scopeID"></param>
+        /// <returns></returns>
+        public virtual UserAccount CreateUser(string first, string last, string password, string email, UUID scopeID)
+        {
+            Dictionary<string, object> sendData = new Dictionary<string, object>();
+            //sendData["SCOPEID"] = scopeID.ToString();
+            sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+            sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+            sendData["METHOD"] = "createuser";
+
+            sendData["FirstName"] = first;
+            sendData["LastName"] = last;
+            sendData["Password"] = password;
+            if (!string.IsNullOrEmpty(email))
+                sendData["Email"] = first;
+            sendData["ScopeID"] = scopeID.ToString();
+
+            return SendAndGetReply(sendData);
+        }
+        
         private UserAccount SendAndGetReply(Dictionary<string, object> sendData)
         {
             string reply = string.Empty;
@@ -260,7 +290,7 @@ namespace OpenSim.Services.Connectors
         {
             string reqString = ServerUtils.BuildQueryString(sendData);
             string uri = m_ServerURI + "/accounts";
-            // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
+            //m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
             try
             {
                 string reply = SynchronousRestFormsRequester.MakeRequest("POST",
@@ -269,6 +299,7 @@ namespace OpenSim.Services.Connectors
                         m_Auth);
                 if (reply != string.Empty)
                 {
+                    //m_log.DebugFormat("[ACCOUNTS CONNECTOR]: reply = {0}", reply);
                     Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
 
                     if (replyData.ContainsKey("result"))
diff --git a/OpenSim/Tests/Clients/UserAccounts/OpenSim.Server.ini b/OpenSim/Tests/Clients/UserAccounts/OpenSim.Server.ini
deleted file mode 100644
index 453e17e..0000000
--- a/OpenSim/Tests/Clients/UserAccounts/OpenSim.Server.ini
+++ /dev/null
@@ -1,33 +0,0 @@
-; * Run a ROBUST server shell like this, from bin:
-; * $ OpenSim.Server.exe -inifile ../OpenSim/Tests/Clients/Presence/OpenSim.Server.ini
-; *
-; * Then run this client like this, from bin:
-; * $ OpenSim.Tests.Clients.UserAccountClient.exe
-; *
-; *
-
-[Startup]
-ServiceConnectors = "OpenSim.Server.Handlers.dll:UserAccountServiceConnector"
-
-; * This is common for all services, it's the network setup for the entire
-; * server instance
-; *
-[Network]
-port = 8003
-
-; * The following are for the remote console
-; * They have no effect for the local or basic console types
-; * Leave commented to diable logins to the console
-;ConsoleUser = Test
-;ConsolePass = secret
-
-; * As an example, the below configuration precisely mimicks the legacy
-; * asset server. It is read by the asset IN connector (defined above)
-; * and it then loads the OUT connector (a local database module). That,
-; * in turn, reads the asset loader and database connection information
-; *
-[UserAccountService]
-	LocalServiceModule = "OpenSim.Services.UserAccountService.dll:UserAccountService"
-    StorageProvider = "OpenSim.Data.MySQL.dll"
-    ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=opensim123;Old Guids=true;"
-
diff --git a/OpenSim/Tests/Clients/UserAccounts/UserAccountsClient.cs b/OpenSim/Tests/Clients/UserAccounts/UserAccountsClient.cs
deleted file mode 100644
index 1e0a35b..0000000
--- a/OpenSim/Tests/Clients/UserAccounts/UserAccountsClient.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in the
- *       documentation and/or other materials provided with the distribution.
- *     * Neither the name of the OpenSimulator Project nor the
- *       names of its contributors may be used to endorse or promote products
- *       derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-
-using OpenMetaverse;
-using log4net;
-using log4net.Appender;
-using log4net.Layout;
-
-using OpenSim.Framework;
-using OpenSim.Services.Interfaces;
-using OpenSim.Services.Connectors;
-
-namespace OpenSim.Tests.Clients.PresenceClient
-{
-    public class UserAccountsClient
-    {
-        private static readonly ILog m_log =
-                LogManager.GetLogger(
-                MethodBase.GetCurrentMethod().DeclaringType);
-        
-        public static void Main(string[] args)
-        {
-            ConsoleAppender consoleAppender = new ConsoleAppender();
-            consoleAppender.Layout =
-                new PatternLayout("%date [%thread] %-5level %logger [%property{NDC}] - %message%newline");
-            log4net.Config.BasicConfigurator.Configure(consoleAppender);
-
-            string serverURI = "http://127.0.0.1:8003";
-            UserAccountServicesConnector m_Connector = new UserAccountServicesConnector(serverURI);
-
-            UUID user1 = UUID.Random();
-            string first = "Completely";
-            string last = "Clueless";
-            string email = "foo@bar.com";
-
-            //UserAccount account = new UserAccount(user1);
-            //account.ScopeID = UUID.Zero;
-            //account.FirstName = first;
-            //account.LastName = last;
-            //account.Email = email;
-            //account.ServiceURLs = new Dictionary<string, object>();
-            //account.ServiceURLs.Add("InventoryServerURI", "http://cnn.com");
-            //account.ServiceURLs.Add("AssetServerURI", "http://cnn.com");
-
-            //bool success = m_Connector.StoreUserAccount(account);
-            //if (success)
-            //    m_log.InfoFormat("[USER CLIENT]: Successfully created account for user {0} {1}", account.FirstName, account.LastName);
-            //else
-            //    m_log.InfoFormat("[USER CLIENT]: failed to create user {0} {1}", account.FirstName, account.LastName);
-
-            //System.Console.WriteLine("\n");
-
-            //account = m_Connector.GetUserAccount(UUID.Zero, user1);
-            //if (account == null)
-            //    m_log.InfoFormat("[USER CLIENT]: Unable to retrieve accouny by UUID for {0}", user1);
-            //else
-            //{
-            //    m_log.InfoFormat("[USER CLIENT]: Account retrieved correctly: userID={0}; FirstName={1}; LastName={2}; Email={3}",
-            //                      account.PrincipalID, account.FirstName, account.LastName, account.Email);
-            //    foreach (KeyValuePair<string, object> kvp in account.ServiceURLs)
-            //        m_log.DebugFormat("\t {0} -> {1}", kvp.Key, kvp.Value);
-            //}
-
-            //System.Console.WriteLine("\n");
-
-            UserAccount account = m_Connector.GetUserAccount(UUID.Zero, first, last);
-            if (account == null)
-                m_log.InfoFormat("[USER CLIENT]: Unable to retrieve accouny by name ");
-            else
-            {
-                m_log.InfoFormat("[USER CLIENT]: Account retrieved correctly: userID={0}; FirstName={1}; LastName={2}; Email={3}",
-                                  account.PrincipalID, account.FirstName, account.LastName, account.Email);
-                foreach (KeyValuePair<string, object> kvp in account.ServiceURLs)
-                    m_log.DebugFormat("\t {0} -> {1}", kvp.Key, kvp.Value);
-            }
-
-            System.Console.WriteLine("\n");
-            account = m_Connector.GetUserAccount(UUID.Zero, email);
-            if (account == null)
-                m_log.InfoFormat("[USER CLIENT]: Unable to retrieve accouny by email");
-            else
-            {
-                m_log.InfoFormat("[USER CLIENT]: Account retrieved correctly: userID={0}; FirstName={1}; LastName={2}; Email={3}",
-                                  account.PrincipalID, account.FirstName, account.LastName, account.Email);
-                foreach (KeyValuePair<string, object> kvp in account.ServiceURLs)
-                    m_log.DebugFormat("\t {0} -> {1}", kvp.Key, kvp.Value);
-            }
-
-            System.Console.WriteLine("\n");
-            account = m_Connector.GetUserAccount(UUID.Zero, user1);
-            if (account == null)
-                m_log.InfoFormat("[USER CLIENT]: Unable to retrieve accouny by UUID for {0}", user1);
-            else
-            {
-                m_log.InfoFormat("[USER CLIENT]: Account retrieved correctly: userID={0}; FirstName={1}; LastName={2}; Email={3}",
-                                  account.PrincipalID, account.FirstName, account.LastName, account.Email);
-                foreach (KeyValuePair<string, object> kvp in account.ServiceURLs)
-                    m_log.DebugFormat("\t {0} -> {1}", kvp.Key, kvp.Value);
-            }
-
-            System.Console.WriteLine("\n");
-            account = m_Connector.GetUserAccount(UUID.Zero, "DoesNot", "Exist");
-            if (account == null)
-                m_log.InfoFormat("[USER CLIENT]: Unable to retrieve account 'DoesNot Exist'");
-            else
-            {
-                m_log.InfoFormat("[USER CLIENT]: Account 'DoesNot Exist' retrieved correctly. REALLY??? userID={0}; FirstName={1}; LastName={2}; Email={3}",
-                                  account.PrincipalID, account.FirstName, account.LastName, account.Email);
-                foreach (KeyValuePair<string, object> kvp in account.ServiceURLs)
-                    m_log.DebugFormat("\t {0} -> {1}", kvp.Key, kvp.Value);
-            }
-        }
-
-    }
-}
diff --git a/OpenSim/Tests/Robust/Clients/UserAccounts/UserAccountsClient.cs b/OpenSim/Tests/Robust/Clients/UserAccounts/UserAccountsClient.cs
new file mode 100644
index 0000000..2f92123
--- /dev/null
+++ b/OpenSim/Tests/Robust/Clients/UserAccounts/UserAccountsClient.cs
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the OpenSimulator Project nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+
+using OpenMetaverse;
+using NUnit.Framework;
+
+using OpenSim.Framework;
+using OpenSim.Services.Interfaces;
+using OpenSim.Services.Connectors;
+
+namespace Robust.Tests
+{
+    [TestFixture]
+    public class UserAccountsClient
+    {
+        [Test]
+        public void UserAccounts_001()
+        {
+            UserAccountServicesConnector m_Connector = new UserAccountServicesConnector(DemonServer.Address);
+
+            string first = "Completely";
+            string last = "Clueless";
+            string email = "foo@bar.com";
+
+            UserAccount account = m_Connector.CreateUser(first, last, "123", email, UUID.Zero);
+            Assert.IsNotNull(account, "Failed to create account " + first + " " + last);
+            UUID user1 = account.PrincipalID;
+
+            account = m_Connector.GetUserAccount(UUID.Zero, user1);
+            Assert.NotNull(account, "Failed to retrieve account for user id " + user1);
+            Assert.AreEqual(account.FirstName, first, "First name does not match");
+            Assert.AreEqual(account.LastName, last, "Last name does not match");
+
+            account = m_Connector.GetUserAccount(UUID.Zero, first, last);
+            Assert.IsNotNull(account, "Failed to retrieve account for user " + first + " " + last);
+            Assert.AreEqual(account.FirstName, first, "First name does not match (bis)");
+            Assert.AreEqual(account.LastName, last, "Last name does not match (bis)");
+
+            account.Email = "user@example.com";
+            bool success = m_Connector.StoreUserAccount(account);
+            Assert.IsTrue(success, "Failed to store account");
+
+            account = m_Connector.GetUserAccount(UUID.Zero, user1);
+            Assert.NotNull(account, "Failed to retrieve account for user id " + user1);
+            Assert.AreEqual(account.Email, "user@example.com", "Incorrect email");
+
+            account = m_Connector.GetUserAccount(UUID.Zero, "DoesNot", "Exist");
+            Assert.IsNull(account, "Account DoesNot Exit must not be there");
+        }
+
+    }
+}
-- 
cgit v1.1