aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs')
-rw-r--r--OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs228
1 files changed, 228 insertions, 0 deletions
diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs b/OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs
new file mode 100644
index 0000000..d34423d
--- /dev/null
+++ b/OpenSim/Capabilities/Handlers/FetchInventory/Tests/FetchInventoryDescendents2HandlerTests.cs
@@ -0,0 +1,228 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Linq;
31using System.Net;
32using log4net;
33using log4net.Config;
34using NUnit.Framework;
35using OpenMetaverse;
36using OpenSim.Capabilities.Handlers;
37using OpenSim.Framework;
38using OpenSim.Framework.Servers.HttpServer;
39using OpenSim.Region.Framework.Scenes;
40using OpenSim.Services.Interfaces;
41using OpenSim.Tests.Common;
42
43namespace OpenSim.Capabilities.Handlers.FetchInventory.Tests
44{
45 [TestFixture]
46 public class FetchInventoryDescendents2HandlerTests : OpenSimTestCase
47 {
48 private UUID m_userID = UUID.Zero;
49 private Scene m_scene;
50 private UUID m_rootFolderID;
51 private int m_rootDescendents;
52 private UUID m_notecardsFolder;
53 private UUID m_objectsFolder;
54
55 private void Init()
56 {
57 // Create an inventory that looks like this:
58 //
59 // /My Inventory
60 // <other system folders>
61 // /Objects
62 // Some Object
63 // /Notecards
64 // Notecard 1
65 // Notecard 2
66 // /Test Folder
67 // Link to notecard -> /Notecards/Notecard 2
68 // Link to Objects folder -> /Objects
69
70 m_scene = new SceneHelpers().SetupScene();
71
72 m_scene.InventoryService.CreateUserInventory(m_userID);
73
74 m_rootFolderID = m_scene.InventoryService.GetRootFolder(m_userID).ID;
75
76 InventoryFolderBase of = m_scene.InventoryService.GetFolderForType(m_userID, AssetType.Object);
77 m_objectsFolder = of.ID;
78
79 // Add an object
80 InventoryItemBase item = new InventoryItemBase(new UUID("b0000000-0000-0000-0000-00000000000b"), m_userID);
81 item.AssetID = UUID.Random();
82 item.AssetType = (int)AssetType.Object;
83 item.Folder = m_objectsFolder;
84 item.Name = "Some Object";
85 m_scene.InventoryService.AddItem(item);
86
87 InventoryFolderBase ncf = m_scene.InventoryService.GetFolderForType(m_userID, AssetType.Notecard);
88 m_notecardsFolder = ncf.ID;
89
90 // Add a notecard
91 item = new InventoryItemBase(new UUID("10000000-0000-0000-0000-000000000001"), m_userID);
92 item.AssetID = UUID.Random();
93 item.AssetType = (int)AssetType.Notecard;
94 item.Folder = m_notecardsFolder;
95 item.Name = "Test Notecard 1";
96 m_scene.InventoryService.AddItem(item);
97 // Add another notecard
98 item.ID = new UUID("20000000-0000-0000-0000-000000000002");
99 item.AssetID = new UUID("a0000000-0000-0000-0000-00000000000a");
100 item.Name = "Test Notecard 2";
101 m_scene.InventoryService.AddItem(item);
102
103 // Add a folder
104 InventoryFolderBase folder = new InventoryFolderBase(new UUID("f0000000-0000-0000-0000-00000000000f"), "Test Folder", m_userID, m_rootFolderID);
105 m_scene.InventoryService.AddFolder(folder);
106
107 // Add a link to notecard 2 in Test Folder
108 item.AssetID = item.ID; // use item ID of notecard 2
109 item.ID = new UUID("40000000-0000-0000-0000-000000000004");
110 item.AssetType = (int)AssetType.Link;
111 item.Folder = folder.ID;
112 item.Name = "Link to notecard";
113 m_scene.InventoryService.AddItem(item);
114
115 // Add a link to the Objects folder in Test Folder
116 item.AssetID = m_scene.InventoryService.GetFolderForType(m_userID, AssetType.Object).ID; // use item ID of Objects folder
117 item.ID = new UUID("50000000-0000-0000-0000-000000000005");
118 item.AssetType = (int)AssetType.LinkFolder;
119 item.Folder = folder.ID;
120 item.Name = "Link to Objects folder";
121 m_scene.InventoryService.AddItem(item);
122
123 InventoryCollection coll = m_scene.InventoryService.GetFolderContent(m_userID, m_rootFolderID);
124 m_rootDescendents = coll.Items.Count + coll.Folders.Count;
125 Console.WriteLine("Number of descendents: " + m_rootDescendents);
126 }
127
128 [Test]
129 public void Test_001_SimpleFolder()
130 {
131 TestHelpers.InMethod();
132
133 Init();
134
135 FetchInvDescHandler handler = new FetchInvDescHandler(m_scene.InventoryService, null);
136 TestOSHttpRequest req = new TestOSHttpRequest();
137 TestOSHttpResponse resp = new TestOSHttpResponse();
138
139 string request = "<llsd><map><key>folders</key><array><map><key>fetch_folders</key><integer>1</integer><key>fetch_items</key><boolean>1</boolean><key>folder_id</key><uuid>";
140 request += m_rootFolderID;
141 request += "</uuid><key>owner_id</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>sort_order</key><integer>1</integer></map></array></map></llsd>";
142
143 string llsdresponse = handler.FetchInventoryDescendentsRequest(request, "/FETCH", string.Empty, req, resp);
144
145 Assert.That(llsdresponse != null, Is.True, "Incorrect null response");
146 Assert.That(llsdresponse != string.Empty, Is.True, "Incorrect empty response");
147 Assert.That(llsdresponse.Contains("00000000-0000-0000-0000-000000000000"), Is.True, "Response should contain userID");
148
149 string descendents = "descendents</key><integer>" + m_rootDescendents + "</integer>";
150 Assert.That(llsdresponse.Contains(descendents), Is.True, "Incorrect number of descendents");
151 Console.WriteLine(llsdresponse);
152 }
153
154 [Test]
155 public void Test_002_MultipleFolders()
156 {
157 TestHelpers.InMethod();
158
159 FetchInvDescHandler handler = new FetchInvDescHandler(m_scene.InventoryService, null);
160 TestOSHttpRequest req = new TestOSHttpRequest();
161 TestOSHttpResponse resp = new TestOSHttpResponse();
162
163 string request = "<llsd><map><key>folders</key><array>";
164 request += "<map><key>fetch_folders</key><integer>1</integer><key>fetch_items</key><boolean>1</boolean><key>folder_id</key><uuid>";
165 request += m_rootFolderID;
166 request += "</uuid><key>owner_id</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>sort_order</key><integer>1</integer></map>";
167 request += "<map><key>fetch_folders</key><integer>1</integer><key>fetch_items</key><boolean>1</boolean><key>folder_id</key><uuid>";
168 request += m_notecardsFolder;
169 request += "</uuid><key>owner_id</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>sort_order</key><integer>1</integer></map>";
170 request += "</array></map></llsd>";
171
172 string llsdresponse = handler.FetchInventoryDescendentsRequest(request, "/FETCH", string.Empty, req, resp);
173 Console.WriteLine(llsdresponse);
174
175 string descendents = "descendents</key><integer>" + m_rootDescendents + "</integer>";
176 Assert.That(llsdresponse.Contains(descendents), Is.True, "Incorrect number of descendents for root folder");
177 descendents = "descendents</key><integer>2</integer>";
178 Assert.That(llsdresponse.Contains(descendents), Is.True, "Incorrect number of descendents for Notecard folder");
179
180 Assert.That(llsdresponse.Contains("10000000-0000-0000-0000-000000000001"), Is.True, "Notecard 1 is missing from response");
181 Assert.That(llsdresponse.Contains("20000000-0000-0000-0000-000000000002"), Is.True, "Notecard 2 is missing from response");
182 }
183
184 [Test]
185 public void Test_003_Links()
186 {
187 TestHelpers.InMethod();
188
189 FetchInvDescHandler handler = new FetchInvDescHandler(m_scene.InventoryService, null);
190 TestOSHttpRequest req = new TestOSHttpRequest();
191 TestOSHttpResponse resp = new TestOSHttpResponse();
192
193 string request = "<llsd><map><key>folders</key><array><map><key>fetch_folders</key><integer>1</integer><key>fetch_items</key><boolean>1</boolean><key>folder_id</key><uuid>";
194 request += "f0000000-0000-0000-0000-00000000000f";
195 request += "</uuid><key>owner_id</key><uuid>00000000-0000-0000-0000-000000000000</uuid><key>sort_order</key><integer>1</integer></map></array></map></llsd>";
196
197 string llsdresponse = handler.FetchInventoryDescendentsRequest(request, "/FETCH", string.Empty, req, resp);
198 Console.WriteLine(llsdresponse);
199
200 string descendents = "descendents</key><integer>2</integer>";
201 Assert.That(llsdresponse.Contains(descendents), Is.True, "Incorrect number of descendents for Test Folder");
202
203 // Make sure that the note card link is included
204 Assert.That(llsdresponse.Contains("Link to notecard"), Is.True, "Link to notecard is missing");
205
206 //Make sure the notecard item itself is included
207 Assert.That(llsdresponse.Contains("Test Notecard 2"), Is.True, "Notecard 2 item (the source) is missing");
208
209 // Make sure that the source item is before the link item
210 int pos1 = llsdresponse.IndexOf("Test Notecard 2");
211 int pos2 = llsdresponse.IndexOf("Link to notecard");
212 Assert.Less(pos1, pos2, "Source of link is after link");
213
214 // Make sure the folder link is included
215 Assert.That(llsdresponse.Contains("Link to Objects folder"), Is.True, "Link to Objects folder is missing");
216
217 // Make sure the objects inside the Objects folder are included
218 // Note: I'm not entirely sure this is needed, but that's what I found in the implementation
219 Assert.That(llsdresponse.Contains("Some Object"), Is.True, "Some Object item (contents of the source) is missing");
220
221 // Make sure that the source item is before the link item
222 pos1 = llsdresponse.IndexOf("Some Object");
223 pos2 = llsdresponse.IndexOf("Link to Objects folder");
224 Assert.Less(pos1, pos2, "Contents of source of folder link is after folder link");
225 }
226 }
227
228} \ No newline at end of file