Browse Source

add TestsAssetCache using .net MemoryCache to tests only

UbitUmarov 3 years ago
parent
commit
56d3e1cdc9

+ 3 - 3
OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs

@@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 
             // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly
             // to the AssetService, which will then store temporary and local assets permanently
-            CoreAssetCache assetCache = new CoreAssetCache();
+            TestsAssetCache assetCache = new TestsAssetCache();
 
             AvatarFactoryModule afm = new AvatarFactoryModule();
             TestScene scene = new SceneHelpers(assetCache).SetupScene();
@@ -112,7 +112,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 
             // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly
             // to the AssetService, which will then store temporary and local assets permanently
-            CoreAssetCache assetCache = new CoreAssetCache();
+            TestsAssetCache assetCache = new TestsAssetCache();
 
             AvatarFactoryModule afm = new AvatarFactoryModule();
             TestScene scene = new SceneHelpers(assetCache).SetupScene();
@@ -157,7 +157,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 
             // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly
             // to the AssetService, which will then store temporary and local assets permanently
-            CoreAssetCache assetCache = new CoreAssetCache();
+            TestsAssetCache assetCache = new TestsAssetCache();
 
             AvatarFactoryModule afm = new AvatarFactoryModule();
             TestScene scene = new SceneHelpers(assetCache).SetupScene();

+ 4 - 10
OpenSim/Tests/Common/Helpers/SceneHelpers.cs

@@ -34,14 +34,10 @@ using OpenSim.Data.Null;
 using OpenSim.Framework;
 
 using OpenSim.Framework.Console;
-using OpenSim.Framework.Servers;
-using OpenSim.Framework.Servers.HttpServer;
 using OpenSim.Region.PhysicsModules.SharedBase;
-using OpenSim.Region.Framework;
 using OpenSim.Region.Framework.Interfaces;
 using OpenSim.Region.Framework.Scenes;
 using OpenSim.Region.CoreModules.Avatar.Gods;
-using OpenSim.Region.CoreModules.Asset;
 using OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset;
 using OpenSim.Region.CoreModules.ServiceConnectorsOut.Authentication;
 using OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory;
@@ -50,7 +46,6 @@ using OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts;
 using OpenSim.Region.CoreModules.ServiceConnectorsOut.Presence;
 using OpenSim.Region.PhysicsModule.BasicPhysics;
 using OpenSim.Services.Interfaces;
-using GridRegion = OpenSim.Services.Interfaces.GridRegion;
 
 namespace OpenSim.Tests.Common
 {
@@ -76,13 +71,13 @@ namespace OpenSim.Tests.Common
         private LocalUserAccountServicesConnector m_userAccountService;
         private LocalPresenceServicesConnector m_presenceService;
 
-        private CoreAssetCache m_cache;
+        private TestsAssetCache m_cache;
 
         private PhysicsScene m_physicsScene;
 
         public SceneHelpers() : this(null) {}
 
-        public SceneHelpers(CoreAssetCache cache)
+        public SceneHelpers(TestsAssetCache cache)
         {
             SceneManager = new SceneManager();
 
@@ -202,7 +197,6 @@ namespace OpenSim.Tests.Common
             m_presenceService.RegionLoaded(testScene);
             testScene.AddRegionModule(m_presenceService.Name, m_presenceService);
 
-
             testScene.SetModuleInterfaces();
 
             testScene.LandChannel = new TestLandChannel(testScene);
@@ -216,7 +210,7 @@ namespace OpenSim.Tests.Common
             return testScene;
         }
 
-        private static LocalAssetServicesConnector StartAssetService(CoreAssetCache cache)
+        private static LocalAssetServicesConnector StartAssetService(TestsAssetCache cache)
         {
             IConfigSource config = new IniConfigSource();
             config.AddConfig("Modules");
@@ -232,7 +226,7 @@ namespace OpenSim.Tests.Common
             {
                 IConfigSource cacheConfig = new IniConfigSource();
                 cacheConfig.AddConfig("Modules");
-                cacheConfig.Configs["Modules"].Set("AssetCaching", "CoreAssetCache");
+                cacheConfig.Configs["Modules"].Set("AssetCaching", "TestsAssetCache");
                 cacheConfig.AddConfig("AssetCache");
 
                 cache.Initialise(cacheConfig);

+ 131 - 0
OpenSim/Tests/Common/TestsAssetCache.cs

@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the OpenSimulator Project nor the
+ *       names of its contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using log4net;
+using System;
+using System.Reflection;
+using System.Runtime.Caching;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+
+namespace OpenSim.Tests.Common
+{
+    public class TestsAssetCache : ISharedRegionModule, IAssetCache
+    {
+        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+        private bool m_Enabled;
+        private MemoryCache m_Cache;
+
+        public string Name
+        {
+            get { return "TestsAssetCache"; }
+        }
+
+        public Type ReplaceableInterface
+        {
+            get { return null; }
+        }
+
+        public void Initialise(IConfigSource source)
+        {
+            m_Cache = MemoryCache.Default;
+            m_Enabled = true;
+        }
+
+        public void PostInitialise()
+        {
+        }
+
+        public void Close()
+        {
+        }
+
+        public void AddRegion(Scene scene)
+        {
+            if (m_Enabled)
+                scene.RegisterModuleInterface<IAssetCache>(this);
+        }
+
+        public void RemoveRegion(Scene scene)
+        {
+        }
+
+        public void RegionLoaded(Scene scene)
+        {
+        }
+
+        ////////////////////////////////////////////////////////////
+        // IAssetCache
+        //
+        public bool Check(string id)
+        {
+            // XXX This is probably not an efficient implementation.
+            AssetBase asset;
+            if (!Get(id, out asset))
+                return false;
+            return asset != null;
+        }
+
+        public void Cache(AssetBase asset, bool replace = true)
+        {
+            if (asset != null)
+            {
+                CacheItemPolicy policy = new CacheItemPolicy();
+                m_Cache.Set(asset.ID, asset, policy);
+            }
+        }
+
+        public void CacheNegative(string id)
+        {
+            // We don't do negative caching
+        }
+
+        public bool Get(string id, out AssetBase asset)
+        {
+            asset = (AssetBase)m_Cache.Get(id);
+            return true;
+        }
+
+        public void Expire(string id)
+        {
+            m_Cache.Remove(id);
+        }
+
+        public void Clear()
+        {
+        }
+        /*
+        public bool UpdateContent(string id, byte[] data)
+        {
+            return false;
+        }
+        */
+    }
+}

+ 1 - 0
prebuild.xml

@@ -2690,6 +2690,7 @@
       <Reference name="System.Core"/>
       <Reference name="System.Data"/>
       <Reference name="System.Drawing"/>
+      <Reference name="System.Runtime.Caching"/>
       <Reference name="System.Xml"/>
       <Reference name="System.Web"/>
       <Reference name="log4net" path="../../../bin/"/>

+ 1 - 0
prebuild48.xml

@@ -2690,6 +2690,7 @@
       <Reference name="System.Core"/>
       <Reference name="System.Data"/>
       <Reference name="System.Drawing"/>
+      <Reference name="System.Runtime.Caching"/>
       <Reference name="System.Xml"/>
       <Reference name="System.Web"/>
       <Reference name="log4net" path="../../../bin/"/>