diff options
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs | 134 |
1 files changed, 126 insertions, 8 deletions
diff --git a/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs b/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs index 4049dfc..c15bd46 100644 --- a/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs +++ b/OpenSim/Region/Environment/Modules/Agent/TextureSender/Tests/TextureSenderTests.cs | |||
@@ -25,9 +25,13 @@ | |||
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 | using System; | ||
29 | using System.Collections; | ||
28 | using NUnit.Framework; | 30 | using NUnit.Framework; |
31 | using NUnit.Framework.SyntaxHelpers; | ||
29 | using OpenMetaverse; | 32 | using OpenMetaverse; |
30 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | |||
31 | using OpenSim.Tests.Common.Mock; | 35 | using OpenSim.Tests.Common.Mock; |
32 | 36 | ||
33 | namespace OpenSim.Region.Environment.Modules.Agent.TextureSender | 37 | namespace OpenSim.Region.Environment.Modules.Agent.TextureSender |
@@ -35,11 +39,17 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender | |||
35 | [TestFixture] | 39 | [TestFixture] |
36 | public class UserTextureSenderTests | 40 | public class UserTextureSenderTests |
37 | { | 41 | { |
38 | [Test] | 42 | public UUID uuid1; |
39 | /// <summary> | 43 | public UUID uuid2; |
40 | /// More a placeholder, really | 44 | public UUID uuid3; |
41 | /// </summary> | 45 | public UUID uuid4; |
42 | public void DummyTest() | 46 | public int npackets, testsize; |
47 | public TestClient client; | ||
48 | public TextureSender ts; | ||
49 | public static Random random = new Random(); | ||
50 | |||
51 | [TestFixtureSetUp] | ||
52 | public void Init() | ||
43 | { | 53 | { |
44 | AgentCircuitData agent = new AgentCircuitData(); | 54 | AgentCircuitData agent = new AgentCircuitData(); |
45 | agent.AgentID = UUID.Random(); | 55 | agent.AgentID = UUID.Random(); |
@@ -52,8 +62,116 @@ namespace OpenSim.Region.Environment.Modules.Agent.TextureSender | |||
52 | agent.InventoryFolder = UUID.Zero; | 62 | agent.InventoryFolder = UUID.Zero; |
53 | agent.startpos = Vector3.Zero; | 63 | agent.startpos = Vector3.Zero; |
54 | agent.CapsPath = "http://wibble.com"; | 64 | agent.CapsPath = "http://wibble.com"; |
55 | 65 | client = new TestClient(agent); | |
56 | new TextureSender(new TestClient(agent), 0, 0); | 66 | ts = new TextureSender(client, 0, 0); |
67 | testsize = random.Next(5000,15000); | ||
68 | npackets = CalculateNumPackets(testsize); | ||
69 | uuid1 = UUID.Random(); | ||
70 | uuid2 = UUID.Random(); | ||
71 | uuid3 = UUID.Random(); | ||
72 | uuid4 = UUID.Random(); | ||
73 | } | ||
74 | |||
75 | /// <summary> | ||
76 | /// Test sending package | ||
77 | /// </summary> | ||
78 | [Test] | ||
79 | public void T010_SendPkg() | ||
80 | { | ||
81 | // Normal sending | ||
82 | AssetBase abase = new AssetBase(uuid1, "asset one"); | ||
83 | byte[] abdata = new byte[testsize]; | ||
84 | random.NextBytes(abdata); | ||
85 | abase.Data = abdata; | ||
86 | bool isdone = false; | ||
87 | ts.TextureReceived(abase); | ||
88 | for (int i = 0; i < npackets; i++) { | ||
89 | isdone = ts.SendTexturePacket(); | ||
90 | } | ||
91 | |||
92 | Assert.That(isdone,Is.False); | ||
93 | isdone = ts.SendTexturePacket(); | ||
94 | Assert.That(isdone,Is.True); | ||
95 | } | ||
96 | |||
97 | [Test] | ||
98 | public void T011_UpdateReq() | ||
99 | { | ||
100 | // Test packet number start | ||
101 | AssetBase abase = new AssetBase(uuid2, "asset two"); | ||
102 | byte[] abdata = new byte[testsize]; | ||
103 | random.NextBytes(abdata); | ||
104 | abase.Data = abdata; | ||
105 | |||
106 | bool isdone = false; | ||
107 | ts.TextureReceived(abase); | ||
108 | ts.UpdateRequest(0,3); | ||
109 | |||
110 | for (int i = 0; i < npackets-3; i++) { | ||
111 | isdone = ts.SendTexturePacket(); | ||
112 | } | ||
113 | |||
114 | Assert.That(isdone,Is.False); | ||
115 | isdone = ts.SendTexturePacket(); | ||
116 | Assert.That(isdone,Is.True); | ||
117 | |||
118 | // Test discard level | ||
119 | abase = new AssetBase(uuid3, "asset three"); | ||
120 | abdata = new byte[testsize]; | ||
121 | random.NextBytes(abdata); | ||
122 | abase.Data = abdata; | ||
123 | isdone = false; | ||
124 | ts.TextureReceived(abase); | ||
125 | ts.UpdateRequest(-1,0); | ||
126 | |||
127 | Assert.That(ts.SendTexturePacket(),Is.True); | ||
128 | |||
129 | abase = new AssetBase(uuid4, "asset four"); | ||
130 | abdata = new byte[testsize]; | ||
131 | random.NextBytes(abdata); | ||
132 | abase.Data = abdata; | ||
133 | isdone = false; | ||
134 | ts.TextureReceived(abase); | ||
135 | ts.UpdateRequest(0,5); | ||
136 | |||
137 | for (int i = 0; i < npackets-5; i++) { | ||
138 | isdone = ts.SendTexturePacket(); | ||
139 | } | ||
140 | Assert.That(isdone,Is.False); | ||
141 | isdone = ts.SendTexturePacket(); | ||
142 | Assert.That(isdone,Is.True); | ||
143 | } | ||
144 | |||
145 | [Test] | ||
146 | public void T999_FinishStatus() | ||
147 | { | ||
148 | // Of the 4 assets "sent", only 2 sent the first part. | ||
149 | Assert.That(client.sentdatapkt.Count,Is.EqualTo(2)); | ||
150 | |||
151 | // Sum of all packets sent: | ||
152 | int totalpkts = (npackets) + (npackets - 2) + (npackets - 4); | ||
153 | Assert.That(client.sentpktpkt.Count,Is.EqualTo(totalpkts)); | ||
154 | } | ||
155 | /// <summary> | ||
156 | /// Calculate the number of packets that will be required to send the texture loaded into this sender | ||
157 | /// This is actually the number of 1000 byte packets not including an initial 600 byte packet... | ||
158 | /// Borrowed from TextureSender.cs | ||
159 | /// </summary> | ||
160 | /// <param name="length"></param> | ||
161 | /// <returns></returns> | ||
162 | private int CalculateNumPackets(int length) | ||
163 | { | ||
164 | int numPackets = 0; | ||
165 | |||
166 | if (length > 600) | ||
167 | { | ||
168 | //over 600 bytes so split up file | ||
169 | int restData = (length - 600); | ||
170 | int restPackets = ((restData + 999) / 1000); | ||
171 | numPackets = restPackets; | ||
172 | } | ||
173 | |||
174 | return numPackets; | ||
57 | } | 175 | } |
58 | } | 176 | } |
59 | } \ No newline at end of file | 177 | } |