diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Attachments/Tests')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | 129 |
1 files changed, 124 insertions, 5 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index 1a38619..f023e77 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -38,6 +38,8 @@ using NUnit.Framework; | |||
38 | using OpenMetaverse; | 38 | using OpenMetaverse; |
39 | using OpenSim.Framework; | 39 | using OpenSim.Framework; |
40 | using OpenSim.Framework.Communications; | 40 | using OpenSim.Framework.Communications; |
41 | using OpenSim.Framework.Servers; | ||
42 | using OpenSim.Framework.Servers.HttpServer; | ||
41 | using OpenSim.Region.CoreModules.Avatar.Attachments; | 43 | using OpenSim.Region.CoreModules.Avatar.Attachments; |
42 | using OpenSim.Region.CoreModules.Framework; | 44 | using OpenSim.Region.CoreModules.Framework; |
43 | using OpenSim.Region.CoreModules.Framework.EntityTransfer; | 45 | using OpenSim.Region.CoreModules.Framework.EntityTransfer; |
@@ -717,7 +719,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
717 | SceneObjectGroup rezzedAtt = presence.GetAttachments()[0]; | 719 | SceneObjectGroup rezzedAtt = presence.GetAttachments()[0]; |
718 | 720 | ||
719 | m_numberOfAttachEventsFired = 0; | 721 | m_numberOfAttachEventsFired = 0; |
720 | scene.IncomingCloseAgent(presence.UUID, false); | 722 | scene.CloseAgent(presence.UUID, false); |
721 | 723 | ||
722 | // Check that we can't retrieve this attachment from the scene. | 724 | // Check that we can't retrieve this attachment from the scene. |
723 | Assert.That(scene.GetSceneObjectGroup(rezzedAtt.UUID), Is.Null); | 725 | Assert.That(scene.GetSceneObjectGroup(rezzedAtt.UUID), Is.Null); |
@@ -797,11 +799,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
797 | } | 799 | } |
798 | 800 | ||
799 | [Test] | 801 | [Test] |
800 | public void TestSameSimulatorNeighbouringRegionsTeleport() | 802 | public void TestSameSimulatorNeighbouringRegionsTeleportV1() |
801 | { | 803 | { |
802 | TestHelpers.InMethod(); | 804 | TestHelpers.InMethod(); |
803 | // TestHelpers.EnableLogging(); | 805 | // TestHelpers.EnableLogging(); |
804 | 806 | ||
807 | BaseHttpServer httpServer = new BaseHttpServer(99999); | ||
808 | MainServer.AddHttpServer(httpServer); | ||
809 | MainServer.Instance = httpServer; | ||
810 | |||
805 | AttachmentsModule attModA = new AttachmentsModule(); | 811 | AttachmentsModule attModA = new AttachmentsModule(); |
806 | AttachmentsModule attModB = new AttachmentsModule(); | 812 | AttachmentsModule attModB = new AttachmentsModule(); |
807 | EntityTransferModule etmA = new EntityTransferModule(); | 813 | EntityTransferModule etmA = new EntityTransferModule(); |
@@ -830,14 +836,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
830 | SceneHelpers.SetupSceneModules( | 836 | SceneHelpers.SetupSceneModules( |
831 | sceneB, config, new CapabilitiesModule(), etmB, attModB, new BasicInventoryAccessModule()); | 837 | sceneB, config, new CapabilitiesModule(), etmB, attModB, new BasicInventoryAccessModule()); |
832 | 838 | ||
839 | // FIXME: Hack - this is here temporarily to revert back to older entity transfer behaviour | ||
840 | lscm.ServiceVersion = "SIMULATION/0.1"; | ||
841 | |||
833 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); | 842 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); |
834 | 843 | ||
835 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); | 844 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); |
836 | TestClient tc = new TestClient(acd, sceneA, sh.SceneManager); | 845 | TestClient tc = new TestClient(acd, sceneA); |
837 | List<TestClient> destinationTestClients = new List<TestClient>(); | 846 | List<TestClient> destinationTestClients = new List<TestClient>(); |
838 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | 847 | EntityTransferHelpers.SetupInformClientOfNeighbourTriggersNeighbourClientCreate(tc, destinationTestClients); |
839 | 848 | ||
840 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd, sh.SceneManager); | 849 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); |
841 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); | 850 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); |
842 | 851 | ||
843 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); | 852 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); |
@@ -895,5 +904,115 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
895 | // Check events | 904 | // Check events |
896 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); | 905 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); |
897 | } | 906 | } |
907 | |||
908 | [Test] | ||
909 | public void TestSameSimulatorNeighbouringRegionsTeleportV2() | ||
910 | { | ||
911 | TestHelpers.InMethod(); | ||
912 | // TestHelpers.EnableLogging(); | ||
913 | |||
914 | BaseHttpServer httpServer = new BaseHttpServer(99999); | ||
915 | MainServer.AddHttpServer(httpServer); | ||
916 | MainServer.Instance = httpServer; | ||
917 | |||
918 | AttachmentsModule attModA = new AttachmentsModule(); | ||
919 | AttachmentsModule attModB = new AttachmentsModule(); | ||
920 | EntityTransferModule etmA = new EntityTransferModule(); | ||
921 | EntityTransferModule etmB = new EntityTransferModule(); | ||
922 | LocalSimulationConnectorModule lscm = new LocalSimulationConnectorModule(); | ||
923 | |||
924 | IConfigSource config = new IniConfigSource(); | ||
925 | IConfig modulesConfig = config.AddConfig("Modules"); | ||
926 | modulesConfig.Set("EntityTransferModule", etmA.Name); | ||
927 | modulesConfig.Set("SimulationServices", lscm.Name); | ||
928 | |||
929 | modulesConfig.Set("InventoryAccessModule", "BasicInventoryAccessModule"); | ||
930 | |||
931 | SceneHelpers sh = new SceneHelpers(); | ||
932 | TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); | ||
933 | TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1001, 1000); | ||
934 | |||
935 | SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); | ||
936 | SceneHelpers.SetupSceneModules( | ||
937 | sceneA, config, new CapabilitiesModule(), etmA, attModA, new BasicInventoryAccessModule()); | ||
938 | SceneHelpers.SetupSceneModules( | ||
939 | sceneB, config, new CapabilitiesModule(), etmB, attModB, new BasicInventoryAccessModule()); | ||
940 | |||
941 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); | ||
942 | |||
943 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); | ||
944 | TestClient tc = new TestClient(acd, sceneA); | ||
945 | List<TestClient> destinationTestClients = new List<TestClient>(); | ||
946 | EntityTransferHelpers.SetupInformClientOfNeighbourTriggersNeighbourClientCreate(tc, destinationTestClients); | ||
947 | |||
948 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); | ||
949 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); | ||
950 | |||
951 | Assert.That(destinationTestClients.Count, Is.EqualTo(1)); | ||
952 | Assert.That(destinationTestClients[0], Is.Not.Null); | ||
953 | |||
954 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); | ||
955 | |||
956 | sceneA.AttachmentsModule.RezSingleAttachmentFromInventory( | ||
957 | beforeTeleportSp, attItem.ID, (uint)AttachmentPoint.Chest); | ||
958 | |||
959 | Vector3 teleportPosition = new Vector3(10, 11, 12); | ||
960 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | ||
961 | |||
962 | // Here, we need to make clientA's receipt of SendRegionTeleport trigger clientB's CompleteMovement(). This | ||
963 | // is to operate the teleport V2 mechanism where the EntityTransferModule will first request the client to | ||
964 | // CompleteMovement to the region and then call UpdateAgent to the destination region to confirm the receipt | ||
965 | // Both these operations will occur on different threads and will wait for each other. | ||
966 | // We have to do this via ThreadPool directly since FireAndForget has been switched to sync for the V1 | ||
967 | // test protocol, where we are trying to avoid unpredictable async operations in regression tests. | ||
968 | tc.OnTestClientSendRegionTeleport | ||
969 | += (regionHandle, simAccess, regionExternalEndPoint, locationID, flags, capsURL) | ||
970 | => ThreadPool.UnsafeQueueUserWorkItem(o => destinationTestClients[0].CompleteMovement(), null); | ||
971 | |||
972 | m_numberOfAttachEventsFired = 0; | ||
973 | sceneA.RequestTeleportLocation( | ||
974 | beforeTeleportSp.ControllingClient, | ||
975 | sceneB.RegionInfo.RegionHandle, | ||
976 | teleportPosition, | ||
977 | teleportLookAt, | ||
978 | (uint)TeleportFlags.ViaLocation); | ||
979 | |||
980 | // Check attachments have made it into sceneB | ||
981 | ScenePresence afterTeleportSceneBSp = sceneB.GetScenePresence(ua1.PrincipalID); | ||
982 | |||
983 | // This is appearance data, as opposed to actually rezzed attachments | ||
984 | List<AvatarAttachment> sceneBAttachments = afterTeleportSceneBSp.Appearance.GetAttachments(); | ||
985 | Assert.That(sceneBAttachments.Count, Is.EqualTo(1)); | ||
986 | Assert.That(sceneBAttachments[0].AttachPoint, Is.EqualTo((int)AttachmentPoint.Chest)); | ||
987 | Assert.That(sceneBAttachments[0].ItemID, Is.EqualTo(attItem.ID)); | ||
988 | Assert.That(sceneBAttachments[0].AssetID, Is.EqualTo(attItem.AssetID)); | ||
989 | Assert.That(afterTeleportSceneBSp.Appearance.GetAttachpoint(attItem.ID), Is.EqualTo((int)AttachmentPoint.Chest)); | ||
990 | |||
991 | // This is the actual attachment | ||
992 | List<SceneObjectGroup> actualSceneBAttachments = afterTeleportSceneBSp.GetAttachments(); | ||
993 | Assert.That(actualSceneBAttachments.Count, Is.EqualTo(1)); | ||
994 | SceneObjectGroup actualSceneBAtt = actualSceneBAttachments[0]; | ||
995 | Assert.That(actualSceneBAtt.Name, Is.EqualTo(attItem.Name)); | ||
996 | Assert.That(actualSceneBAtt.AttachmentPoint, Is.EqualTo((uint)AttachmentPoint.Chest)); | ||
997 | |||
998 | Assert.That(sceneB.GetSceneObjectGroups().Count, Is.EqualTo(1)); | ||
999 | |||
1000 | // Check attachments have been removed from sceneA | ||
1001 | ScenePresence afterTeleportSceneASp = sceneA.GetScenePresence(ua1.PrincipalID); | ||
1002 | |||
1003 | // Since this is appearance data, it is still present on the child avatar! | ||
1004 | List<AvatarAttachment> sceneAAttachments = afterTeleportSceneASp.Appearance.GetAttachments(); | ||
1005 | Assert.That(sceneAAttachments.Count, Is.EqualTo(1)); | ||
1006 | Assert.That(afterTeleportSceneASp.Appearance.GetAttachpoint(attItem.ID), Is.EqualTo((int)AttachmentPoint.Chest)); | ||
1007 | |||
1008 | // This is the actual attachment, which should no longer exist | ||
1009 | List<SceneObjectGroup> actualSceneAAttachments = afterTeleportSceneASp.GetAttachments(); | ||
1010 | Assert.That(actualSceneAAttachments.Count, Is.EqualTo(0)); | ||
1011 | |||
1012 | Assert.That(sceneA.GetSceneObjectGroups().Count, Is.EqualTo(0)); | ||
1013 | |||
1014 | // Check events | ||
1015 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); | ||
1016 | } | ||
898 | } | 1017 | } |
899 | } | 1018 | } |