Simplify TestLoadIarV0_1AbsentUsers() to use common IAR test setup. Make static dictionaries on NullUserAccountData instance instead to stop user accounts being carried over between tests
parent
743a6b0da5
commit
8a2360bf81
|
@ -28,6 +28,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Data;
|
using OpenSim.Data;
|
||||||
|
@ -36,12 +39,17 @@ namespace OpenSim.Data.Null
|
||||||
{
|
{
|
||||||
public class NullUserAccountData : IUserAccountData
|
public class NullUserAccountData : IUserAccountData
|
||||||
{
|
{
|
||||||
private static Dictionary<UUID, UserAccountData> m_DataByUUID = new Dictionary<UUID, UserAccountData>();
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private static Dictionary<string, UserAccountData> m_DataByName = new Dictionary<string, UserAccountData>();
|
|
||||||
private static Dictionary<string, UserAccountData> m_DataByEmail = new Dictionary<string, UserAccountData>();
|
private Dictionary<UUID, UserAccountData> m_DataByUUID = new Dictionary<UUID, UserAccountData>();
|
||||||
|
private Dictionary<string, UserAccountData> m_DataByName = new Dictionary<string, UserAccountData>();
|
||||||
|
private Dictionary<string, UserAccountData> m_DataByEmail = new Dictionary<string, UserAccountData>();
|
||||||
|
|
||||||
public NullUserAccountData(string connectionString, string realm)
|
public NullUserAccountData(string connectionString, string realm)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NULL USER ACCOUNT DATA]: Initializing new NullUserAccountData with connectionString [{0}], realm [{1}]",
|
||||||
|
// connectionString, realm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -54,6 +62,15 @@ namespace OpenSim.Data.Null
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public UserAccountData[] Get(string[] fields, string[] values)
|
public UserAccountData[] Get(string[] fields, string[] values)
|
||||||
{
|
{
|
||||||
|
// if (m_log.IsDebugEnabled)
|
||||||
|
// {
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NULL USER ACCOUNT DATA]: Called Get with fields [{0}], values [{1}]",
|
||||||
|
// string.Join(", ", fields), string.Join(", ", values));
|
||||||
|
// }
|
||||||
|
|
||||||
|
UserAccountData[] userAccounts = new UserAccountData[0];
|
||||||
|
|
||||||
List<string> fieldsLst = new List<string>(fields);
|
List<string> fieldsLst = new List<string>(fields);
|
||||||
if (fieldsLst.Contains("PrincipalID"))
|
if (fieldsLst.Contains("PrincipalID"))
|
||||||
{
|
{
|
||||||
|
@ -61,24 +78,35 @@ namespace OpenSim.Data.Null
|
||||||
UUID id = UUID.Zero;
|
UUID id = UUID.Zero;
|
||||||
if (UUID.TryParse(values[i], out id))
|
if (UUID.TryParse(values[i], out id))
|
||||||
if (m_DataByUUID.ContainsKey(id))
|
if (m_DataByUUID.ContainsKey(id))
|
||||||
return new UserAccountData[] { m_DataByUUID[id] };
|
userAccounts = new UserAccountData[] { m_DataByUUID[id] };
|
||||||
}
|
}
|
||||||
if (fieldsLst.Contains("FirstName") && fieldsLst.Contains("LastName"))
|
else if (fieldsLst.Contains("FirstName") && fieldsLst.Contains("LastName"))
|
||||||
{
|
{
|
||||||
int findex = fieldsLst.IndexOf("FirstName");
|
int findex = fieldsLst.IndexOf("FirstName");
|
||||||
int lindex = fieldsLst.IndexOf("LastName");
|
int lindex = fieldsLst.IndexOf("LastName");
|
||||||
if (m_DataByName.ContainsKey(values[findex] + " " + values[lindex]))
|
if (m_DataByName.ContainsKey(values[findex] + " " + values[lindex]))
|
||||||
return new UserAccountData[] { m_DataByName[values[findex] + " " + values[lindex]] };
|
{
|
||||||
|
userAccounts = new UserAccountData[] { m_DataByName[values[findex] + " " + values[lindex]] };
|
||||||
}
|
}
|
||||||
if (fieldsLst.Contains("Email"))
|
}
|
||||||
|
else if (fieldsLst.Contains("Email"))
|
||||||
{
|
{
|
||||||
int i = fieldsLst.IndexOf("Email");
|
int i = fieldsLst.IndexOf("Email");
|
||||||
if (m_DataByEmail.ContainsKey(values[i]))
|
if (m_DataByEmail.ContainsKey(values[i]))
|
||||||
return new UserAccountData[] { m_DataByEmail[values[i]] };
|
userAccounts = new UserAccountData[] { m_DataByEmail[values[i]] };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fail
|
// if (m_log.IsDebugEnabled)
|
||||||
return new UserAccountData[0];
|
// {
|
||||||
|
// StringBuilder sb = new StringBuilder();
|
||||||
|
// foreach (UserAccountData uad in userAccounts)
|
||||||
|
// sb.AppendFormat("({0} {1} {2}) ", uad.FirstName, uad.LastName, uad.PrincipalID);
|
||||||
|
//
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NULL USER ACCOUNT DATA]: Returning {0} user accounts out of {1}: [{2}]", userAccounts.Length, m_DataByName.Count, sb);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return userAccounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Store(UserAccountData data)
|
public bool Store(UserAccountData data)
|
||||||
|
@ -86,16 +114,25 @@ namespace OpenSim.Data.Null
|
||||||
if (data == null)
|
if (data == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
m_log.DebugFormat(
|
||||||
|
"[NULL USER ACCOUNT DATA]: Storing user account {0} {1} {2} {3}",
|
||||||
|
data.FirstName, data.LastName, data.PrincipalID, this.GetHashCode());
|
||||||
|
|
||||||
m_DataByUUID[data.PrincipalID] = data;
|
m_DataByUUID[data.PrincipalID] = data;
|
||||||
m_DataByName[data.FirstName + " " + data.LastName] = data;
|
m_DataByName[data.FirstName + " " + data.LastName] = data;
|
||||||
if (data.Data.ContainsKey("Email") && data.Data["Email"] != null && data.Data["Email"] != string.Empty)
|
if (data.Data.ContainsKey("Email") && data.Data["Email"] != null && data.Data["Email"] != string.Empty)
|
||||||
m_DataByEmail[data.Data["Email"]] = data;
|
m_DataByEmail[data.Data["Email"]] = data;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("m_DataByUUID count is {0}, m_DataByName count is {1}", m_DataByUUID.Count, m_DataByName.Count);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserAccountData[] GetUsers(UUID scopeID, string query)
|
public UserAccountData[] GetUsers(UUID scopeID, string query)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[NULL USER ACCOUNT DATA]: Called GetUsers with scope [{0}], query [{1}]", scopeID, query);
|
||||||
|
|
||||||
string[] words = query.Split(new char[] { ' ' });
|
string[] words = query.Split(new char[] { ' ' });
|
||||||
|
|
||||||
for (int i = 0; i < words.Length; i++)
|
for (int i = 0; i < words.Length; i++)
|
||||||
|
|
|
@ -66,6 +66,8 @@ namespace OpenSim.Framework.Serialization
|
||||||
UserAccount account = userService.GetUserAccount(UUID.Zero, userId);
|
UserAccount account = userService.GetUserAccount(UUID.Zero, userId);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
return MakeOspa(account.FirstName, account.LastName);
|
return MakeOspa(account.FirstName, account.LastName);
|
||||||
|
// else
|
||||||
|
// m_log.WarnFormat("[OSP RESOLVER]: No user account for {0}", userId);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -77,6 +79,8 @@ namespace OpenSim.Framework.Serialization
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static string MakeOspa(string firstName, string lastName)
|
public static string MakeOspa(string firstName, string lastName)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[OSP RESOLVER]: Making OSPA for {0} {1}", firstName, lastName);
|
||||||
|
|
||||||
return
|
return
|
||||||
OSPA_PREFIX + OSPA_NAME_KEY + OSPA_PAIR_SEPARATOR + firstName + OSPA_NAME_VALUE_SEPARATOR + lastName;
|
OSPA_PREFIX + OSPA_NAME_KEY + OSPA_PAIR_SEPARATOR + firstName + OSPA_NAME_VALUE_SEPARATOR + lastName;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +101,10 @@ namespace OpenSim.Framework.Serialization
|
||||||
public static UUID ResolveOspa(string ospa, IUserAccountService userService)
|
public static UUID ResolveOspa(string ospa, IUserAccountService userService)
|
||||||
{
|
{
|
||||||
if (!ospa.StartsWith(OSPA_PREFIX))
|
if (!ospa.StartsWith(OSPA_PREFIX))
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[OSP RESOLVER]: ResolveOspa() got unrecognized format [{0}]", ospa);
|
||||||
return UUID.Zero;
|
return UUID.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
// m_log.DebugFormat("[OSP RESOLVER]: Resolving {0}", ospa);
|
// m_log.DebugFormat("[OSP RESOLVER]: Resolving {0}", ospa);
|
||||||
|
|
||||||
|
@ -161,7 +168,17 @@ namespace OpenSim.Framework.Serialization
|
||||||
|
|
||||||
UserAccount account = userService.GetUserAccount(UUID.Zero, firstName, lastName);
|
UserAccount account = userService.GetUserAccount(UUID.Zero, firstName, lastName);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[OSP RESOLVER]: Found user account with uuid {0} for {1} {2}",
|
||||||
|
// account.PrincipalID, firstName, lastName);
|
||||||
|
|
||||||
return account.PrincipalID;
|
return account.PrincipalID;
|
||||||
|
}
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// m_log.DebugFormat("[OSP RESOLVER]: No resolved OSPA user account for {0}", name);
|
||||||
|
// }
|
||||||
|
|
||||||
// XXX: Disable temporary user profile creation for now as implementation is incomplete - justincc
|
// XXX: Disable temporary user profile creation for now as implementation is incomplete - justincc
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -400,6 +400,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.UserAccountService);
|
UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.UserAccountService);
|
||||||
if (UUID.Zero != ospResolvedId) // The user exists in this grid
|
if (UUID.Zero != ospResolvedId) // The user exists in this grid
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[INVENTORY ARCHIVER]: Found creator {0} via OSPA resolution", ospResolvedId);
|
||||||
|
|
||||||
item.CreatorIdAsUuid = ospResolvedId;
|
item.CreatorIdAsUuid = ospResolvedId;
|
||||||
|
|
||||||
// XXX: For now, don't preserve the OSPA in the creator id (which actually gets persisted to the
|
// XXX: For now, don't preserve the OSPA in the creator id (which actually gets persisted to the
|
||||||
|
|
|
@ -97,6 +97,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
|
|
||||||
protected void ConstructDefaultIarBytesForTestLoad()
|
protected void ConstructDefaultIarBytesForTestLoad()
|
||||||
{
|
{
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
|
||||||
|
UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire");
|
||||||
|
|
||||||
string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random());
|
string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(m_item1Name, UUID.Random());
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
|
@ -106,14 +111,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
item1.Name = m_item1Name;
|
item1.Name = m_item1Name;
|
||||||
item1.AssetID = UUID.Random();
|
item1.AssetID = UUID.Random();
|
||||||
item1.GroupID = UUID.Random();
|
item1.GroupID = UUID.Random();
|
||||||
//item1.CreatorId = OspResolver.MakeOspa(m_ua2.FirstName, m_ua2.LastName);
|
item1.CreatorIdAsUuid = m_ua2.PrincipalID;
|
||||||
//item1.CreatorId = userUuid.ToString();
|
|
||||||
item1.CreatorId = m_ua2.PrincipalID.ToString();
|
|
||||||
item1.Owner = UUID.Zero;
|
item1.Owner = UUID.Zero;
|
||||||
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
|
|
||||||
UserProfileTestUtils.CreateUserWithInventory(scene, m_ua2, "hampshire");
|
|
||||||
|
|
||||||
string item1FileName
|
string item1FileName
|
||||||
= string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName);
|
= string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName);
|
||||||
tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1, new Dictionary<string, object>(), scene.UserAccountService));
|
tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1, new Dictionary<string, object>(), scene.UserAccountService));
|
||||||
|
@ -390,7 +390,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
public void TestLoadIarV0_1ExistingUsers()
|
public void TestLoadIarV0_1ExistingUsers()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
//log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
|
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
|
||||||
|
@ -414,9 +414,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
// Assert.That(
|
// Assert.That(
|
||||||
// foundItem1.CreatorId, Is.EqualTo(item1.CreatorId),
|
// foundItem1.CreatorId, Is.EqualTo(item1.CreatorId),
|
||||||
// "Loaded item non-uuid creator doesn't match original");
|
// "Loaded item non-uuid creator doesn't match original");
|
||||||
Assert.That(
|
// Assert.That(
|
||||||
foundItem1.CreatorId, Is.EqualTo(m_ua2.PrincipalID.ToString()),
|
// foundItem1.CreatorId, Is.EqualTo(m_ua2.PrincipalID.ToString()),
|
||||||
"Loaded item non-uuid creator doesn't match original");
|
// "Loaded item non-uuid creator doesn't match original");
|
||||||
|
|
||||||
Assert.That(
|
Assert.That(
|
||||||
foundItem1.CreatorIdAsUuid, Is.EqualTo(m_ua2.PrincipalID),
|
foundItem1.CreatorIdAsUuid, Is.EqualTo(m_ua2.PrincipalID),
|
||||||
|
@ -529,64 +529,29 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
|
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
|
||||||
/// embedded creators do not exist in the system
|
/// embedded creators do not exist in the system
|
||||||
/// </summary>
|
/// </summary>
|
||||||
///
|
|
||||||
/// This may possibly one day get overtaken by the as yet incomplete temporary profiles feature
|
|
||||||
/// (as tested in the a later commented out test)
|
|
||||||
/// This test is currently disabled
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLoadIarV0_1AbsentUsers()
|
public void TestLoadIarV0_1AbsentUsers()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
//log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
string userFirstName = "Charlie";
|
|
||||||
string userLastName = "Chan";
|
|
||||||
UUID userUuid = UUID.Parse("00000000-0000-0000-0000-000000000999");
|
|
||||||
string userItemCreatorFirstName = "Bat";
|
|
||||||
string userItemCreatorLastName = "Man";
|
|
||||||
//UUID userItemCreatorUuid = UUID.Parse("00000000-0000-0000-0000-000000008888");
|
|
||||||
|
|
||||||
string itemName = "b.lsl";
|
|
||||||
string archiveItemName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random());
|
|
||||||
|
|
||||||
MemoryStream archiveWriteStream = new MemoryStream();
|
|
||||||
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
|
||||||
|
|
||||||
InventoryItemBase item1 = new InventoryItemBase();
|
|
||||||
item1.Name = itemName;
|
|
||||||
item1.AssetID = UUID.Random();
|
|
||||||
item1.GroupID = UUID.Random();
|
|
||||||
item1.CreatorId = OspResolver.MakeOspa(userItemCreatorFirstName, userItemCreatorLastName);
|
|
||||||
//item1.CreatorId = userUuid.ToString();
|
|
||||||
//item1.CreatorId = "00000000-0000-0000-0000-000000000444";
|
|
||||||
item1.Owner = UUID.Zero;
|
|
||||||
|
|
||||||
string item1FileName
|
|
||||||
= string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, archiveItemName);
|
|
||||||
tar.WriteFile(item1FileName, UserInventoryItemSerializer.Serialize(item1, new Dictionary<string,object>(), null));
|
|
||||||
tar.Close();
|
|
||||||
|
|
||||||
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
|
|
||||||
SerialiserModule serialiserModule = new SerialiserModule();
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
|
InventoryArchiverModule archiverModule = new InventoryArchiverModule();
|
||||||
|
|
||||||
// Annoyingly, we have to set up a scene even though inventory loading has nothing to do with a scene
|
|
||||||
Scene scene = SceneSetupHelpers.SetupScene("inventory");
|
Scene scene = SceneSetupHelpers.SetupScene("inventory");
|
||||||
|
|
||||||
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
||||||
UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userUuid, "meowfood");
|
|
||||||
|
|
||||||
archiverModule.DearchiveInventory(userFirstName, userLastName, "/", "meowfood", archiveReadStream);
|
UserProfileTestUtils.CreateUserWithInventory(scene, m_ua1, "password");
|
||||||
|
archiverModule.DearchiveInventory(m_ua1.FirstName, m_ua1.LastName, "/", "password", m_iarStream);
|
||||||
|
|
||||||
InventoryItemBase foundItem1
|
InventoryItemBase foundItem1
|
||||||
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, userUuid, itemName);
|
= InventoryArchiveUtils.FindItemByPath(scene.InventoryService, m_ua1.PrincipalID, m_item1Name);
|
||||||
|
|
||||||
Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1");
|
Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1");
|
||||||
// Assert.That(
|
// Assert.That(
|
||||||
// foundItem1.CreatorId, Is.EqualTo(userUuid),
|
// foundItem1.CreatorId, Is.EqualTo(userUuid),
|
||||||
// "Loaded item non-uuid creator doesn't match that of the loading user");
|
// "Loaded item non-uuid creator doesn't match that of the loading user");
|
||||||
Assert.That(
|
Assert.That(
|
||||||
foundItem1.CreatorIdAsUuid, Is.EqualTo(userUuid),
|
foundItem1.CreatorIdAsUuid, Is.EqualTo(m_ua1.PrincipalID),
|
||||||
"Loaded item uuid creator doesn't match that of the loading user");
|
"Loaded item uuid creator doesn't match that of the loading user");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -304,12 +304,12 @@ namespace OpenSim.Tests.Common.Setup
|
||||||
config.Configs["UserAccountService"].Set(
|
config.Configs["UserAccountService"].Set(
|
||||||
"LocalServiceModule", "OpenSim.Services.UserAccountService.dll:UserAccountService");
|
"LocalServiceModule", "OpenSim.Services.UserAccountService.dll:UserAccountService");
|
||||||
|
|
||||||
if (m_userAccountService == null)
|
// if (m_userAccountService == null)
|
||||||
{
|
// {
|
||||||
ISharedRegionModule userAccountService = new LocalUserAccountServicesConnector();
|
ISharedRegionModule userAccountService = new LocalUserAccountServicesConnector();
|
||||||
userAccountService.Initialise(config);
|
userAccountService.Initialise(config);
|
||||||
m_userAccountService = userAccountService;
|
m_userAccountService = userAccountService;
|
||||||
}
|
// }
|
||||||
|
|
||||||
m_userAccountService.AddRegion(testScene);
|
m_userAccountService.AddRegion(testScene);
|
||||||
m_userAccountService.RegionLoaded(testScene);
|
m_userAccountService.RegionLoaded(testScene);
|
||||||
|
|
Loading…
Reference in New Issue