From fa8c0d7683d567743f5138813f08a502aff8e3d0 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Wed, 15 Oct 2008 18:15:43 +0000
Subject: - Makes MySQL reject inserting UUID 0 - Makes SQLite mimick MySQL
default behavior on first and last name already on db: it does not insert
the new record. - Added tests for UUID 0 and for new UUID with existing
first and last name.
---
OpenSim/Data/MySQL/MySQLUserData.cs | 5 +++++
OpenSim/Data/SQLite/SQLiteUserData.cs | 35 +++++++++++++++++++++++++++++++++++
OpenSim/Data/Tests/BasicUserTest.cs | 24 +++++++++++++++++++-----
3 files changed, 59 insertions(+), 5 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs
index c668d56..3a088cf 100644
--- a/OpenSim/Data/MySQL/MySQLUserData.cs
+++ b/OpenSim/Data/MySQL/MySQLUserData.cs
@@ -582,6 +582,11 @@ namespace OpenSim.Data.MySQL
/// The user profile to create
public override void AddNewUserProfile(UserProfileData user)
{
+ UUID zero = UUID.Zero;
+ if (user.ID == zero)
+ {
+ return;
+ }
MySQLSuperManager dbm = GetLockedConnection();
try
diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs
index 420b6e5..448ef85 100644
--- a/OpenSim/Data/SQLite/SQLiteUserData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserData.cs
@@ -481,6 +481,37 @@ namespace OpenSim.Data.SQLite
}
+ private bool ExistsFirstLastName(String fname, String lname)
+ {
+ string FindUser = "select * from users where (username=:username and surname=:surname)";
+ using (SqliteCommand cmd = new SqliteCommand(FindUser, g_conn))
+ {
+ cmd.Parameters.Add(new SqliteParameter(":username", fname));
+ cmd.Parameters.Add(new SqliteParameter(":surname", lname));
+ try
+ {
+ using (IDataReader reader = cmd.ExecuteReader())
+ {
+ if(reader.Read())
+ {
+ reader.Close();
+ return true;
+ }
+ else
+ {
+ reader.Close();
+ return false;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ m_log.Error("[USER DB]: Exception searching for user's first and last name: " + ex.ToString());
+ return false;
+ }
+ }
+ }
+
///
/// Creates a new user profile
///
@@ -488,6 +519,10 @@ namespace OpenSim.Data.SQLite
override public void AddNewUserProfile(UserProfileData user)
{
DataTable users = ds.Tables["users"];
+ UUID zero = UUID.Zero;
+ if (ExistsFirstLastName(user.FirstName, user.SurName) || user.ID == zero)
+ return;
+
lock (ds)
{
DataRow row = users.Rows.Find(Util.ToRawUuidString(user.ID));
diff --git a/OpenSim/Data/Tests/BasicUserTest.cs b/OpenSim/Data/Tests/BasicUserTest.cs
index 24cb215..dc8ccc3 100644
--- a/OpenSim/Data/Tests/BasicUserTest.cs
+++ b/OpenSim/Data/Tests/BasicUserTest.cs
@@ -45,6 +45,7 @@ namespace OpenSim.Data.Tests
public UUID user1;
public UUID user2;
public UUID user3;
+ public UUID user4;
public UUID webkey;
public UUID zero = UUID.Zero;
public Random random;
@@ -55,6 +56,8 @@ namespace OpenSim.Data.Tests
public UUID region1;
+ public string fname0;
+ public string lname0;
public string fname1;
public string lname1;
public string fname2;
@@ -76,11 +79,14 @@ namespace OpenSim.Data.Tests
user1 = UUID.Random();
user2 = UUID.Random();
user3 = UUID.Random();
+ user4 = UUID.Random();
agent1 = UUID.Random();
agent2 = UUID.Random();
agent3 = UUID.Random();
webkey = UUID.Random();
region1 = UUID.Random();
+ fname0 = RandomName(random);
+ lname0 = RandomName(random);
fname1 = RandomName(random);
lname1 = RandomName(random);
fname2 = RandomName(random);
@@ -115,19 +121,16 @@ namespace OpenSim.Data.Tests
[Test]
public void T010_CreateUser()
{
- UserProfileData u1 = NewUser(user1,fname1,lname1); // Must first and last names be unique?
- //UserProfileData u0 = NewUser(zero,fname1,lname1); // Zero causes some weird behaviors
+ UserProfileData u1 = NewUser(user1,fname1,lname1);
UserProfileData u2 = NewUser(user2,fname2,lname2);
UserProfileData u3 = NewUser(user3,fname3,lname3);
- //db.AddNewUserProfile(u0);
+ Console.WriteLine("Users are {0} {1} {2}",user1,user2,user3);
db.AddNewUserProfile(u1);
db.AddNewUserProfile(u2);
db.AddNewUserProfile(u3);
- //UserProfileData u1z = db.GetUserByUUID(zero);
UserProfileData u1a = db.GetUserByUUID(user1);
UserProfileData u2a = db.GetUserByUUID(user2);
UserProfileData u3a = db.GetUserByUUID(user3);
- //Assert.That(zero,Is.EqualTo(u1z.ID));
Assert.That(user1,Is.EqualTo(u1a.ID));
Assert.That(user2,Is.EqualTo(u2a.ID));
Assert.That(user3,Is.EqualTo(u3a.ID));
@@ -164,6 +167,17 @@ namespace OpenSim.Data.Tests
u1 = db.GetUserByUUID(user1);
Assert.That(u1.WebLoginKey,Is.EqualTo(webkey));
}
+
+ [Test]
+ public void T014_ExpectedNullReferenceReturns()
+ {
+ UserProfileData u0 = NewUser(zero,fname0,lname0);
+ UserProfileData u4 = NewUser(user4,fname2,lname2);
+ db.AddNewUserProfile(u0);
+ db.AddNewUserProfile(u4);
+ Assert.That(db.GetUserByUUID(zero),Is.Null);
+ Assert.That(db.GetUserByUUID(user4),Is.Null);
+ }
[Test]
public void T020_CreateAgent()
--
cgit v1.1