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 ;
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 NUnit.Framework.SyntaxHelpers ;
using OpenMetaverse ;
using OpenSim.Framework ;
2009-04-14 18:49:45 +00:00
using OpenSim.Framework.Communications.Cache ;
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 ;
2009-02-12 18:59:45 +00:00
using OpenSim.Tests.Common.Setup ;
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-01-29 21:10:14 +00:00
protected SceneObjectPart m_part1 ;
2010-01-29 20:59:56 +00:00
[SetUp]
public void SetUp ( )
{
m_archiverModule = new ArchiverModule ( ) ;
SerialiserModule serialiserModule = new SerialiserModule ( ) ;
TerrainModule terrainModule = new TerrainModule ( ) ;
m_scene = SceneSetupHelpers . SetupScene ( "scene1" ) ;
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:10:14 +00:00
protected void AddSceneObject1 ( )
{
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 ) ;
m_part1
= new SceneObjectPart ( ownerId , shape , groupPosition , rotationOffset , offsetPosition ) { Name = partName } ;
m_scene . AddNewSceneObject ( new SceneObjectGroup ( m_part1 ) , false ) ;
}
2010-01-29 20:59:56 +00:00
2009-05-18 17:46:14 +00:00
/// <summary>
/// Test saving a V0.2 OpenSim Region Archive.
/// </summary>
[Test]
2009-05-18 18:22:15 +00:00
public void TestSaveOarV0_2 ( )
2009-05-18 17:46:14 +00:00
{
TestHelper . InMethod ( ) ;
2009-05-18 18:22:15 +00:00
//log4net.Config.XmlConfigurator.Configure();
2009-05-18 17:46:14 +00:00
2010-01-29 21:10:14 +00:00
AddSceneObject1 ( ) ;
2009-05-18 17:46:14 +00:00
SceneObjectPart part2 ;
// Create and add prim 2
{
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 ) ;
part2
= new SceneObjectPart (
ownerId , shape , groupPosition , rotationOffset , offsetPosition ) ;
part2 . Name = partName ;
2010-01-29 20:59:56 +00:00
m_scene . AddNewSceneObject ( new SceneObjectGroup ( part2 ) , 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 ) ;
bool gotControlFile = false ;
bool gotObject1File = false ;
bool gotObject2File = false ;
string expectedObject1FileName = string . Format (
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml" ,
2010-01-29 21:10:14 +00:00
m_part1 . Name ,
Math . Round ( m_part1 . GroupPosition . X ) , Math . Round ( m_part1 . GroupPosition . Y ) , Math . Round ( m_part1 . GroupPosition . Z ) ,
m_part1 . UUID ) ;
2009-05-18 17:46:14 +00:00
string expectedObject2FileName = string . Format (
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml" ,
part2 . Name ,
Math . Round ( part2 . GroupPosition . X ) , Math . Round ( part2 . GroupPosition . Y ) , Math . Round ( part2 . GroupPosition . Z ) ,
part2 . UUID ) ;
string filePath ;
TarArchiveReader . TarEntryType tarEntryType ;
while ( tar . ReadEntry ( out filePath , out tarEntryType ) ! = null )
{
if ( ArchiveConstants . CONTROL_FILE_PATH = = filePath )
{
gotControlFile = true ;
}
else if ( filePath . StartsWith ( ArchiveConstants . OBJECTS_PATH ) )
{
string fileName = filePath . Remove ( 0 , ArchiveConstants . OBJECTS_PATH . Length ) ;
2010-01-29 21:10:14 +00:00
if ( fileName . StartsWith ( m_part1 . Name ) )
2009-05-18 17:46:14 +00:00
{
Assert . That ( fileName , Is . EqualTo ( expectedObject1FileName ) ) ;
gotObject1File = true ;
}
else if ( fileName . StartsWith ( part2 . Name ) )
{
Assert . That ( fileName , Is . EqualTo ( expectedObject2FileName ) ) ;
gotObject2File = true ;
}
}
}
Assert . That ( gotControlFile , Is . True , "No control file in archive" ) ;
Assert . That ( gotObject1File , Is . True , "No object1 file in archive" ) ;
Assert . That ( gotObject2File , Is . True , "No object2 file in archive" ) ;
// TODO: Test presence of more files and contents of files.
}
2009-01-23 20:38:44 +00:00
/// <summary>
2009-02-10 16:56:35 +00:00
/// Test loading a V0.2 OpenSim Region Archive.
2009-03-16 00:12:25 +00:00
/// </summary>
2009-01-23 20:38:44 +00:00
[Test]
2009-05-18 18:22:15 +00:00
public void TestLoadOarV0_2 ( )
2009-01-23 20:38:44 +00:00
{
2009-05-07 19:07:08 +00:00
TestHelper . InMethod ( ) ;
2009-04-28 19:54:57 +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
2009-03-06 20:12:08 +00:00
tar . WriteFile ( ArchiveConstants . CONTROL_FILE_PATH , ArchiveWriteRequestExecution . Create0p2ControlFile ( ) ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 21:10:14 +00:00
AddSceneObject1 ( ) ;
2009-02-10 16:56:35 +00:00
string part1Name = "object1" ;
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 ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 16:56:35 +00:00
SceneObjectPart part1
= new SceneObjectPart (
UUID . Zero , shape , groupPosition , rotationOffset , offsetPosition ) ;
part1 . Name = part1Name ;
SceneObjectGroup object1 = new SceneObjectGroup ( part1 ) ;
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" ) )
soundDataResourceName = name ;
}
Assert . That ( soundDataResourceName , Is . Not . Null ) ;
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-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" ,
part1Name ,
Math . Round ( groupPosition . X ) , Math . Round ( groupPosition . Y ) , Math . Round ( 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 20:59:56 +00:00
SceneObjectPart object1PartLoaded = m_scene . GetSceneObjectPart ( part1Name ) ;
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" ) ;
2009-03-16 00:12:25 +00:00
Assert . That ( object1PartLoaded . Name , Is . EqualTo ( part1Name ) , "object1 names not identical" ) ;
2009-02-10 16:56:35 +00:00
Assert . That ( object1PartLoaded . GroupPosition , Is . EqualTo ( groupPosition ) , "object1 group position not equal" ) ;
Assert . That (
object1PartLoaded . RotationOffset , Is . EqualTo ( rotationOffset ) , "object1 rotation offset not equal" ) ;
Assert . That (
object1PartLoaded . OffsetPosition , Is . EqualTo ( 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-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>
/// Test loading the region settings of a V0.2 OpenSim Region Archive.
/// </summary>
[Test]
public void TestLoadOarV0_2RegionSettings ( )
{
TestHelper . InMethod ( ) ;
2010-01-29 20:59:56 +00:00
//log4net.Config.XmlConfigurator.Configure();
2010-01-22 16:22:23 +00:00
MemoryStream archiveWriteStream = new MemoryStream ( ) ;
TarArchiveWriter tar = new TarArchiveWriter ( archiveWriteStream ) ;
tar . WriteDir ( ArchiveConstants . TERRAINS_PATH ) ;
tar . WriteFile ( ArchiveConstants . CONTROL_FILE_PATH , ArchiveWriteRequestExecution . Create0p2ControlFile ( ) ) ;
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 ;
rs . Elevation1NE = 45.3 ;
rs . Elevation1SE = 49 ;
rs . Elevation1SW = 1.9 ;
rs . Elevation2NW = 4.5 ;
rs . Elevation2NE = 19.2 ;
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>
/// Test merging a V0.2 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]
2009-05-18 18:22:15 +00:00
public void TestMergeOarV0_2 ( )
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 ( ) ;
string part2Name = "objectMerge" ;
PrimitiveBaseShape part2Shape = PrimitiveBaseShape . CreateCylinder ( ) ;
Vector3 part2GroupPosition = new Vector3 ( 90 , 80 , 70 ) ;
Quaternion part2RotationOffset = new Quaternion ( 60 , 70 , 80 , 90 ) ;
2009-03-16 00:12:25 +00:00
Vector3 part2OffsetPosition = new Vector3 ( 20 , 25 , 30 ) ;
2009-02-10 18:43:36 +00:00
// Create an oar file that we can use for the merge
{
SceneObjectPart part2
= new SceneObjectPart (
UUID . Zero , part2Shape , part2GroupPosition , part2RotationOffset , part2OffsetPosition ) ;
part2 . Name = part2Name ;
SceneObjectGroup object2 = new SceneObjectGroup ( part2 ) ;
2009-03-16 00:12:25 +00:00
2010-01-29 20:59:56 +00:00
m_scene . AddNewSceneObject ( object2 , false ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
// Write out this scene
2010-01-29 20:59:56 +00:00
m_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
{
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 ( ) ;
SceneSetupHelpers . SetupSceneModules ( scene , archiverModule , serialiserModule , terrainModule ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
string part1Name = "objectExisting" ;
PrimitiveBaseShape part1Shape = PrimitiveBaseShape . CreateCylinder ( ) ;
Vector3 part1GroupPosition = new Vector3 ( 80 , 70 , 60 ) ;
Quaternion part1RotationOffset = new Quaternion ( 50 , 60 , 70 , 80 ) ;
Vector3 part1OffsetPosition = new Vector3 ( 15 , 20 , 25 ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
SceneObjectPart part1
= new SceneObjectPart (
UUID . Zero , part1Shape , part1GroupPosition , part1RotationOffset , part1OffsetPosition ) ;
part1 . Name = part1Name ;
2009-03-16 00:12:25 +00:00
SceneObjectGroup object1 = new SceneObjectGroup ( part1 ) ;
2009-02-10 18:43:36 +00:00
scene . AddNewSceneObject ( object1 , 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 ) ;
2009-04-15 19:12:37 +00:00
archiverModule . DearchiveRegion ( archiveReadStream , true , Guid . Empty ) ;
2009-03-16 00:12:25 +00:00
SceneObjectPart object1Existing = scene . GetSceneObjectPart ( part1Name ) ;
2009-02-10 18:43:36 +00:00
Assert . That ( object1Existing , Is . Not . Null , "object1 was not present after merge" ) ;
2009-03-16 00:12:25 +00:00
Assert . That ( object1Existing . Name , Is . EqualTo ( part1Name ) , "object1 names not identical after merge" ) ;
2009-02-10 18:43:36 +00:00
Assert . That ( object1Existing . GroupPosition , Is . EqualTo ( part1GroupPosition ) , "object1 group position not equal after merge" ) ;
2009-03-16 00:12:25 +00:00
2009-02-10 18:43:36 +00:00
SceneObjectPart object2PartMerged = scene . GetSceneObjectPart ( part2Name ) ;
Assert . That ( object2PartMerged , Is . Not . Null , "object2 was not present after merge" ) ;
2009-03-16 00:12:25 +00:00
Assert . That ( object2PartMerged . Name , Is . EqualTo ( part2Name ) , "object2 names not identical after merge" ) ;
2009-02-10 18:43:36 +00:00
Assert . That ( object2PartMerged . GroupPosition , Is . EqualTo ( part2GroupPosition ) , "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
}