aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs110
-rw-r--r--OpenSim/Services/InventoryService/XInventoryService.cs40
2 files changed, 140 insertions, 10 deletions
diff --git a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
index d2356c5..9e3fa69 100644
--- a/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
+++ b/OpenSim/Services/InventoryService/Tests/XInventoryServiceTests.cs
@@ -43,8 +43,18 @@ namespace OpenSim.Services.InventoryService.Tests
43 /// TODO: Fill out more tests. 43 /// TODO: Fill out more tests.
44 /// </remarks> 44 /// </remarks>
45 [TestFixture] 45 [TestFixture]
46 public class XInventoryServiceTests 46 public class XInventoryServiceTests : OpenSimTestCase
47 { 47 {
48 private IInventoryService CreateXInventoryService()
49 {
50 IConfigSource config = new IniConfigSource();
51 config.AddConfig("InventoryService");
52 config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
53
54 return ServerUtils.LoadPlugin<IInventoryService>(
55 "OpenSim.Services.InventoryService.dll:XInventoryService", new Object[] { config });
56 }
57
48 /// <summary> 58 /// <summary>
49 /// Tests add item operation. 59 /// Tests add item operation.
50 /// </summary> 60 /// </summary>
@@ -54,25 +64,31 @@ namespace OpenSim.Services.InventoryService.Tests
54 [Test] 64 [Test]
55 public void TestAddItem() 65 public void TestAddItem()
56 { 66 {
67 TestHelpers.InMethod();
68
57 string creatorId = TestHelpers.ParseTail(0x1).ToString(); 69 string creatorId = TestHelpers.ParseTail(0x1).ToString();
58 UUID ownerId = TestHelpers.ParseTail(0x2); 70 UUID ownerId = TestHelpers.ParseTail(0x2);
59 UUID itemId = TestHelpers.ParseTail(0x10); 71 UUID itemId = TestHelpers.ParseTail(0x10);
60 UUID assetId = TestHelpers.ParseTail(0x20); 72 UUID assetId = TestHelpers.ParseTail(0x20);
73 UUID folderId = TestHelpers.ParseTail(0x30);
74 int invType = (int)InventoryType.Animation;
75 int assetType = (int)AssetType.Animation;
61 string itemName = "item1"; 76 string itemName = "item1";
62 77
63 IConfigSource config = new IniConfigSource(); 78 IInventoryService xis = CreateXInventoryService();
64 config.AddConfig("InventoryService");
65 config.Configs["InventoryService"].Set("StorageProvider", "OpenSim.Tests.Common.dll");
66
67 IInventoryService xis
68 = ServerUtils.LoadPlugin<IInventoryService>(
69 "OpenSim.Services.InventoryService.dll:XInventoryService", new Object[] { config });
70 79
71 InventoryItemBase itemToStore 80 InventoryItemBase itemToStore
72 = new InventoryItemBase(itemId, ownerId) 81 = new InventoryItemBase(itemId, ownerId)
73 { CreatorId = creatorId.ToString(), AssetID = assetId, Name = itemName }; 82 {
83 CreatorIdentification = creatorId.ToString(),
84 AssetID = assetId,
85 Name = itemName,
86 Folder = folderId,
87 InvType = invType,
88 AssetType = assetType
89 };
74 90
75 xis.AddItem(itemToStore); 91 Assert.That(xis.AddItem(itemToStore), Is.True);
76 92
77 InventoryItemBase itemRetrieved = new InventoryItemBase(itemId); 93 InventoryItemBase itemRetrieved = new InventoryItemBase(itemId);
78 itemRetrieved = xis.GetItem(itemRetrieved); 94 itemRetrieved = xis.GetItem(itemRetrieved);
@@ -81,7 +97,81 @@ namespace OpenSim.Services.InventoryService.Tests
81 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId)); 97 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId));
82 Assert.That(itemRetrieved.Owner, Is.EqualTo(ownerId)); 98 Assert.That(itemRetrieved.Owner, Is.EqualTo(ownerId));
83 Assert.That(itemRetrieved.AssetID, Is.EqualTo(assetId)); 99 Assert.That(itemRetrieved.AssetID, Is.EqualTo(assetId));
100 Assert.That(itemRetrieved.Folder, Is.EqualTo(folderId));
101 Assert.That(itemRetrieved.InvType, Is.EqualTo(invType));
102 Assert.That(itemRetrieved.AssetType, Is.EqualTo(assetType));
84 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName)); 103 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName));
85 } 104 }
105
106 [Test]
107 public void TestUpdateItem()
108 {
109 TestHelpers.InMethod();
110// TestHelpers.EnableLogging();
111
112 string creatorId = TestHelpers.ParseTail(0x1).ToString();
113 UUID ownerId = TestHelpers.ParseTail(0x2);
114 UUID itemId = TestHelpers.ParseTail(0x10);
115 UUID assetId = TestHelpers.ParseTail(0x20);
116 UUID folderId = TestHelpers.ParseTail(0x30);
117 int invType = (int)InventoryType.Animation;
118 int assetType = (int)AssetType.Animation;
119 string itemName = "item1";
120 string itemName2 = "item2";
121
122 IInventoryService xis = CreateXInventoryService();
123
124 InventoryItemBase itemToStore
125 = new InventoryItemBase(itemId, ownerId)
126 {
127 CreatorIdentification = creatorId.ToString(),
128 AssetID = assetId,
129 Name = itemName,
130 Folder = folderId,
131 InvType = invType,
132 AssetType = assetType
133 };
134
135 Assert.That(xis.AddItem(itemToStore), Is.True);
136
137 // Normal update
138 itemToStore.Name = itemName2;
139
140 Assert.That(xis.UpdateItem(itemToStore), Is.True);
141
142 InventoryItemBase itemRetrieved = new InventoryItemBase(itemId);
143 itemRetrieved = xis.GetItem(itemRetrieved);
144
145 Assert.That(itemRetrieved, Is.Not.Null);
146 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName2));
147
148 // Attempt to update properties that should never change
149 string creatorId2 = TestHelpers.ParseTail(0x7).ToString();
150 UUID ownerId2 = TestHelpers.ParseTail(0x8);
151 UUID folderId2 = TestHelpers.ParseTail(0x70);
152 int invType2 = (int)InventoryType.CallingCard;
153 int assetType2 = (int)AssetType.CallingCard;
154 string itemName3 = "item3";
155
156 itemToStore.CreatorIdentification = creatorId2.ToString();
157 itemToStore.Owner = ownerId2;
158 itemToStore.Folder = folderId2;
159 itemToStore.InvType = invType2;
160 itemToStore.AssetType = assetType2;
161 itemToStore.Name = itemName3;
162
163 Assert.That(xis.UpdateItem(itemToStore), Is.True);
164
165 itemRetrieved = xis.GetItem(itemRetrieved);
166
167 Assert.That(itemRetrieved, Is.Not.Null);
168 Assert.That(itemRetrieved.CreatorId, Is.EqualTo(creatorId));
169 Assert.That(itemRetrieved.Owner, Is.EqualTo(ownerId));
170 Assert.That(itemRetrieved.AssetID, Is.EqualTo(assetId));
171 Assert.That(itemRetrieved.Folder, Is.EqualTo(folderId));
172 Assert.That(itemRetrieved.InvType, Is.EqualTo(invType));
173 Assert.That(itemRetrieved.AssetType, Is.EqualTo(assetType));
174 Assert.That(itemRetrieved.Name, Is.EqualTo(itemName3));
175 }
86 } 176 }
87} \ No newline at end of file 177} \ No newline at end of file
diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs
index 9abc5e4..00faa44 100644
--- a/OpenSim/Services/InventoryService/XInventoryService.cs
+++ b/OpenSim/Services/InventoryService/XInventoryService.cs
@@ -476,6 +476,46 @@ namespace OpenSim.Services.InventoryService
476// m_log.InfoFormat( 476// m_log.InfoFormat(
477// "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); 477// "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder);
478 478
479 InventoryItemBase retrievedItem = GetItem(item);
480
481 if (retrievedItem == null)
482 {
483 m_log.WarnFormat(
484 "[XINVENTORY SERVICE]: Tried to update item {0} {1}, owner {2} but no existing item found.",
485 item.Name, item.ID, item.Owner);
486
487 return false;
488 }
489
490 // Do not allow invariants to change. Changes to folder ID occur in MoveItems()
491 if (retrievedItem.InvType != item.InvType
492 || retrievedItem.AssetType != item.AssetType
493 || retrievedItem.Folder != item.Folder
494 || retrievedItem.CreatorIdentification != item.CreatorIdentification
495 || retrievedItem.Owner != item.Owner)
496 {
497 m_log.WarnFormat(
498 "[XINVENTORY SERVICE]: Caller to UpdateItem() for {0} {1} tried to alter property(s) that should be invariant, (InvType, AssetType, Folder, CreatorIdentification, Owner), existing ({2}, {3}, {4}, {5}, {6}), update ({7}, {8}, {9}, {10}, {11})",
499 retrievedItem.Name,
500 retrievedItem.ID,
501 retrievedItem.InvType,
502 retrievedItem.AssetType,
503 retrievedItem.Folder,
504 retrievedItem.CreatorIdentification,
505 retrievedItem.Owner,
506 item.InvType,
507 item.AssetType,
508 item.Folder,
509 item.CreatorIdentification,
510 item.Owner);
511
512 item.InvType = retrievedItem.InvType;
513 item.AssetType = retrievedItem.AssetType;
514 item.Folder = retrievedItem.Folder;
515 item.CreatorIdentification = retrievedItem.CreatorIdentification;
516 item.Owner = retrievedItem.Owner;
517 }
518
479 return m_Database.StoreItem(ConvertFromOpenSim(item)); 519 return m_Database.StoreItem(ConvertFromOpenSim(item));
480 } 520 }
481 521