* Change simple asset cache test to manually pump the asset server rather than relying on another thread

0.6.5-rc1
Justin Clarke Casey 2009-04-14 17:44:10 +00:00
parent 2a49272b62
commit e1c449b492
2 changed files with 28 additions and 16 deletions

View File

@ -138,14 +138,29 @@ namespace OpenSim.Framework.Communications.Cache
/// asset cannot be found.
/// </exception>
protected abstract AssetBase GetAsset(AssetRequest req);
/// <summary>
/// Does the asset server have any waiting requests?
/// </summary>
///
/// This does include any request that is currently being handled. This information is not reliable where
/// another thread may be processing requests.
///
/// <returns>
/// True if there are waiting requests. False if there are no waiting requests.
/// </returns>
public virtual bool HasWaitingRequests()
{
return m_assetRequests.Count() != 0;
}
/// <summary>
/// Process an asset request. This method will call GetAsset(AssetRequest req)
/// on the subclass.
/// </summary>
/// <param name="req"></param>
protected virtual void ProcessRequest(AssetRequest req)
public virtual void ProcessNextRequest()
{
AssetRequest req = m_assetRequests.Dequeue();
AssetBase asset;
try
@ -160,7 +175,7 @@ namespace OpenSim.Framework.Communications.Cache
StatsManager.SimExtraStats.AddAssetServiceRequestFailure();
m_receiver.AssetNotFound(req.AssetID, req.IsTexture);
return;
}
@ -190,10 +205,8 @@ namespace OpenSim.Framework.Communications.Cache
while (true) // Since it's a 'blocking queue'
{
try
{
AssetRequest req = m_assetRequests.Dequeue();
ProcessRequest(req);
{
ProcessNextRequest();
}
catch (Exception e)
{

View File

@ -62,15 +62,14 @@ namespace OpenSim.Framework.Communications.Tests
TestAssetDataPlugin assetPlugin = new TestAssetDataPlugin();
assetPlugin.CreateAsset(asset);
IAssetServer assetServer = new SQLAssetServer(assetPlugin);
SQLAssetServer assetServer = new SQLAssetServer(assetPlugin);
IAssetCache assetCache = new AssetCache(assetServer);
assetServer.Start();
lock (this)
{
assetCache.GetAsset(assetId, AssetRequestCallback, false);
Monitor.Wait(this, 60000);
}
assetCache.GetAsset(assetId, AssetRequestCallback, false);
// Manually pump the asset server
while (assetServer.HasWaitingRequests())
assetServer.ProcessNextRequest();
Assert.That(
assetId, Is.EqualTo(m_assetIdReceived), "Asset id stored differs from asset id received");