diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | 113 |
1 files changed, 112 insertions, 1 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs index 7c8c189..35045b5 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs | |||
@@ -799,7 +799,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
799 | } | 799 | } |
800 | 800 | ||
801 | [Test] | 801 | [Test] |
802 | public void TestSameSimulatorNeighbouringRegionsTeleport() | 802 | public void TestSameSimulatorNeighbouringRegionsTeleportV1() |
803 | { | 803 | { |
804 | TestHelpers.InMethod(); | 804 | TestHelpers.InMethod(); |
805 | // TestHelpers.EnableLogging(); | 805 | // TestHelpers.EnableLogging(); |
@@ -904,5 +904,116 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests | |||
904 | // Check events | 904 | // Check events |
905 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); | 905 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); |
906 | } | 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 | IConfig entityTransferConfig = config.AddConfig("EntityTransfer"); | ||
929 | |||
930 | modulesConfig.Set("InventoryAccessModule", "BasicInventoryAccessModule"); | ||
931 | |||
932 | SceneHelpers sh = new SceneHelpers(); | ||
933 | TestScene sceneA = sh.SetupScene("sceneA", TestHelpers.ParseTail(0x100), 1000, 1000); | ||
934 | TestScene sceneB = sh.SetupScene("sceneB", TestHelpers.ParseTail(0x200), 1001, 1000); | ||
935 | |||
936 | SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); | ||
937 | SceneHelpers.SetupSceneModules( | ||
938 | sceneA, config, new CapabilitiesModule(), etmA, attModA, new BasicInventoryAccessModule()); | ||
939 | SceneHelpers.SetupSceneModules( | ||
940 | sceneB, config, new CapabilitiesModule(), etmB, attModB, new BasicInventoryAccessModule()); | ||
941 | |||
942 | UserAccount ua1 = UserAccountHelpers.CreateUserWithInventory(sceneA, 0x1); | ||
943 | |||
944 | AgentCircuitData acd = SceneHelpers.GenerateAgentData(ua1.PrincipalID); | ||
945 | TestClient tc = new TestClient(acd, sceneA); | ||
946 | List<TestClient> destinationTestClients = new List<TestClient>(); | ||
947 | EntityTransferHelpers.SetUpInformClientOfNeighbour(tc, destinationTestClients); | ||
948 | |||
949 | ScenePresence beforeTeleportSp = SceneHelpers.AddScenePresence(sceneA, tc, acd); | ||
950 | beforeTeleportSp.AbsolutePosition = new Vector3(30, 31, 32); | ||
951 | |||
952 | Assert.That(destinationTestClients.Count, Is.EqualTo(1)); | ||
953 | Assert.That(destinationTestClients[0], Is.Not.Null); | ||
954 | |||
955 | InventoryItemBase attItem = CreateAttachmentItem(sceneA, ua1.PrincipalID, "att", 0x10, 0x20); | ||
956 | |||
957 | sceneA.AttachmentsModule.RezSingleAttachmentFromInventory( | ||
958 | beforeTeleportSp, attItem.ID, (uint)AttachmentPoint.Chest); | ||
959 | |||
960 | Vector3 teleportPosition = new Vector3(10, 11, 12); | ||
961 | Vector3 teleportLookAt = new Vector3(20, 21, 22); | ||
962 | |||
963 | // Here, we need to make clientA's receipt of SendRegionTeleport trigger clientB's CompleteMovement(). This | ||
964 | // is to operate the teleport V2 mechanism where the EntityTransferModule will first request the client to | ||
965 | // CompleteMovement to the region and then call UpdateAgent to the destination region to confirm the receipt | ||
966 | // Both these operations will occur on different threads and will wait for each other. | ||
967 | // We have to do this via ThreadPool directly since FireAndForget has been switched to sync for the V1 | ||
968 | // test protocol, where we are trying to avoid unpredictable async operations in regression tests. | ||
969 | ((TestClient)beforeTeleportSp.ControllingClient).OnTestClientSendRegionTeleport | ||
970 | += (regionHandle, simAccess, regionExternalEndPoint, locationID, flags, capsURL) | ||
971 | => ThreadPool.UnsafeQueueUserWorkItem(o => destinationTestClients[0].CompleteMovement(), null); | ||
972 | |||
973 | m_numberOfAttachEventsFired = 0; | ||
974 | sceneA.RequestTeleportLocation( | ||
975 | beforeTeleportSp.ControllingClient, | ||
976 | sceneB.RegionInfo.RegionHandle, | ||
977 | teleportPosition, | ||
978 | teleportLookAt, | ||
979 | (uint)TeleportFlags.ViaLocation); | ||
980 | |||
981 | // Check attachments have made it into sceneB | ||
982 | ScenePresence afterTeleportSceneBSp = sceneB.GetScenePresence(ua1.PrincipalID); | ||
983 | |||
984 | // This is appearance data, as opposed to actually rezzed attachments | ||
985 | List<AvatarAttachment> sceneBAttachments = afterTeleportSceneBSp.Appearance.GetAttachments(); | ||
986 | Assert.That(sceneBAttachments.Count, Is.EqualTo(1)); | ||
987 | Assert.That(sceneBAttachments[0].AttachPoint, Is.EqualTo((int)AttachmentPoint.Chest)); | ||
988 | Assert.That(sceneBAttachments[0].ItemID, Is.EqualTo(attItem.ID)); | ||
989 | Assert.That(sceneBAttachments[0].AssetID, Is.EqualTo(attItem.AssetID)); | ||
990 | Assert.That(afterTeleportSceneBSp.Appearance.GetAttachpoint(attItem.ID), Is.EqualTo((int)AttachmentPoint.Chest)); | ||
991 | |||
992 | // This is the actual attachment | ||
993 | List<SceneObjectGroup> actualSceneBAttachments = afterTeleportSceneBSp.GetAttachments(); | ||
994 | Assert.That(actualSceneBAttachments.Count, Is.EqualTo(1)); | ||
995 | SceneObjectGroup actualSceneBAtt = actualSceneBAttachments[0]; | ||
996 | Assert.That(actualSceneBAtt.Name, Is.EqualTo(attItem.Name)); | ||
997 | Assert.That(actualSceneBAtt.AttachmentPoint, Is.EqualTo((uint)AttachmentPoint.Chest)); | ||
998 | |||
999 | Assert.That(sceneB.GetSceneObjectGroups().Count, Is.EqualTo(1)); | ||
1000 | |||
1001 | // Check attachments have been removed from sceneA | ||
1002 | ScenePresence afterTeleportSceneASp = sceneA.GetScenePresence(ua1.PrincipalID); | ||
1003 | |||
1004 | // Since this is appearance data, it is still present on the child avatar! | ||
1005 | List<AvatarAttachment> sceneAAttachments = afterTeleportSceneASp.Appearance.GetAttachments(); | ||
1006 | Assert.That(sceneAAttachments.Count, Is.EqualTo(1)); | ||
1007 | Assert.That(afterTeleportSceneASp.Appearance.GetAttachpoint(attItem.ID), Is.EqualTo((int)AttachmentPoint.Chest)); | ||
1008 | |||
1009 | // This is the actual attachment, which should no longer exist | ||
1010 | List<SceneObjectGroup> actualSceneAAttachments = afterTeleportSceneASp.GetAttachments(); | ||
1011 | Assert.That(actualSceneAAttachments.Count, Is.EqualTo(0)); | ||
1012 | |||
1013 | Assert.That(sceneA.GetSceneObjectGroups().Count, Is.EqualTo(0)); | ||
1014 | |||
1015 | // Check events | ||
1016 | Assert.That(m_numberOfAttachEventsFired, Is.EqualTo(0)); | ||
1017 | } | ||
907 | } | 1018 | } |
908 | } | 1019 | } |