* Fixed MySQL/MySQLAssetData.cs to properly do updates * Removed an extra parameter from MySQL/MySQLInventoryData.cs * Fixed a bug in SQLite/SQLiteAssetData.cs that was causing a NRE when updating an asset. * Improved the BasicAssetTest.cs to do full create/update/get testing * Improved the BasicInventoryTest.cs to do full create/update/get of both a folder and an item * Moved the null ref tests to the start of the PropertyCompareConstraint.cs, so that it doesn't throw when passing in a null item

arthursv
Kunnis 2009-08-15 10:54:48 -05:00 committed by Teravus Ovares (Dan Olivares)
parent f6251ce810
commit d2e5380cb2
6 changed files with 95 additions and 37 deletions

View File

@ -196,18 +196,11 @@ namespace OpenSim.Data.MySQL
{ {
lock (_dbConnection) lock (_dbConnection)
{ {
//m_log.Info("[ASSET DB]: Creating Asset " + asset.FullID);
if (ExistsAsset(asset.FullID))
{
//m_log.Info("[ASSET DB]: Asset exists already, ignoring.");
return;
}
_dbConnection.CheckConnection(); _dbConnection.CheckConnection();
MySqlCommand cmd = MySqlCommand cmd =
new MySqlCommand( new MySqlCommand(
"insert INTO assets(id, name, description, assetType, local, temporary, create_time, access_time, data)" + "replace INTO assets(id, name, description, assetType, local, temporary, create_time, access_time, data)" +
"VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?create_time, ?access_time, ?data)", "VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?create_time, ?access_time, ?data)",
_dbConnection.Connection); _dbConnection.Connection);

View File

@ -604,7 +604,7 @@ namespace OpenSim.Data.MySQL
cmd.Parameters.AddWithValue("?agentID", folder.Owner.ToString()); cmd.Parameters.AddWithValue("?agentID", folder.Owner.ToString());
cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString()); cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString());
cmd.Parameters.AddWithValue("?folderName", folderName); cmd.Parameters.AddWithValue("?folderName", folderName);
cmd.Parameters.AddWithValue("?type", (short) folder.Type); cmd.Parameters.AddWithValue("?type", folder.Type);
cmd.Parameters.AddWithValue("?version", folder.Version); cmd.Parameters.AddWithValue("?version", folder.Version);
try try

View File

@ -183,7 +183,7 @@ namespace OpenSim.Data.SQLite
int assetLength = (asset.Data != null) ? asset.Data.Length : 0; int assetLength = (asset.Data != null) ? asset.Data.Length : 0;
m_log.Info("[ASSET DB]: " + m_log.Info("[ASSET DB]: " +
string.Format("Loaded {6} {5} Asset: [{0}][{3}] \"{1}\":{2} ({7} bytes)", string.Format("Loaded {5} {4} Asset: [{0}][{3}] \"{1}\":{2} ({6} bytes)",
asset.FullID, asset.Name, asset.Description, asset.Type, asset.FullID, asset.Name, asset.Description, asset.Type,
temporary, local, assetLength)); temporary, local, assetLength));
} }

View File

@ -94,13 +94,38 @@ namespace OpenSim.Data.Tests
db.CreateAsset(a3); db.CreateAsset(a3);
AssetBase a1a = db.FetchAsset(uuid1); AssetBase a1a = db.FetchAsset(uuid1);
Assert.That(a1, Constraints.PropertyCompareConstraint(a1a)); Assert.That(a1a, Constraints.PropertyCompareConstraint(a1));
AssetBase a2a = db.FetchAsset(uuid2); AssetBase a2a = db.FetchAsset(uuid2);
Assert.That(a2, Constraints.PropertyCompareConstraint(a2a)); Assert.That(a2a, Constraints.PropertyCompareConstraint(a2));
AssetBase a3a = db.FetchAsset(uuid3); AssetBase a3a = db.FetchAsset(uuid3);
Assert.That(a3, Constraints.PropertyCompareConstraint(a3a)); Assert.That(a3a, Constraints.PropertyCompareConstraint(a3));
ScrambleForTesting.Scramble(a1a);
ScrambleForTesting.Scramble(a2a);
ScrambleForTesting.Scramble(a3a);
a1a.Data = asset1;
a2a.Data = asset1;
a3a.Data = asset1;
a1a.FullID = uuid1;
a2a.FullID = uuid2;
a3a.FullID = uuid3;
db.UpdateAsset(a1a);
db.UpdateAsset(a2a);
db.UpdateAsset(a3a);
AssetBase a1b = db.FetchAsset(uuid1);
Assert.That(a1b, Constraints.PropertyCompareConstraint(a1a));
AssetBase a2b = db.FetchAsset(uuid2);
Assert.That(a2b, Constraints.PropertyCompareConstraint(a2a));
AssetBase a3b = db.FetchAsset(uuid3);
Assert.That(a3b, Constraints.PropertyCompareConstraint(a3a));
} }
[Test] [Test]

View File

@ -258,17 +258,59 @@ namespace OpenSim.Data.Tests
[Test] [Test]
public void T104_RandomUpdateItem() public void T104_RandomUpdateItem()
{ {
InventoryItemBase expected = db.getInventoryItem(item1); UUID owner = UUID.Random();
UUID folder = UUID.Random();
UUID rootId = UUID.Random();
UUID rootAsset = UUID.Random();
InventoryFolderBase f1 = NewFolder(folder, zero, owner, name1);
ScrambleForTesting.Scramble(f1);
f1.Owner = owner;
f1.ParentID = zero;
f1.ID = folder;
// succeed with true
db.addInventoryFolder(f1);
InventoryFolderBase f1a = db.getUserRootFolder(owner);
Assert.That(f1a, Constraints.PropertyCompareConstraint(f1));
ScrambleForTesting.Scramble(f1a);
f1a.Owner = owner;
f1a.ParentID = zero;
f1a.ID = folder;
db.updateInventoryFolder(f1a);
InventoryFolderBase f1b = db.getUserRootFolder(owner);
Assert.That(f1b, Constraints.PropertyCompareConstraint(f1a));
//Now we have a valid folder to insert into, we can insert the item.
InventoryItemBase root = NewItem(rootId, folder, owner, iname1, rootAsset);
ScrambleForTesting.Scramble(root);
root.ID = rootId;
root.AssetID = rootAsset;
root.Owner = owner;
root.Folder = folder;
db.addInventoryItem(root);
InventoryItemBase expected = db.getInventoryItem(rootId);
Assert.That(expected, Constraints.PropertyCompareConstraint(root)
.IgnoreProperty(x => x.InvType)
.IgnoreProperty(x => x.CreatorIdAsUuid)
.IgnoreProperty(x => x.Description)
.IgnoreProperty(x => x.CreatorId));
ScrambleForTesting.Scramble(expected); ScrambleForTesting.Scramble(expected);
expected.ID = item1; expected.ID = rootId;
expected.AssetID = rootAsset;
expected.Owner = owner;
expected.Folder = folder;
db.updateInventoryItem(expected); db.updateInventoryItem(expected);
InventoryItemBase actual = db.getInventoryItem(item1); InventoryItemBase actual = db.getInventoryItem(rootId);
Assert.That(actual, Constraints.PropertyCompareConstraint(expected) Assert.That(actual, Constraints.PropertyCompareConstraint(expected)
.IgnoreProperty(x=>x.InvType) .IgnoreProperty(x => x.InvType)
.IgnoreProperty(x=>x.CreatorIdAsUuid) .IgnoreProperty(x => x.CreatorIdAsUuid)
.IgnoreProperty(x=>x.Description) .IgnoreProperty(x => x.Description)
.IgnoreProperty(x=>x.CreatorId)); .IgnoreProperty(x => x.CreatorId));
} }
[Test] [Test]

View File

@ -69,6 +69,19 @@ namespace OpenSim.Data.Tests
private bool ObjectCompare(object expected, object actual, Stack<string> propertyNames) private bool ObjectCompare(object expected, object actual, Stack<string> propertyNames)
{ {
//If they are both null, they are equal
if (actual == null && expected == null)
return true;
//If only one is null, then they aren't
if (actual == null || expected == null)
{
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
failingActual = actual;
failingExpected = expected;
return false;
}
//prevent loops... //prevent loops...
if(propertyNames.Count > 50) if(propertyNames.Count > 50)
{ {
@ -195,21 +208,6 @@ namespace OpenSim.Data.Tests
object actualValue = property.GetValue(actual, null); object actualValue = property.GetValue(actual, null);
object expectedValue = property.GetValue(expected, null); object expectedValue = property.GetValue(expected, null);
//If they are both null, they are equal
if (actualValue == null && expectedValue == null)
continue;
//If only one is null, then they aren't
if (actualValue == null || expectedValue == null)
{
propertyNames.Push(property.Name);
failingPropertyName = string.Join(".", propertyNames.Reverse().ToArray());
propertyNames.Pop();
failingActual = actualValue;
failingExpected = expectedValue;
return false;
}
propertyNames.Push(property.Name); propertyNames.Push(property.Name);
if (!ObjectCompare(expectedValue, actualValue, propertyNames)) if (!ObjectCompare(expectedValue, actualValue, propertyNames))
return false; return false;