aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/SQLite/SQLiteUserData.cs14
-rw-r--r--OpenSim/Data/Tests/BasicUserTest.cs257
2 files changed, 254 insertions, 17 deletions
diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs
index f847ba9..4beae07 100644
--- a/OpenSim/Data/SQLite/SQLiteUserData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserData.cs
@@ -117,6 +117,13 @@ namespace OpenSim.Data.SQLite
117 117
118 setupUserFriendsCommands(daf, conn); 118 setupUserFriendsCommands(daf, conn);
119 daf.Fill(ds.Tables["userfriends"]); 119 daf.Fill(ds.Tables["userfriends"]);
120
121 string Unique = "create unique index friend_unique on userfriends (ownerID,friendID)";
122 using (SqliteCommand cmd = new SqliteCommand(Unique, g_conn))
123 {
124 cmd.ExecuteNonQuery();
125 }
126
120 } 127 }
121 128
122 return; 129 return;
@@ -210,8 +217,7 @@ namespace OpenSim.Data.SQLite
210 /// <param name="perms">permission flag</param> 217 /// <param name="perms">permission flag</param>
211 override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) 218 override public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
212 { 219 {
213 string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)"; 220 string InsertFriends = "insert or ignore into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)";
214
215 using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn)) 221 using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn))
216 { 222 {
217 cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); 223 cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
@@ -235,7 +241,7 @@ namespace OpenSim.Data.SQLite
235 /// <param name="friend">UUID of the friend to remove</param> 241 /// <param name="friend">UUID of the friend to remove</param>
236 override public void RemoveUserFriend(UUID friendlistowner, UUID friend) 242 override public void RemoveUserFriend(UUID friendlistowner, UUID friend)
237 { 243 {
238 string DeletePerms = "delete from friendlist where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)"; 244 string DeletePerms = "delete from userfriends where (ownerID=:ownerID and friendID=:friendID) or (ownerID=:friendID and friendID=:ownerID)";
239 using (SqliteCommand cmd = new SqliteCommand(DeletePerms, g_conn)) 245 using (SqliteCommand cmd = new SqliteCommand(DeletePerms, g_conn))
240 { 246 {
241 cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString())); 247 cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.ToString()));
@@ -252,7 +258,7 @@ namespace OpenSim.Data.SQLite
252 /// <param name="perms">updated permission flag</param> 258 /// <param name="perms">updated permission flag</param>
253 override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) 259 override public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
254 { 260 {
255 string UpdatePerms = "update friendlist set perms=:perms where ownerID=:ownerID and friendID=:friendID"; 261 string UpdatePerms = "update userfriends set friendPerms=:perms where ownerID=:ownerID and friendID=:friendID";
256 using (SqliteCommand cmd = new SqliteCommand(UpdatePerms, g_conn)) 262 using (SqliteCommand cmd = new SqliteCommand(UpdatePerms, g_conn))
257 { 263 {
258 cmd.Parameters.Add(new SqliteParameter(":perms", perms)); 264 cmd.Parameters.Add(new SqliteParameter(":perms", perms));
diff --git a/OpenSim/Data/Tests/BasicUserTest.cs b/OpenSim/Data/Tests/BasicUserTest.cs
index 9587d86..ef62a7d 100644
--- a/OpenSim/Data/Tests/BasicUserTest.cs
+++ b/OpenSim/Data/Tests/BasicUserTest.cs
@@ -25,8 +25,11 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28// TODO: Money Transfer, Inventory Transfer and UpdateUserRegion once they exist
29
28using System; 30using System;
29using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Text;
30using NUnit.Framework; 33using NUnit.Framework;
31using NUnit.Framework.SyntaxHelpers; 34using NUnit.Framework.SyntaxHelpers;
32using OpenSim.Data; 35using OpenSim.Data;
@@ -38,10 +41,27 @@ namespace OpenSim.Data.Tests
38{ 41{
39 public class BasicUserTest 42 public class BasicUserTest
40 { 43 {
41 public UserDataBase db; 44 //public UserDataBase db;
42 public UUID uuid1; 45 public IUserDataPlugin db;
43 public UUID uuid2; 46 public UUID user1;
44 public UUID uuid3; 47 public UUID user2;
48 public UUID user3;
49 public UUID webkey;
50 public UUID zero = UUID.Zero;
51 public Random random;
52
53 public UUID agent1;
54 public UUID agent2;
55 public UUID agent3;
56
57 public UUID region1;
58
59 public string fname1;
60 public string lname1;
61 public string fname2;
62 public string lname2;
63 public string fname3;
64 public string lname3;
45 65
46 public void SuperInit() 66 public void SuperInit()
47 { 67 {
@@ -53,20 +73,231 @@ namespace OpenSim.Data.Tests
53 { 73 {
54 // I don't care, just leave log4net off 74 // I don't care, just leave log4net off
55 } 75 }
56 76 random = new Random();
57 uuid1 = UUID.Random(); 77 user1 = UUID.Random();
58 uuid2 = UUID.Random(); 78 user2 = UUID.Random();
59 uuid3 = UUID.Random(); 79 user3 = UUID.Random();
80 agent1 = UUID.Random();
81 agent2 = UUID.Random();
82 agent3 = UUID.Random();
83 webkey = UUID.Random();
84 region1 = UUID.Random();
85 fname1 = RandomName(random);
86 lname1 = RandomName(random);
87 fname2 = RandomName(random);
88 lname2 = RandomName(random);
89 fname3 = RandomName(random);
90 lname3 = RandomName(random);
60 } 91 }
61 92
62 [Test] 93 [Test]
63 public void T001_LoadEmpty() 94 public void T001_LoadEmpty()
64 { 95 {
65 Assert.That(db.GetUserByUUID(UUID.Zero), Is.Null); 96 Assert.That(db.GetUserByUUID(zero), Is.Null);
66 Assert.That(db.GetUserByUUID(uuid1), Is.Null); 97 Assert.That(db.GetUserByUUID(user1), Is.Null);
67 Assert.That(db.GetUserByUUID(uuid2), Is.Null); 98 Assert.That(db.GetUserByUUID(user2), Is.Null);
68 Assert.That(db.GetUserByUUID(uuid3), Is.Null); 99 Assert.That(db.GetUserByUUID(user3), Is.Null);
69 Assert.That(db.GetUserByUUID(UUID.Random()), Is.Null); 100 Assert.That(db.GetUserByUUID(UUID.Random()), Is.Null);
101
102 Assert.That(db.GetAgentByUUID(zero), Is.Null);
103 Assert.That(db.GetAgentByUUID(agent1), Is.Null);
104 Assert.That(db.GetAgentByUUID(agent2), Is.Null);
105 Assert.That(db.GetAgentByUUID(agent3), Is.Null);
106 Assert.That(db.GetAgentByUUID(UUID.Random()), Is.Null);
107 }
108
109 [Test]
110 public void T999_StillNull()
111 {
112 Assert.That(db.GetUserByUUID(zero), Is.Null);
113 Assert.That(db.GetAgentByUUID(zero), Is.Null);
114 }
115
116 [Test]
117 public void T010_CreateUser()
118 {
119 UserProfileData u1 = NewUser(user1,fname1,lname1); // Must first and last names be unique?
120 //UserProfileData u0 = NewUser(zero,fname1,lname1); // Zero causes some weird behaviors
121 UserProfileData u2 = NewUser(user2,fname2,lname2);
122 UserProfileData u3 = NewUser(user3,fname3,lname3);
123 //db.AddNewUserProfile(u0);
124 db.AddNewUserProfile(u1);
125 db.AddNewUserProfile(u2);
126 db.AddNewUserProfile(u3);
127 //UserProfileData u1z = db.GetUserByUUID(zero);
128 UserProfileData u1a = db.GetUserByUUID(user1);
129 UserProfileData u2a = db.GetUserByUUID(user2);
130 UserProfileData u3a = db.GetUserByUUID(user3);
131 //Assert.That(zero,Is.EqualTo(u1z.ID));
132 Assert.That(user1,Is.EqualTo(u1a.ID));
133 Assert.That(user2,Is.EqualTo(u2a.ID));
134 Assert.That(user3,Is.EqualTo(u3a.ID));
135 }
136
137 [Test]
138 public void T011_FetchUserByName()
139 {
140 UserProfileData u1 = db.GetUserByName(fname1,lname1);
141 UserProfileData u2 = db.GetUserByName(fname2,lname2);
142 UserProfileData u3 = db.GetUserByName(fname3,lname3);
143 Assert.That(user1,Is.EqualTo(u1.ID)); //??
144 Assert.That(user2,Is.EqualTo(u2.ID));
145 Assert.That(user3,Is.EqualTo(u3.ID));
146 }
147
148 [Test]
149 public void T012_UpdateUserProfile()
150 {
151 UserProfileData u1 = db.GetUserByUUID(user1);
152 Assert.That(fname1,Is.EqualTo(u1.FirstName));
153 u1.FirstName = "Ugly";
154
155 db.UpdateUserProfile(u1);
156 Assert.That("Ugly",Is.EqualTo(u1.FirstName));
157 }
158
159 [Test]
160 public void T013_StoreUserWebKey()
161 {
162 UserProfileData u1 = db.GetUserByUUID(user1);
163 Assert.That(u1.WebLoginKey,Is.EqualTo(zero));
164 db.StoreWebLoginKey(user1, webkey);
165 u1 = db.GetUserByUUID(user1);
166 Assert.That(u1.WebLoginKey,Is.EqualTo(webkey));
167 }
168
169 [Test]
170 public void T020_CreateAgent()
171 {
172 UserAgentData a1 = NewAgent(user1,agent1);
173 UserAgentData a2 = NewAgent(user2,agent2);
174 UserAgentData a3 = NewAgent(user3,agent3);
175 db.AddNewUserAgent(a1);
176 db.AddNewUserAgent(a2);
177 db.AddNewUserAgent(a3);
178 UserAgentData a1a = db.GetAgentByUUID(user1);
179 UserAgentData a2a = db.GetAgentByUUID(user2);
180 UserAgentData a3a = db.GetAgentByUUID(user3);
181 Assert.That(agent1,Is.EqualTo(a1a.SessionID));
182 Assert.That(user1,Is.EqualTo(a1a.ProfileID));
183 Assert.That(agent2,Is.EqualTo(a2a.SessionID));
184 Assert.That(user2,Is.EqualTo(a2a.ProfileID));
185 Assert.That(agent3,Is.EqualTo(a3a.SessionID));
186 Assert.That(user3,Is.EqualTo(a3a.ProfileID));
187 }
188
189 [Test]
190 public void T021_FetchAgentByName()
191 {
192 String name3 = fname3 + " " + lname3;
193 UserAgentData a2 = db.GetAgentByName(fname2,lname2);
194 UserAgentData a3 = db.GetAgentByName(name3);
195 Assert.That(user2,Is.EqualTo(a2.ProfileID));
196 Assert.That(user3,Is.EqualTo(a3.ProfileID));
197 }
198
199 [Test]
200 public void T030_CreateFriendList()
201 {
202 Dictionary<UUID, uint> perms = new Dictionary<UUID,uint>();
203 Dictionary<UUID, int> friends = new Dictionary<UUID,int>();
204 uint temp;
205 int tempu1, tempu2;
206 db.AddNewUserFriend(user1,user2, 1);
207 db.AddNewUserFriend(user1,user3, 2);
208 db.AddNewUserFriend(user1,user2, 4); //FAILS uniqueness in SQLite
209 List<FriendListItem> fl1 = db.GetUserFriendList(user1);
210 Assert.That(fl1.Count,Is.EqualTo(2));
211 perms.Add(user2,1);
212 perms.Add(user3,2);
213 for (int i = 0; i < fl1.Count; i++)
214 {
215 Assert.That(user1,Is.EqualTo(fl1[i].FriendListOwner));
216 // MySQL does not guarantee insertion order will be mantained
217 friends.Add(fl1[i].Friend,1);
218 temp = perms[fl1[i].Friend];
219 Assert.That(temp,Is.EqualTo(fl1[i].FriendPerms));
220 }
221 tempu1 = friends[user2];
222 tempu2 = friends[user3];
223 Assert.That(1,Is.EqualTo(tempu1) & Is.EqualTo(tempu2));
224 }
225
226 [Test]
227 public void T031_RemoveUserFriend()
228 // user1 has 2 friends, user2 and user3.
229 {
230 List<FriendListItem> fl1 = db.GetUserFriendList(user1);
231 List<FriendListItem> fl2 = db.GetUserFriendList(user2);
232
233 Assert.That(fl1.Count,Is.EqualTo(2));
234 Assert.That(fl1[0].Friend,Is.EqualTo(user2) | Is.EqualTo(user3));
235 Assert.That(fl2[0].Friend,Is.EqualTo(user1));
236 db.RemoveUserFriend(user2, user1);
237
238 fl1 = db.GetUserFriendList(user1);
239 fl2 = db.GetUserFriendList(user2);
240 Assert.That(fl1.Count,Is.EqualTo(1));
241 Assert.That(fl1[0].Friend, Is.EqualTo(user3));
242 Assert.That(fl2, Is.Empty);
243 }
244
245 [Test]
246 public void T032_UpdateFriendPerms()
247 {
248 List<FriendListItem> fl1 = db.GetUserFriendList(user1);
249 Assert.That(fl1[0].FriendPerms,Is.EqualTo(2));
250 db.UpdateUserFriendPerms(user1, user3, 4);
251
252 fl1 = db.GetUserFriendList(user1);
253 Assert.That(fl1[0].FriendPerms,Is.EqualTo(4));
254 }
255
256 public UserProfileData NewUser(UUID id,string fname,string lname)
257 {
258 UserProfileData u = new UserProfileData();
259 u.ID = id;
260 u.FirstName = fname;
261 u.SurName = lname;
262 u.PasswordHash = "NOTAHASH";
263 u.PasswordSalt = "NOTSALT";
264 // MUST specify at least these 5 parameters or an exception is raised
265
266 return u;
267 }
268
269 public UserAgentData NewAgent(UUID user_profile, UUID agent)
270 {
271 UserAgentData a = new UserAgentData();
272 a.ProfileID = user_profile;
273 a.SessionID = agent;
274 a.SecureSessionID = UUID.Random();
275 a.AgentIP = RandomName(random);
276 return a;
277 }
278
279 public static string RandomName(Random random)
280 {
281 StringBuilder name = new StringBuilder();
282 int size = random.Next(5,12);
283 char ch ;
284 for(int i=0; i<size; i++)
285 {
286 ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65))) ;
287 name.Append(ch);
288 }
289 return name.ToString();
290 }
291
292 public void PrintFriendsList(List<FriendListItem> fl)
293 {
294 Console.WriteLine("Friends {0} and {1} and {2}", agent1, agent2, agent3);
295 Console.WriteLine("List owner is {0}",fl[0].FriendListOwner);
296 for (int i = 0; i < fl.Count; i++)
297 {
298 Console.WriteLine("Friend {0}",fl[i].Friend);
299 }
300
70 } 301 }
71 } 302 }
72} \ No newline at end of file 303}