2009-01-16 18:31:07 +00:00
/ *
* 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 .
2009-06-01 06:37:14 +00:00
* * Neither the name of the OpenSimulator Project nor the
2009-01-16 18:31:07 +00:00
* 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 .
* /
2009-02-12 18:59:45 +00:00
using System ;
2010-05-21 19:43:11 +00:00
using System.Collections.Generic ;
2009-02-12 18:59:45 +00:00
using System.IO ;
2009-03-12 18:13:51 +00:00
using System.Reflection ;
2009-02-12 18:59:45 +00:00
using System.Threading ;
using log4net.Config ;
using NUnit.Framework ;
using OpenMetaverse ;
2010-05-21 18:36:39 +00:00
using OpenMetaverse.Assets ;
2009-02-12 18:59:45 +00:00
using OpenSim.Framework ;
2009-03-16 00:12:25 +00:00
using OpenSim.Framework.Serialization ;
2010-01-22 16:22:23 +00:00
using OpenSim.Framework.Serialization.External ;
2009-02-12 18:59:45 +00:00
using OpenSim.Region.CoreModules.World.Serialiser ;
using OpenSim.Region.CoreModules.World.Terrain ;
using OpenSim.Region.Framework.Scenes ;
2009-05-14 16:33:04 +00:00
using OpenSim.Region.Framework.Scenes.Serialization ;
2009-04-09 20:06:27 +00:00
using OpenSim.Tests.Common ;
2010-01-29 20:59:56 +00:00
using OpenSim.Tests.Common.Mock ;
2010-05-21 18:36:39 +00:00
using ArchiveConstants = OpenSim . Framework . Serialization . ArchiveConstants ;
using TarArchiveReader = OpenSim . Framework . Serialization . TarArchiveReader ;
using TarArchiveWriter = OpenSim . Framework . Serialization . TarArchiveWriter ;
2010-09-07 21:41:13 +00:00
using RegionSettings = OpenSim . Framework . RegionSettings ;
2009-02-12 18:59:45 +00:00
2009-02-10 13:10:57 +00:00
namespace OpenSim.Region.CoreModules.World.Archiver.Tests
2009-01-16 18:31:07 +00:00
{
2009-04-23 20:15:05 +00:00
[TestFixture]
2009-01-16 18:31:07 +00:00
public class ArchiverTests
{
2009-04-15 19:12:37 +00:00
private Guid m_lastRequestId ;
2009-04-28 19:40:02 +00:00
private string m_lastErrorMessage ;
2010-01-29 20:59:56 +00:00
protected TestScene m_scene ;
protected ArchiverModule m_archiverModule ;
2010-05-21 18:36:39 +00:00
protected TaskInventoryItem m_soundItem ;
2010-01-29 20:59:56 +00:00
[SetUp]
public void SetUp ( )
{
m_archiverModule = new ArchiverModule ( ) ;
SerialiserModule serialiserModule = new SerialiserModule ( ) ;
TerrainModule terrainModule = new TerrainModule ( ) ;
2010-06-04 19:56:24 +00:00
m_scene = SceneSetupHelpers . SetupScene ( ) ;
2010-01-29 20:59:56 +00:00
SceneSetupHelpers . SetupSceneModules ( m_scene , m_archiverModule , serialiserModule , terrainModule ) ;
}
2009-04-28 19:40:02 +00:00
private void LoadCompleted ( Guid requestId , string errorMessage )
{
lock ( this )
{
m_lastRequestId = requestId ;
m_lastErrorMessage = errorMessage ;
Console . WriteLine ( "About to pulse ArchiverTests on LoadCompleted" ) ;
2009-09-30 16:00:09 +00:00
Monitor . PulseAll ( this ) ;
2009-04-28 19:40:02 +00:00
}
}
2009-04-15 19:12:37 +00:00
private void SaveCompleted ( Guid requestId , string errorMessage )
2009-02-02 20:59:12 +00:00
{
2009-02-17 16:51:09 +00:00
lock ( this )
2009-03-16 00:12:25 +00:00
{
2009-04-15 19:12:37 +00:00
m_lastRequestId = requestId ;
2009-04-28 19:40:02 +00:00
m_lastErrorMessage = errorMessage ;
Console . WriteLine ( "About to pulse ArchiverTests on SaveCompleted" ) ;
2009-03-16 00:12:25 +00:00
Monitor . PulseAll ( this ) ;
}
2009-02-02 20:59:12 +00:00
}
2009-03-16 00:12:25 +00:00
2010-01-29 21:27:14 +00:00
protected SceneObjectPart CreateSceneObjectPart1 ( )
2010-01-29 21:10:14 +00:00
{
string partName = "My Little Pony" ;
UUID ownerId = UUID . Parse ( "00000000-0000-0000-0000-000000000015" ) ;
PrimitiveBaseShape shape = PrimitiveBaseShape . CreateSphere ( ) ;
Vector3 groupPosition = new Vector3 ( 10 , 20 , 30 ) ;
Quaternion rotationOffset = new Quaternion ( 20 , 30 , 40 , 50 ) ;
Vector3 offsetPosition = new Vector3 ( 5 , 10 , 15 ) ;
2010-02-15 10:15:03 +00:00
return new SceneObjectPart ( ownerId , shape , groupPosition , rotationOffset , offsetPosition ) { Name = partName } ;
2010-01-29 21:10:14 +00:00
}
2010-01-29 20:59:56 +00:00
2010-01-29 21:42:27 +00:00
protected SceneObjectPart CreateSceneObjectPart2 ( )
{
string partName = "Action Man" ;
UUID ownerId = UUID . Parse ( "00000000-0000-0000-0000-000000000016" ) ;
PrimitiveBaseShape shape = PrimitiveBaseShape . CreateCylinder ( ) ;
Vector3 groupPosition = new Vector3 ( 90 , 80 , 70 ) ;
Quaternion rotationOffset = new Quaternion ( 60 , 70 , 80 , 90 ) ;
Vector3 offsetPosition = new Vector3 ( 20 , 25 , 30 ) ;
return new SceneObjectPart ( ownerId , shape , groupPosition , rotationOffset , offsetPosition ) { Name = partName } ;
2010-02-15 10:15:03 +00:00
}
2010-01-29 21:42:27 +00:00
2009-05-18 17:46:14 +00:00
/// <summary>
2010-11-20 03:01:47 +00:00
/// Test saving an OpenSim Region Archive.
2009-05-18 17:46:14 +00:00
/// </summary>
[Test]
2010-11-20 03:01:47 +00:00
public void TestSaveOar ( )
2009-05-18 17:46:14 +00:00
{
TestHelper . InMethod ( ) ;
2010-11-20 02:59:21 +00:00
// log4net.Config.XmlConfigurator.Configure();
2009-05-18 17:46:14 +00:00
2010-01-29 21:27:14 +00:00
SceneObjectPart part1 = CreateSceneObjectPart1 ( ) ;
2010-05-21 19:43:11 +00:00
SceneObjectGroup sog1 = new SceneObjectGroup ( part1 ) ;
m_scene . AddNewSceneObject ( sog1 , false ) ;
2009-05-18 17:46:14 +00:00
2010-01-29 21:42:27 +00:00
SceneObjectPart part2 = CreateSceneObjectPart2 ( ) ;
2010-05-21 18:36:39 +00:00
2010-09-07 21:41:13 +00:00
AssetNotecard nc = new AssetNotecard ( ) ;
nc . BodyText = "Hello World!" ;
nc . Encode ( ) ;
2010-05-21 18:36:39 +00:00
UUID ncAssetUuid = new UUID ( "00000000-0000-0000-1000-000000000000" ) ;
UUID ncItemUuid = new UUID ( "00000000-0000-0000-1100-000000000000" ) ;
AssetBase ncAsset
= AssetHelpers . CreateAsset ( ncAssetUuid , AssetType . Notecard , nc . AssetData , UUID . Zero ) ;
m_scene . AssetService . Store ( ncAsset ) ;
SceneObjectGroup sog2 = new SceneObjectGroup ( part2 ) ;
TaskInventoryItem ncItem
= new TaskInventoryItem { Name = "ncItem" , AssetID = ncAssetUuid , ItemID = ncItemUuid } ;
part2 . Inventory . AddInventoryItem ( ncItem , true ) ;
m_scene . AddNewSceneObject ( sog2 , false ) ;
2009-05-18 17:46:14 +00:00
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
2010-01-29 20:59:56 +00:00
m_scene . EventManager . OnOarFileSaved + = SaveCompleted ;
2009-05-18 17:46:14 +00:00
Guid requestId = new Guid ( "00000000-0000-0000-0000-808080808080" ) ;
2009-04-15 19:12:37 +00:00
2009-05-18 17:46:14 +00:00
lock ( this )
{
2010-01-29 20:59:56 +00:00
m_archiverModule . ArchiveRegion ( archiveWriteStream , requestId ) ;
2009-05-18 17:46:14 +00:00
//AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer;
//while (assetServer.HasWaitingRequests())
2009-09-30 16:00:09 +00:00
// assetServer.ProcessNextRequest();
2009-04-14 18:49:45 +00:00
2009-05-18 17:46:14 +00:00
Monitor . Wait ( this , 60000 ) ;
}
2009-04-15 19:12:37 +00:00
2009-05-18 17:46:14 +00:00
Assert . That ( m_lastRequestId , Is . EqualTo ( requestId ) ) ;
byte [ ] archive = archiveWriteStream . ToArray ( ) ;
MemoryStream archiveReadStream = new MemoryStream ( archive ) ;
TarArchiveReader tar = new TarArchiveReader ( archiveReadStream ) ;
2010-05-21 18:36:39 +00:00
bool gotNcAssetFile = false ;
string expectedNcAssetFileName = string . Format ( "{0}_{1}" , ncAssetUuid , "notecard.txt" ) ;
2010-05-21 19:43:11 +00:00
List < string > foundPaths = new List < string > ( ) ;
List < string > expectedPaths = new List < string > ( ) ;
expectedPaths . Add ( ArchiveHelpers . CreateObjectPath ( sog1 ) ) ;
expectedPaths . Add ( ArchiveHelpers . CreateObjectPath ( sog2 ) ) ;
2009-05-18 17:46:14 +00:00
string filePath ;
2011-04-18 21:35:33 +00:00
TarArchiveReader . TarEntryType tarEntryType ;
2009-05-18 17:46:14 +00:00
2011-04-18 21:35:33 +00:00
byte [ ] data = tar . ReadEntry ( out filePath , out tarEntryType ) ;
Assert . That ( filePath , Is . EqualTo ( ArchiveConstants . CONTROL_FILE_PATH ) ) ;
ArchiveReadRequest arr = new ArchiveReadRequest ( m_scene , ( Stream ) null , false , false , Guid . Empty ) ;
arr . LoadControlFile ( filePath , data ) ;
Assert . That ( arr . ControlFileLoaded , Is . True ) ;
2009-05-18 17:46:14 +00:00
while ( tar . ReadEntry ( out filePath , out tarEntryType ) ! = null )
{
2011-04-18 21:35:33 +00:00
if ( filePath . StartsWith ( ArchiveConstants . ASSETS_PATH ) )
2010-05-21 18:36:39 +00:00
{
string fileName = filePath . Remove ( 0 , ArchiveConstants . ASSETS_PATH . Length ) ;
Assert . That ( fileName , Is . EqualTo ( expectedNcAssetFileName ) ) ;
gotNcAssetFile = true ;
}
2009-05-18 17:46:14 +00:00
else if ( filePath . StartsWith ( ArchiveConstants . OBJECTS_PATH ) )
{
2010-05-21 19:43:11 +00:00
foundPaths . Add ( filePath ) ;
2009-05-18 17:46:14 +00:00
}
}
2010-05-21 18:36:39 +00:00
Assert . That ( gotNcAssetFile , Is . True , "No notecard asset file in archive" ) ;
2010-05-21 19:43:11 +00:00
Assert . That ( foundPaths , Is . EquivalentTo ( expectedPaths ) ) ;
2009-05-18 17:46:14 +00:00
// TODO: Test presence of more files and contents of files.
}
2009-01-23 20:38:44 +00:00
2011-05-26 00:27:01 +00:00
/// <summary>
/// Test saving an OpenSim Region Archive with the no assets option
/// </summary>
[Test]
public void TestSaveOarNoAssets ( )
{
TestHelper . InMethod ( ) ;
// log4net.Config.XmlConfigurator.Configure();
SceneObjectPart part1 = CreateSceneObjectPart1 ( ) ;
SceneObjectGroup sog1 = new SceneObjectGroup ( part1 ) ;
m_scene . AddNewSceneObject ( sog1 , false ) ;
SceneObjectPart part2 = CreateSceneObjectPart2 ( ) ;
AssetNotecard nc = new AssetNotecard ( ) ;
nc . BodyText = "Hello World!" ;
nc . Encode ( ) ;
UUID ncAssetUuid = new UUID ( "00000000-0000-0000-1000-000000000000" ) ;
UUID ncItemUuid = new UUID ( "00000000-0000-0000-1100-000000000000" ) ;
AssetBase ncAsset
= AssetHelpers . CreateAsset ( ncAssetUuid , AssetType . Notecard , nc . AssetData , UUID . Zero ) ;
m_scene . AssetService . Store ( ncAsset ) ;
SceneObjectGroup sog2 = new SceneObjectGroup ( part2 ) ;
TaskInventoryItem ncItem
= new TaskInventoryItem { Name = "ncItem" , AssetID = ncAssetUuid , ItemID = ncItemUuid } ;
part2 . Inventory . AddInventoryItem ( ncItem , true ) ;
m_scene . AddNewSceneObject ( sog2 , false ) ;
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
Guid requestId = new Guid ( "00000000-0000-0000-0000-808080808080" ) ;
Dictionary < string , Object > options = new Dictionary < string , Object > ( ) ;
options . Add ( "noassets" , true ) ;
m_archiverModule . ArchiveRegion ( archiveWriteStream , requestId , options ) ;
//AssetServerBase assetServer = (AssetServerBase)scene.CommsManager.AssetCache.AssetServer;
//while (assetServer.HasWaitingRequests())
// assetServer.ProcessNextRequest();
// Don't wait for completion - with --noassets save oar happens synchronously
// Monitor.Wait(this, 60000);
Assert . That ( m_lastRequestId , Is . EqualTo ( requestId ) ) ;
byte [ ] archive = archiveWriteStream . ToArray ( ) ;
MemoryStream archiveReadStream = new MemoryStream ( archive ) ;
TarArchiveReader tar = new TarArchiveReader ( archiveReadStream ) ;
List < string > foundPaths = new List < string > ( ) ;
List < string > expectedPaths = new List < string > ( ) ;
expectedPaths . Add ( ArchiveHelpers . CreateObjectPath ( sog1 ) ) ;
expectedPaths . Add ( ArchiveHelpers . CreateObjectPath ( sog2 ) ) ;
string filePath ;
TarArchiveReader . TarEntryType tarEntryType ;
byte [ ] data = tar . ReadEntry ( out filePath , out tarEntryType ) ;
Assert . That ( filePath , Is . EqualTo ( ArchiveConstants . CONTROL_FILE_PATH ) ) ;
ArchiveReadRequest arr = new ArchiveReadRequest ( m_scene , ( Stream ) null , false , false , Guid . Empty ) ;
arr . LoadControlFile ( filePath , data ) ;
Assert . That ( arr . ControlFileLoaded , Is . True ) ;
while ( tar . ReadEntry ( out filePath , out tarEntryType ) ! = null )
{
if ( filePath . StartsWith ( ArchiveConstants . ASSETS_PATH ) )
{
Assert . Fail ( "Asset was found in saved oar of TestSaveOarNoAssets()" ) ;
}
else if ( filePath . StartsWith ( ArchiveConstants . OBJECTS_PATH ) )
{
foundPaths . Add ( filePath ) ;
}
}
Assert . That ( foundPaths , Is . EquivalentTo ( expectedPaths ) ) ;
// TODO: Test presence of more files and contents of files.
}
2009-01-23 20:38:44 +00:00
/// <summary>
2010-11-20 03:01:47 +00:00
/// Test loading an OpenSim Region Archive.
2009-03-16 00:12:25 +00:00
/// </summary>
2009-01-23 20:38:44 +00:00
[Test]
2010-11-20 03:01:47 +00:00
public void TestLoadOar ( )
2009-01-23 20:38:44 +00:00
{
2009-05-07 19:07:08 +00:00
TestHelper . InMethod ( ) ;
2010-09-07 02:41:29 +00:00
// log4net.Config.XmlConfigurator.Configure();
2009-03-16 00:12:25 +00:00
2009-01-23 20:38:44 +00:00
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
2009-03-06 20:12:08 +00:00
TarArchiveWriter tar = new TarArchiveWriter ( archiveWriteStream ) ;
2009-04-28 19:40:02 +00:00
// Put in a random blank directory to check that this doesn't upset the load process
tar . WriteDir ( "ignoreme" ) ;
// Also check that direct entries which will also have a file entry containing that directory doesn't
// upset load
2009-09-30 16:00:09 +00:00
tar . WriteDir ( ArchiveConstants . TERRAINS_PATH ) ;
2010-01-22 20:32:34 +00:00
2011-05-26 00:27:01 +00:00
tar . WriteFile (
ArchiveConstants . CONTROL_FILE_PATH ,
new ArchiveWriteRequestPreparation ( null , ( Stream ) null , Guid . Empty ) . CreateControlFile ( new Dictionary < string , Object > ( ) ) ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 21:27:14 +00:00
SceneObjectPart part1 = CreateSceneObjectPart1 ( ) ;
2009-02-10 16:56:35 +00:00
SceneObjectGroup object1 = new SceneObjectGroup ( part1 ) ;
2009-04-22 18:09:55 +00:00
2010-01-22 20:32:34 +00:00
// Let's put some inventory items into our object
2010-01-29 18:11:53 +00:00
string soundItemName = "sound-item1" ;
2010-01-22 20:32:34 +00:00
UUID soundItemUuid = UUID . Parse ( "00000000-0000-0000-0000-000000000002" ) ;
Type type = GetType ( ) ;
Assembly assembly = type . Assembly ;
string soundDataResourceName = null ;
string [ ] names = assembly . GetManifestResourceNames ( ) ;
foreach ( string name in names )
{
if ( name . EndsWith ( ".Resources.test-sound.wav" ) )
2010-02-15 10:15:03 +00:00
soundDataResourceName = name ;
2010-01-22 20:32:34 +00:00
}
Assert . That ( soundDataResourceName , Is . Not . Null ) ;
2009-04-22 18:09:55 +00:00
2010-01-22 20:32:34 +00:00
byte [ ] soundData ;
Console . WriteLine ( "Loading " + soundDataResourceName ) ;
using ( Stream resource = assembly . GetManifestResourceStream ( soundDataResourceName ) )
{
using ( BinaryReader br = new BinaryReader ( resource ) )
{
// FIXME: Use the inspector insteadthere are so many forums and lists already, though admittedly none of them are suitable for cross virtual-enivornemnt discussion
soundData = br . ReadBytes ( 99999999 ) ;
UUID soundUuid = UUID . Parse ( "00000000-0000-0000-0000-000000000001" ) ;
string soundAssetFileName
= ArchiveConstants . ASSETS_PATH + soundUuid
+ ArchiveConstants . ASSET_TYPE_TO_EXTENSION [ ( sbyte ) AssetType . SoundWAV ] ;
tar . WriteFile ( soundAssetFileName , soundData ) ;
/ *
AssetBase soundAsset = AssetHelpers . CreateAsset ( soundUuid , soundData ) ;
scene . AssetService . Store ( soundAsset ) ;
asset1FileName = ArchiveConstants . ASSETS_PATH + soundUuid + ".wav" ;
* /
2010-01-29 18:11:53 +00:00
TaskInventoryItem item1
= new TaskInventoryItem { AssetID = soundUuid , ItemID = soundItemUuid , Name = soundItemName } ;
2010-01-22 20:32:34 +00:00
part1 . Inventory . AddInventoryItem ( item1 , true ) ;
}
2010-02-15 10:15:03 +00:00
}
2010-01-22 20:32:34 +00:00
2010-01-29 20:59:56 +00:00
m_scene . AddNewSceneObject ( object1 , false ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 16:56:35 +00:00
string object1FileName = string . Format (
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml" ,
2010-01-29 21:27:14 +00:00
part1 . Name ,
Math . Round ( part1 . GroupPosition . X ) , Math . Round ( part1 . GroupPosition . Y ) , Math . Round ( part1 . GroupPosition . Z ) ,
2009-03-16 00:12:25 +00:00
part1 . UUID ) ;
2009-05-14 16:33:04 +00:00
tar . WriteFile ( ArchiveConstants . OBJECTS_PATH + object1FileName , SceneObjectSerializer . ToXml2Format ( object1 ) ) ;
2009-04-28 19:40:02 +00:00
2009-03-06 20:12:08 +00:00
tar . Close ( ) ;
2009-03-16 00:12:25 +00:00
2009-01-23 20:38:44 +00:00
MemoryStream archiveReadStream = new MemoryStream ( archiveWriteStream . ToArray ( ) ) ;
2009-03-16 00:12:25 +00:00
2009-04-28 19:40:02 +00:00
lock ( this )
{
2010-01-29 20:59:56 +00:00
m_scene . EventManager . OnOarFileLoaded + = LoadCompleted ;
m_archiverModule . DearchiveRegion ( archiveReadStream ) ;
2009-09-30 16:00:09 +00:00
}
2009-04-28 19:40:02 +00:00
Assert . That ( m_lastErrorMessage , Is . Null ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 21:27:14 +00:00
SceneObjectPart object1PartLoaded = m_scene . GetSceneObjectPart ( part1 . Name ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 16:56:35 +00:00
Assert . That ( object1PartLoaded , Is . Not . Null , "object1 was not loaded" ) ;
2010-01-29 21:27:14 +00:00
Assert . That ( object1PartLoaded . Name , Is . EqualTo ( part1 . Name ) , "object1 names not identical" ) ;
Assert . That ( object1PartLoaded . GroupPosition , Is . EqualTo ( part1 . GroupPosition ) , "object1 group position not equal" ) ;
2009-02-10 16:56:35 +00:00
Assert . That (
2010-01-29 21:27:14 +00:00
object1PartLoaded . RotationOffset , Is . EqualTo ( part1 . RotationOffset ) , "object1 rotation offset not equal" ) ;
2009-02-10 16:56:35 +00:00
Assert . That (
2010-01-29 21:27:14 +00:00
object1PartLoaded . OffsetPosition , Is . EqualTo ( part1 . OffsetPosition ) , "object1 offset position not equal" ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 18:11:53 +00:00
TaskInventoryItem loadedSoundItem = object1PartLoaded . Inventory . GetInventoryItems ( soundItemName ) [ 0 ] ;
2010-01-22 20:32:34 +00:00
Assert . That ( loadedSoundItem , Is . Not . Null , "loaded sound item was null" ) ;
2010-01-29 20:59:56 +00:00
AssetBase loadedSoundAsset = m_scene . AssetService . Get ( loadedSoundItem . AssetID . ToString ( ) ) ;
2010-01-22 20:32:34 +00:00
Assert . That ( loadedSoundAsset , Is . Not . Null , "loaded sound asset was null" ) ;
Assert . That ( loadedSoundAsset . Data , Is . EqualTo ( soundData ) , "saved and loaded sound data do not match" ) ;
2009-03-16 00:12:25 +00:00
2011-05-12 11:42:28 +00:00
Assert . Greater ( m_scene . LandChannel . AllParcels ( ) . Count , 0 , "incorrect number of parcels" ) ;
2009-03-13 20:46:53 +00:00
// Temporary
2009-03-16 00:12:25 +00:00
Console . WriteLine ( "Successfully completed {0}" , MethodBase . GetCurrentMethod ( ) ) ;
2009-01-23 20:38:44 +00:00
}
2009-03-16 00:12:25 +00:00
2010-01-22 16:22:23 +00:00
/// <summary>
2010-11-20 03:01:47 +00:00
/// Test loading the region settings of an OpenSim Region Archive.
2010-01-22 16:22:23 +00:00
/// </summary>
[Test]
2010-11-20 03:01:47 +00:00
public void TestLoadOarRegionSettings ( )
2010-01-22 16:22:23 +00:00
{
TestHelper . InMethod ( ) ;
2010-02-15 10:15:03 +00:00
//log4net.Config.XmlConfigurator.Configure();
2010-01-22 16:22:23 +00:00
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
TarArchiveWriter tar = new TarArchiveWriter ( archiveWriteStream ) ;
2010-02-15 10:15:03 +00:00
tar . WriteDir ( ArchiveConstants . TERRAINS_PATH ) ;
2011-05-26 00:27:01 +00:00
tar . WriteFile (
ArchiveConstants . CONTROL_FILE_PATH ,
new ArchiveWriteRequestPreparation ( null , ( Stream ) null , Guid . Empty ) . CreateControlFile ( new Dictionary < string , Object > ( ) ) ) ;
2010-01-22 16:22:23 +00:00
RegionSettings rs = new RegionSettings ( ) ;
rs . AgentLimit = 17 ;
rs . AllowDamage = true ;
rs . AllowLandJoinDivide = true ;
rs . AllowLandResell = true ;
rs . BlockFly = true ;
rs . BlockShowInSearch = true ;
rs . BlockTerraform = true ;
rs . DisableCollisions = true ;
rs . DisablePhysics = true ;
rs . DisableScripts = true ;
rs . Elevation1NW = 15.9 ;
2010-02-15 10:15:03 +00:00
rs . Elevation1NE = 45.3 ;
2010-01-22 16:22:23 +00:00
rs . Elevation1SE = 49 ;
rs . Elevation1SW = 1.9 ;
rs . Elevation2NW = 4.5 ;
2010-02-15 10:15:03 +00:00
rs . Elevation2NE = 19.2 ;
2010-01-22 16:22:23 +00:00
rs . Elevation2SE = 9.2 ;
rs . Elevation2SW = 2.1 ;
rs . FixedSun = true ;
rs . ObjectBonus = 1.4 ;
rs . RestrictPushing = true ;
rs . TerrainLowerLimit = 0.4 ;
rs . TerrainRaiseLimit = 17.9 ;
rs . TerrainTexture1 = UUID . Parse ( "00000000-0000-0000-0000-000000000020" ) ;
rs . TerrainTexture2 = UUID . Parse ( "00000000-0000-0000-0000-000000000040" ) ;
rs . TerrainTexture3 = UUID . Parse ( "00000000-0000-0000-0000-000000000060" ) ;
rs . TerrainTexture4 = UUID . Parse ( "00000000-0000-0000-0000-000000000080" ) ;
rs . UseEstateSun = true ;
rs . WaterHeight = 23 ;
tar . WriteFile ( ArchiveConstants . SETTINGS_PATH + "region1.xml" , RegionSettingsSerializer . Serialize ( rs ) ) ;
tar . Close ( ) ;
MemoryStream archiveReadStream = new MemoryStream ( archiveWriteStream . ToArray ( ) ) ;
lock ( this )
{
2010-01-29 20:59:56 +00:00
m_scene . EventManager . OnOarFileLoaded + = LoadCompleted ;
m_archiverModule . DearchiveRegion ( archiveReadStream ) ;
2010-01-22 16:22:23 +00:00
}
Assert . That ( m_lastErrorMessage , Is . Null ) ;
2010-01-29 20:59:56 +00:00
RegionSettings loadedRs = m_scene . RegionInfo . RegionSettings ;
2010-01-22 16:22:23 +00:00
Assert . That ( loadedRs . AgentLimit , Is . EqualTo ( 17 ) ) ;
2010-01-22 17:17:25 +00:00
Assert . That ( loadedRs . AllowDamage , Is . True ) ;
Assert . That ( loadedRs . AllowLandJoinDivide , Is . True ) ;
Assert . That ( loadedRs . AllowLandResell , Is . True ) ;
Assert . That ( loadedRs . BlockFly , Is . True ) ;
Assert . That ( loadedRs . BlockShowInSearch , Is . True ) ;
Assert . That ( loadedRs . BlockTerraform , Is . True ) ;
Assert . That ( loadedRs . DisableCollisions , Is . True ) ;
Assert . That ( loadedRs . DisablePhysics , Is . True ) ;
Assert . That ( loadedRs . DisableScripts , Is . True ) ;
Assert . That ( loadedRs . Elevation1NW , Is . EqualTo ( 15.9 ) ) ;
Assert . That ( loadedRs . Elevation1NE , Is . EqualTo ( 45.3 ) ) ;
Assert . That ( loadedRs . Elevation1SE , Is . EqualTo ( 49 ) ) ;
Assert . That ( loadedRs . Elevation1SW , Is . EqualTo ( 1.9 ) ) ;
Assert . That ( loadedRs . Elevation2NW , Is . EqualTo ( 4.5 ) ) ;
Assert . That ( loadedRs . Elevation2NE , Is . EqualTo ( 19.2 ) ) ;
Assert . That ( loadedRs . Elevation2SE , Is . EqualTo ( 9.2 ) ) ;
Assert . That ( loadedRs . Elevation2SW , Is . EqualTo ( 2.1 ) ) ;
Assert . That ( loadedRs . FixedSun , Is . True ) ;
Assert . That ( loadedRs . ObjectBonus , Is . EqualTo ( 1.4 ) ) ;
Assert . That ( loadedRs . RestrictPushing , Is . True ) ;
Assert . That ( loadedRs . TerrainLowerLimit , Is . EqualTo ( 0.4 ) ) ;
Assert . That ( loadedRs . TerrainRaiseLimit , Is . EqualTo ( 17.9 ) ) ;
Assert . That ( loadedRs . TerrainTexture1 , Is . EqualTo ( UUID . Parse ( "00000000-0000-0000-0000-000000000020" ) ) ) ;
Assert . That ( loadedRs . TerrainTexture2 , Is . EqualTo ( UUID . Parse ( "00000000-0000-0000-0000-000000000040" ) ) ) ;
Assert . That ( loadedRs . TerrainTexture3 , Is . EqualTo ( UUID . Parse ( "00000000-0000-0000-0000-000000000060" ) ) ) ;
Assert . That ( loadedRs . TerrainTexture4 , Is . EqualTo ( UUID . Parse ( "00000000-0000-0000-0000-000000000080" ) ) ) ;
Assert . That ( loadedRs . UseEstateSun , Is . True ) ;
Assert . That ( loadedRs . WaterHeight , Is . EqualTo ( 23 ) ) ;
2010-01-22 16:22:23 +00:00
}
2009-02-10 18:43:36 +00:00
/// <summary>
2010-11-20 03:01:47 +00:00
/// Test merging an OpenSim Region Archive into an existing scene
2009-09-30 16:00:09 +00:00
/// </summary>
2009-04-24 19:43:54 +00:00
//[Test]
2010-11-20 03:01:47 +00:00
public void TestMergeOar ( )
2009-02-10 18:43:36 +00:00
{
2009-05-07 19:07:08 +00:00
TestHelper . InMethod ( ) ;
2009-02-13 20:12:11 +00:00
//XmlConfigurator.Configure();
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
2010-01-29 21:45:07 +00:00
// string part2Name = "objectMerge";
// PrimitiveBaseShape part2Shape = PrimitiveBaseShape.CreateCylinder();
// Vector3 part2GroupPosition = new Vector3(90, 80, 70);
// Quaternion part2RotationOffset = new Quaternion(60, 70, 80, 90);
// Vector3 part2OffsetPosition = new Vector3(20, 25, 30);
2010-02-15 10:15:03 +00:00
SceneObjectPart part2 = CreateSceneObjectPart2 ( ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
// Create an oar file that we can use for the merge
{
ArchiverModule archiverModule = new ArchiverModule ( ) ;
SerialiserModule serialiserModule = new SerialiserModule ( ) ;
TerrainModule terrainModule = new TerrainModule ( ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
Scene scene = SceneSetupHelpers . SetupScene ( ) ;
2010-02-15 10:15:03 +00:00
SceneSetupHelpers . SetupSceneModules ( scene , archiverModule , serialiserModule , terrainModule ) ;
2009-03-16 00:12:25 +00:00
2010-02-15 10:15:03 +00:00
m_scene . AddNewSceneObject ( new SceneObjectGroup ( part2 ) , false ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
// Write out this scene
scene . EventManager . OnOarFileSaved + = SaveCompleted ;
2009-03-16 00:12:25 +00:00
2009-02-17 16:51:09 +00:00
lock ( this )
{
2010-01-29 20:59:56 +00:00
m_archiverModule . ArchiveRegion ( archiveWriteStream ) ;
2009-02-17 16:51:09 +00:00
Monitor . Wait ( this , 60000 ) ;
}
2009-02-10 18:43:36 +00:00
}
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
{
2010-01-29 21:37:25 +00:00
SceneObjectPart part1 = CreateSceneObjectPart1 ( ) ;
m_scene . AddNewSceneObject ( new SceneObjectGroup ( part1 ) , false ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
// Merge in the archive we created earlier
2009-03-16 00:12:25 +00:00
byte [ ] archive = archiveWriteStream . ToArray ( ) ;
MemoryStream archiveReadStream = new MemoryStream ( archive ) ;
2010-04-16 21:29:11 +00:00
m_archiverModule . DearchiveRegion ( archiveReadStream , true , false , Guid . Empty ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 21:37:25 +00:00
SceneObjectPart object1Existing = m_scene . GetSceneObjectPart ( part1 . Name ) ;
2009-02-10 18:43:36 +00:00
Assert . That ( object1Existing , Is . Not . Null , "object1 was not present after merge" ) ;
2010-01-29 21:37:25 +00:00
Assert . That ( object1Existing . Name , Is . EqualTo ( part1 . Name ) , "object1 names not identical after merge" ) ;
Assert . That ( object1Existing . GroupPosition , Is . EqualTo ( part1 . GroupPosition ) , "object1 group position not equal after merge" ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 21:45:07 +00:00
SceneObjectPart object2PartMerged = m_scene . GetSceneObjectPart ( part2 . Name ) ;
2009-02-10 18:43:36 +00:00
Assert . That ( object2PartMerged , Is . Not . Null , "object2 was not present after merge" ) ;
2010-01-29 21:45:07 +00:00
Assert . That ( object2PartMerged . Name , Is . EqualTo ( part2 . Name ) , "object2 names not identical after merge" ) ;
Assert . That ( object2PartMerged . GroupPosition , Is . EqualTo ( part2 . GroupPosition ) , "object2 group position not equal after merge" ) ;
2009-03-16 00:12:25 +00:00
}
2009-02-10 18:43:36 +00:00
}
2009-01-16 18:31:07 +00:00
}
2009-03-12 06:03:59 +00:00
}