Merge commit 'arthur/master'
parent
58f8c042f6
commit
a27352010a
|
@ -1,3 +1,5 @@
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
*.csproj
|
*.csproj
|
||||||
*.csproj.user
|
*.csproj.user
|
||||||
*.build
|
*.build
|
||||||
|
@ -24,4 +26,8 @@ OpenSim.build
|
||||||
OpenSim.sln
|
OpenSim.sln
|
||||||
Prebuild/Prebuild.build
|
Prebuild/Prebuild.build
|
||||||
Prebuild/Prebuild.sln
|
Prebuild/Prebuild.sln
|
||||||
|
bin/OpenSim.log
|
||||||
|
bin/Physics*
|
||||||
|
bin/Terrain*
|
||||||
|
bin/estate_settings.xml
|
||||||
*~
|
*~
|
||||||
|
|
|
@ -117,6 +117,13 @@ namespace OpenSim.Data.SQLite
|
||||||
|
|
||||||
setupUserFriendsCommands(daf, conn);
|
setupUserFriendsCommands(daf, conn);
|
||||||
daf.Fill(ds.Tables["userfriends"]);
|
daf.Fill(ds.Tables["userfriends"]);
|
||||||
|
|
||||||
|
string Unique = "create unique index friend_unique on userfriends (ownerID,friendID)";
|
||||||
|
using (SqliteCommand cmd = new SqliteCommand(Unique, g_conn))
|
||||||
|
{
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -210,8 +217,7 @@ namespace OpenSim.Data.SQLite
|
||||||
/// <param name="perms">permission flag</param>
|
/// <param name="perms">permission flag</param>
|
||||||
override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
|
override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
|
||||||
{
|
{
|
||||||
string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)";
|
string InsertFriends = "insert or ignore into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)";
|
||||||
|
|
||||||
using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn))
|
using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn))
|
||||||
{
|
{
|
||||||
cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
|
cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
|
||||||
|
@ -235,7 +241,7 @@ namespace OpenSim.Data.SQLite
|
||||||
/// <param name="friend">UUID of the friend to remove</param>
|
/// <param name="friend">UUID of the friend to remove</param>
|
||||||
override public void RemoveUserFriend(UUID friendlistowner, UUID friend)
|
override public void RemoveUserFriend(UUID friendlistowner, UUID friend)
|
||||||
{
|
{
|
||||||
string DeletePerms = "delete from friendlist where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)";
|
string DeletePerms = "delete from userfriends where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)";
|
||||||
using (SqliteCommand cmd = new SqliteCommand(DeletePerms, g_conn))
|
using (SqliteCommand cmd = new SqliteCommand(DeletePerms, g_conn))
|
||||||
{
|
{
|
||||||
cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
|
cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
|
||||||
|
@ -252,7 +258,7 @@ namespace OpenSim.Data.SQLite
|
||||||
/// <param name="perms">updated permission flag</param>
|
/// <param name="perms">updated permission flag</param>
|
||||||
override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
|
override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
|
||||||
{
|
{
|
||||||
string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID";
|
string UpdatePerms = "update userfriends set friendPerms=:perms where ownerID=:ownerID and friendID=:friendID";
|
||||||
using (SqliteCommand cmd = new SqliteCommand(UpdatePerms, g_conn))
|
using (SqliteCommand cmd = new SqliteCommand(UpdatePerms, g_conn))
|
||||||
{
|
{
|
||||||
cmd.Parameters.Add(new SqliteParameter(":perms", perms));
|
cmd.Parameters.Add(new SqliteParameter(":perms", perms));
|
||||||
|
|
|
@ -25,8 +25,11 @@
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// TODO: Money Transfer, Inventory Transfer and UpdateUserRegion once they exist
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NUnit.Framework.SyntaxHelpers;
|
using NUnit.Framework.SyntaxHelpers;
|
||||||
using OpenSim.Data;
|
using OpenSim.Data;
|
||||||
|
@ -38,10 +41,27 @@ namespace OpenSim.Data.Tests
|
||||||
{
|
{
|
||||||
public class BasicUserTest
|
public class BasicUserTest
|
||||||
{
|
{
|
||||||
public UserDataBase db;
|
//public UserDataBase db;
|
||||||
public UUID uuid1;
|
public IUserDataPlugin db;
|
||||||
public UUID uuid2;
|
public UUID user1;
|
||||||
public UUID uuid3;
|
public UUID user2;
|
||||||
|
public UUID user3;
|
||||||
|
public UUID webkey;
|
||||||
|
public UUID zero = UUID.Zero;
|
||||||
|
public Random random;
|
||||||
|
|
||||||
|
public UUID agent1;
|
||||||
|
public UUID agent2;
|
||||||
|
public UUID agent3;
|
||||||
|
|
||||||
|
public UUID region1;
|
||||||
|
|
||||||
|
public string fname1;
|
||||||
|
public string lname1;
|
||||||
|
public string fname2;
|
||||||
|
public string lname2;
|
||||||
|
public string fname3;
|
||||||
|
public string lname3;
|
||||||
|
|
||||||
public void SuperInit()
|
public void SuperInit()
|
||||||
{
|
{
|
||||||
|
@ -53,20 +73,231 @@ namespace OpenSim.Data.Tests
|
||||||
{
|
{
|
||||||
// I don't care, just leave log4net off
|
// I don't care, just leave log4net off
|
||||||
}
|
}
|
||||||
|
random = new Random();
|
||||||
uuid1 = UUID.Random();
|
user1 = UUID.Random();
|
||||||
uuid2 = UUID.Random();
|
user2 = UUID.Random();
|
||||||
uuid3 = UUID.Random();
|
user3 = UUID.Random();
|
||||||
|
agent1 = UUID.Random();
|
||||||
|
agent2 = UUID.Random();
|
||||||
|
agent3 = UUID.Random();
|
||||||
|
webkey = UUID.Random();
|
||||||
|
region1 = UUID.Random();
|
||||||
|
fname1 = RandomName(random);
|
||||||
|
lname1 = RandomName(random);
|
||||||
|
fname2 = RandomName(random);
|
||||||
|
lname2 = RandomName(random);
|
||||||
|
fname3 = RandomName(random);
|
||||||
|
lname3 = RandomName(random);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void T001_LoadEmpty()
|
public void T001_LoadEmpty()
|
||||||
{
|
{
|
||||||
Assert.That(db.GetUserByUUID(UUID.Zero), Is.Null);
|
Assert.That(db.GetUserByUUID(zero), Is.Null);
|
||||||
Assert.That(db.GetUserByUUID(uuid1), Is.Null);
|
Assert.That(db.GetUserByUUID(user1), Is.Null);
|
||||||
Assert.That(db.GetUserByUUID(uuid2), Is.Null);
|
Assert.That(db.GetUserByUUID(user2), Is.Null);
|
||||||
Assert.That(db.GetUserByUUID(uuid3), Is.Null);
|
Assert.That(db.GetUserByUUID(user3), Is.Null);
|
||||||
Assert.That(db.GetUserByUUID(UUID.Random()), Is.Null);
|
Assert.That(db.GetUserByUUID(UUID.Random()), Is.Null);
|
||||||
|
|
||||||
|
Assert.That(db.GetAgentByUUID(zero), Is.Null);
|
||||||
|
Assert.That(db.GetAgentByUUID(agent1), Is.Null);
|
||||||
|
Assert.That(db.GetAgentByUUID(agent2), Is.Null);
|
||||||
|
Assert.That(db.GetAgentByUUID(agent3), Is.Null);
|
||||||
|
Assert.That(db.GetAgentByUUID(UUID.Random()), Is.Null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T999_StillNull()
|
||||||
|
{
|
||||||
|
Assert.That(db.GetUserByUUID(zero), Is.Null);
|
||||||
|
Assert.That(db.GetAgentByUUID(zero), Is.Null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[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 u2 = NewUser(user2,fname2,lname2);
|
||||||
|
UserProfileData u3 = NewUser(user3,fname3,lname3);
|
||||||
|
//db.AddNewUserProfile(u0);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T011_FetchUserByName()
|
||||||
|
{
|
||||||
|
UserProfileData u1 = db.GetUserByName(fname1,lname1);
|
||||||
|
UserProfileData u2 = db.GetUserByName(fname2,lname2);
|
||||||
|
UserProfileData u3 = db.GetUserByName(fname3,lname3);
|
||||||
|
Assert.That(user1,Is.EqualTo(u1.ID)); //??
|
||||||
|
Assert.That(user2,Is.EqualTo(u2.ID));
|
||||||
|
Assert.That(user3,Is.EqualTo(u3.ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T012_UpdateUserProfile()
|
||||||
|
{
|
||||||
|
UserProfileData u1 = db.GetUserByUUID(user1);
|
||||||
|
Assert.That(fname1,Is.EqualTo(u1.FirstName));
|
||||||
|
u1.FirstName = "Ugly";
|
||||||
|
|
||||||
|
db.UpdateUserProfile(u1);
|
||||||
|
Assert.That("Ugly",Is.EqualTo(u1.FirstName));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T013_StoreUserWebKey()
|
||||||
|
{
|
||||||
|
UserProfileData u1 = db.GetUserByUUID(user1);
|
||||||
|
Assert.That(u1.WebLoginKey,Is.EqualTo(zero));
|
||||||
|
db.StoreWebLoginKey(user1, webkey);
|
||||||
|
u1 = db.GetUserByUUID(user1);
|
||||||
|
Assert.That(u1.WebLoginKey,Is.EqualTo(webkey));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T020_CreateAgent()
|
||||||
|
{
|
||||||
|
UserAgentData a1 = NewAgent(user1,agent1);
|
||||||
|
UserAgentData a2 = NewAgent(user2,agent2);
|
||||||
|
UserAgentData a3 = NewAgent(user3,agent3);
|
||||||
|
db.AddNewUserAgent(a1);
|
||||||
|
db.AddNewUserAgent(a2);
|
||||||
|
db.AddNewUserAgent(a3);
|
||||||
|
UserAgentData a1a = db.GetAgentByUUID(user1);
|
||||||
|
UserAgentData a2a = db.GetAgentByUUID(user2);
|
||||||
|
UserAgentData a3a = db.GetAgentByUUID(user3);
|
||||||
|
Assert.That(agent1,Is.EqualTo(a1a.SessionID));
|
||||||
|
Assert.That(user1,Is.EqualTo(a1a.ProfileID));
|
||||||
|
Assert.That(agent2,Is.EqualTo(a2a.SessionID));
|
||||||
|
Assert.That(user2,Is.EqualTo(a2a.ProfileID));
|
||||||
|
Assert.That(agent3,Is.EqualTo(a3a.SessionID));
|
||||||
|
Assert.That(user3,Is.EqualTo(a3a.ProfileID));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T021_FetchAgentByName()
|
||||||
|
{
|
||||||
|
String name3 = fname3 + " " + lname3;
|
||||||
|
UserAgentData a2 = db.GetAgentByName(fname2,lname2);
|
||||||
|
UserAgentData a3 = db.GetAgentByName(name3);
|
||||||
|
Assert.That(user2,Is.EqualTo(a2.ProfileID));
|
||||||
|
Assert.That(user3,Is.EqualTo(a3.ProfileID));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T030_CreateFriendList()
|
||||||
|
{
|
||||||
|
Dictionary<UUID, uint> perms = new Dictionary<UUID,uint>();
|
||||||
|
Dictionary<UUID, int> friends = new Dictionary<UUID,int>();
|
||||||
|
uint temp;
|
||||||
|
int tempu1, tempu2;
|
||||||
|
db.AddNewUserFriend(user1,user2, 1);
|
||||||
|
db.AddNewUserFriend(user1,user3, 2);
|
||||||
|
db.AddNewUserFriend(user1,user2, 4); //FAILS uniqueness in SQLite
|
||||||
|
List<FriendListItem> fl1 = db.GetUserFriendList(user1);
|
||||||
|
Assert.That(fl1.Count,Is.EqualTo(2));
|
||||||
|
perms.Add(user2,1);
|
||||||
|
perms.Add(user3,2);
|
||||||
|
for (int i = 0; i < fl1.Count; i++)
|
||||||
|
{
|
||||||
|
Assert.That(user1,Is.EqualTo(fl1[i].FriendListOwner));
|
||||||
|
// MySQL does not guarantee insertion order will be mantained
|
||||||
|
friends.Add(fl1[i].Friend,1);
|
||||||
|
temp = perms[fl1[i].Friend];
|
||||||
|
Assert.That(temp,Is.EqualTo(fl1[i].FriendPerms));
|
||||||
|
}
|
||||||
|
tempu1 = friends[user2];
|
||||||
|
tempu2 = friends[user3];
|
||||||
|
Assert.That(1,Is.EqualTo(tempu1) & Is.EqualTo(tempu2));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T031_RemoveUserFriend()
|
||||||
|
// user1 has 2 friends, user2 and user3.
|
||||||
|
{
|
||||||
|
List<FriendListItem> fl1 = db.GetUserFriendList(user1);
|
||||||
|
List<FriendListItem> fl2 = db.GetUserFriendList(user2);
|
||||||
|
|
||||||
|
Assert.That(fl1.Count,Is.EqualTo(2));
|
||||||
|
Assert.That(fl1[0].Friend,Is.EqualTo(user2) | Is.EqualTo(user3));
|
||||||
|
Assert.That(fl2[0].Friend,Is.EqualTo(user1));
|
||||||
|
db.RemoveUserFriend(user2, user1);
|
||||||
|
|
||||||
|
fl1 = db.GetUserFriendList(user1);
|
||||||
|
fl2 = db.GetUserFriendList(user2);
|
||||||
|
Assert.That(fl1.Count,Is.EqualTo(1));
|
||||||
|
Assert.That(fl1[0].Friend, Is.EqualTo(user3));
|
||||||
|
Assert.That(fl2, Is.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void T032_UpdateFriendPerms()
|
||||||
|
{
|
||||||
|
List<FriendListItem> fl1 = db.GetUserFriendList(user1);
|
||||||
|
Assert.That(fl1[0].FriendPerms,Is.EqualTo(2));
|
||||||
|
db.UpdateUserFriendPerms(user1, user3, 4);
|
||||||
|
|
||||||
|
fl1 = db.GetUserFriendList(user1);
|
||||||
|
Assert.That(fl1[0].FriendPerms,Is.EqualTo(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserProfileData NewUser(UUID id,string fname,string lname)
|
||||||
|
{
|
||||||
|
UserProfileData u = new UserProfileData();
|
||||||
|
u.ID = id;
|
||||||
|
u.FirstName = fname;
|
||||||
|
u.SurName = lname;
|
||||||
|
u.PasswordHash = "NOTAHASH";
|
||||||
|
u.PasswordSalt = "NOTSALT";
|
||||||
|
// MUST specify at least these 5 parameters or an exception is raised
|
||||||
|
|
||||||
|
return u;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserAgentData NewAgent(UUID user_profile, UUID agent)
|
||||||
|
{
|
||||||
|
UserAgentData a = new UserAgentData();
|
||||||
|
a.ProfileID = user_profile;
|
||||||
|
a.SessionID = agent;
|
||||||
|
a.SecureSessionID = UUID.Random();
|
||||||
|
a.AgentIP = RandomName(random);
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string RandomName(Random random)
|
||||||
|
{
|
||||||
|
StringBuilder name = new StringBuilder();
|
||||||
|
int size = random.Next(5,12);
|
||||||
|
char ch ;
|
||||||
|
for(int i=0; i<size; i++)
|
||||||
|
{
|
||||||
|
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))) ;
|
||||||
|
name.Append(ch);
|
||||||
|
}
|
||||||
|
return name.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void PrintFriendsList(List<FriendListItem> fl)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Friends {0} and {1} and {2}", agent1, agent2, agent3);
|
||||||
|
Console.WriteLine("List owner is {0}",fl[0].FriendListOwner);
|
||||||
|
for (int i = 0; i < fl.Count; i++)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Friend {0}",fl[i].Friend);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue