Beispiel #1
0
    public void CreateFireFor_SendsPacketsToChosenClients()
    {
        var mtaServer = new TestingServer();
        var players   = new TestingPlayer[] {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };
        var additionalPlayers = new TestingPlayer[]
        {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };

        var service = new FireService(mtaServer);

        service.CreateFireFor(players, Vector3.Zero);

        foreach (var player in players)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_FIRE, player);
        }
        foreach (var player in additionalPlayers)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_FIRE, player, count: 0);
        }
    }
Beispiel #2
0
    public void HandlePacketRelaysPureSyncPacket()
    {
        var server       = new TestingServer();
        var sourcePlayer = server.AddFakePlayer();
        var otherPlayers = new TestingPlayer[] { server.AddFakePlayer(), server.AddFakePlayer(), server.AddFakePlayer() };

        Mock <ILogger> loggerMock = new();

        Mock <ISyncHandlerMiddleware <PlayerPureSyncPacket> > middlewareMock = new();

        middlewareMock.Setup(x => x.GetPlayersToSyncTo(sourcePlayer, It.IsAny <PlayerPureSyncPacket>())).Returns(otherPlayers);

        Mock <IElementCollection> elementCollectionMock = new();

        var handler = new PlayerPureSyncPacketHandler(loggerMock.Object, middlewareMock.Object, elementCollectionMock.Object);

        handler.HandlePacket(sourcePlayer.Client, new PlayerPureSyncPacket()
        {
        });

        foreach (var player in otherPlayers)
        {
            server.VerifyPacketSent(PacketId.PACKET_ID_PLAYER_PURESYNC, player);
        }
    }
        public static Binding WithSolidHttpTransport(this Binding binding, TestingServer server, XmlWriterSettings writerSettings = null)
        {
            var settings = writerSettings?.Clone() ?? new XmlWriterSettings();

            settings.CloseOutput = false;

            var custom = binding as CustomBinding;

            if (custom == null)
            {
                custom = new CustomBinding(binding);
            }

            var http = custom
                       .Elements
                       .OfType <HttpTransportBindingElement>()
                       .Where(e => e.Scheme == "http" || e.Scheme == "https")
                       .FirstOrDefault()
            ;

            if (http != null)
            {
                var solid = new SolidHttpTransportBindingElement(server, settings);
                custom.Elements.Remove(http);
                custom.Elements.Add(solid);
            }
            return(custom);
        }
Beispiel #4
0
        public BaseTest()
        {
            _transferService = new Mock <ITransferService>();
            _serverInfo      = new TestingServerInfo
            {
                Ip     = "1.1.1.1",
                Port   = 443,
                Status = ServerStatus.Busy
            };

            _server = new TestingServer(_serverInfo, _transferService.Object);

            _task = new TaskDefinition
            {
                Id     = Guid.NewGuid(),
                Points = 100
            };
            _upload = new Upload
            {
                Id     = Guid.NewGuid(),
                TaskId = _task.Id,
                Task   = _task,
                UserId = Guid.NewGuid().ToString()
            };
            _uploadData = new UploadData(_upload.Id, nameof(_uploadData));
        }
    public void HandlePacketRelaysPureSyncPacket()
    {
        var server       = new TestingServer();
        var sourcePlayer = server.AddFakePlayer();
        var otherPlayers = new TestingPlayer[] { server.AddFakePlayer(), server.AddFakePlayer(), server.AddFakePlayer() };

        Mock <ILogger> loggerMock = new();

        Mock <ISyncHandlerMiddleware <PlayerPureSyncPacket> > middlewareMock = new();

        middlewareMock.Setup(x => x.GetPlayersToSyncTo(sourcePlayer, It.IsAny <PlayerPureSyncPacket>())).Returns(otherPlayers);

        Mock <IElementRepository> elementRepositoryMock = new();

        var handler = new PlayerPureSyncPacketHandler(loggerMock.Object, middlewareMock.Object, elementRepositoryMock.Object);

        handler.HandlePacket(sourcePlayer.Client, new PlayerPureSyncPacket()
        {
        });

        foreach (var player in otherPlayers)
        {
            server.NetWrapperMock.Verify(x => x.SendPacket(
                                             player.Address,
                                             PacketId.PACKET_ID_PLAYER_PURESYNC,
                                             It.IsAny <ushort>(),
                                             It.IsAny <byte[]>(),
                                             It.IsAny <PacketPriority>(),
                                             It.IsAny <PacketReliability>()));
        }
    }
    public void CreateExplosionFor_SendsPacketsToChosenClients()
    {
        var mtaServer = new TestingServer();
        var players   = new TestingPlayer[] {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };
        var additionalPlayers = new TestingPlayer[]
        {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };

        var service = new ExplosionService(mtaServer);

        service.CreateExplosionFor(players, Vector3.Zero, Enums.ExplosionType.WeakRocket);

        foreach (var player in players)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_EXPLOSION, player);
        }
        foreach (var player in additionalPlayers)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_EXPLOSION, player, count: 0);
        }
    }
    public void HandlePacketAppliesSyncData()
    {
        var server       = new TestingServer();
        var sourcePlayer = server.AddFakePlayer();

        Mock <ILogger> loggerMock = new();
        Mock <ISyncHandlerMiddleware <PlayerPureSyncPacket> > middlewareMock = new();
        Mock <IElementRepository> elementRepositoryMock = new();

        var handler = new PlayerPureSyncPacketHandler(loggerMock.Object, middlewareMock.Object, elementRepositoryMock.Object);

        handler.HandlePacket(sourcePlayer.Client, new PlayerPureSyncPacket()
        {
            Position   = new Vector3(10, 10, 10),
            Rotation   = 0.25f * MathF.PI,
            Health     = 50,
            Armor      = 75,
            WeaponSlot = 1
        });

        sourcePlayer.Position.Should().Be(new Vector3(10, 10, 10));
        sourcePlayer.PedRotation.Should().Be(45);
        sourcePlayer.Rotation.Should().Be(new Vector3(0, 0, 45));
        sourcePlayer.Health.Should().Be(50);
        sourcePlayer.Armor.Should().Be(75);
        sourcePlayer.CurrentWeaponSlot = WeaponSlot.Melee;
    }
    public void BroadcastPacket_SendsPacketToAllPlayers()
    {
        var server = new TestingServer();

        var player  = server.AddFakePlayer();
        var player2 = server.AddFakePlayer();

        server.BroadcastPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.NetWrapperMock.Verify(x => x.SendPacket(
                                         player.Address,
                                         PacketId.PACKET_ID_LUA_ELEMENT_RPC,
                                         It.IsAny <ushort>(),
                                         It.IsAny <byte[]>(),
                                         It.IsAny <PacketPriority>(),
                                         It.IsAny <PacketReliability>()
                                         ), Times.Once);
        server.NetWrapperMock.Verify(x => x.SendPacket(
                                         player2.Address,
                                         PacketId.PACKET_ID_LUA_ELEMENT_RPC,
                                         It.IsAny <ushort>(),
                                         It.IsAny <byte[]>(),
                                         It.IsAny <PacketPriority>(),
                                         It.IsAny <PacketReliability>()
                                         ), Times.Once);
    }
 public UploadProcessor(Upload upload, UploadData uploadData,
                        TestingServer server, RelationalDbContext context)
 {
     _upload     = upload;
     _uploadData = uploadData;
     _server     = server;
     _context    = context;
 }
    public void ClientInScope_SendsPacket()
    {
        var server = new TestingServer();

        var player = server.AddFakePlayer();

        using var scope = new ClientPacketScope(new IClient[] { player.Client });
        player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_LUA_ELEMENT_RPC, player);
    }
    public void ClientOutOfScope_DoesNotSendPacket()
    {
        var server = new TestingServer();

        var player = server.AddFakePlayer();

        using var scope = new ClientPacketScope(Array.Empty <IClient>());
        player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_LUA_ELEMENT_RPC, player, count: 0);
    }
Beispiel #12
0
        public virtual void TestMultipleKMSInstancesWithZKSigner()
        {
            FilePath      testDir  = TestKMS.GetTestDir();
            Configuration conf     = CreateBaseKMSConf(testDir);
            TestingServer zkServer = new TestingServer();

            zkServer.Start();
            MiniKMS kms1 = null;
            MiniKMS kms2 = null;

            conf.Set(KMSAuthenticationFilter.ConfigPrefix + AuthenticationFilter.SignerSecretProvider
                     , "zookeeper");
            conf.Set(KMSAuthenticationFilter.ConfigPrefix + ZKSignerSecretProvider.ZookeeperConnectionString
                     , zkServer.GetConnectString());
            conf.Set(KMSAuthenticationFilter.ConfigPrefix + ZKSignerSecretProvider.ZookeeperPath
                     , "/secret");
            TestKMS.WriteConf(testDir, conf);
            try
            {
                kms1 = new MiniKMS.Builder().SetKmsConfDir(testDir).SetLog4jConfFile("log4j.properties"
                                                                                     ).Build();
                kms1.Start();
                kms2 = new MiniKMS.Builder().SetKmsConfDir(testDir).SetLog4jConfFile("log4j.properties"
                                                                                     ).Build();
                kms2.Start();
                Uri url1 = new Uri(kms1.GetKMSUrl().ToExternalForm() + KMSRESTConstants.ServiceVersion
                                   + "/" + KMSRESTConstants.KeysNamesResource);
                Uri url2 = new Uri(kms2.GetKMSUrl().ToExternalForm() + KMSRESTConstants.ServiceVersion
                                   + "/" + KMSRESTConstants.KeysNamesResource);
                DelegationTokenAuthenticatedURL.Token token = new DelegationTokenAuthenticatedURL.Token
                                                                  ();
                DelegationTokenAuthenticatedURL aUrl   = new DelegationTokenAuthenticatedURL();
                UserGroupInformation            ugiFoo = UserGroupInformation.CreateUserForTesting("foo", new
                                                                                                   string[] { "gfoo" });
                UserGroupInformation ugiBar = UserGroupInformation.CreateUserForTesting("bar", new
                                                                                        string[] { "gBar" });
                ugiFoo.DoAs(new _PrivilegedExceptionAction_135(aUrl, url1, token));
                ugiBar.DoAs(new _PrivilegedExceptionAction_145(aUrl, url2, token));
                ugiBar.DoAs(new _PrivilegedExceptionAction_155(aUrl, url2));
            }
            finally
            {
                if (kms2 != null)
                {
                    kms2.Stop();
                }
                if (kms1 != null)
                {
                    kms1.Stop();
                }
                zkServer.Stop();
            }
        }
    public void BroadcastPacket_SendsPacketToAllPlayers()
    {
        var server = new TestingServer();

        var player  = server.AddFakePlayer();
        var player2 = server.AddFakePlayer();

        server.BroadcastPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.VerifyPacketSent(PacketId.PACKET_ID_LUA_ELEMENT_RPC, player);
        server.VerifyPacketSent(PacketId.PACKET_ID_LUA_ELEMENT_RPC, player2);
    }
    public void CreateExplosion_SendsExpectedPacket()
    {
        var mtaServer = new TestingServer();
        var player    = mtaServer.AddFakePlayer();

        var service = new ExplosionService(mtaServer);

        service.CreateExplosion(Vector3.Zero, Enums.ExplosionType.WeakRocket);

        var expectedPacket = new ExplosionPacket(null, null, Vector3.Zero, (byte)Enums.ExplosionType.WeakRocket, 0);

        mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_EXPLOSION, player, expectedPacket.Write());
    }
Beispiel #15
0
    public void CreateFire_SendsExpectedPacket()
    {
        var mtaServer = new TestingServer();
        var player    = mtaServer.AddFakePlayer();

        var service = new FireService(mtaServer);

        service.CreateFire(Vector3.Zero, 2);

        var expectedPacket = new FirePacket(Vector3.Zero, 2);

        mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_FIRE, player, expectedPacket.Write());
    }
    public void ClientInScope_SendsPacket()
    {
        var server = new TestingServer();

        var player = server.AddFakePlayer();

        using var scope = new ClientPacketScope(new Client[] { player.Client });
        player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.NetWrapperMock.Verify(x => x.SendPacket(
                                         player.Address,
                                         It.IsAny <ushort>(),
                                         It.IsAny <SetElementModelRpcPacket>()
                                         ), Times.Once);
    }
    public void ClientOutOfScope_DoesNotSendPacket()
    {
        var server = new TestingServer();

        var player = server.AddFakePlayer();

        using var scope = new ClientPacketScope(Array.Empty <Client>());
        player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 0));

        server.NetWrapperMock.Verify(x => x.SendPacket(
                                         player.Address,
                                         It.IsAny <ushort>(),
                                         It.IsAny <SetElementModelRpcPacket>()
                                         ), Times.Never);
    }
Beispiel #18
0
 public virtual void Setup()
 {
     while (this.server == null)
     {
         try
         {
             this.server = new TestingServer();
         }
         catch (BindException)
         {
             System.Console.Error.WriteLine("Getting bind exception - retrying to allocate server"
                                            );
             this.server = null;
         }
     }
 }
Beispiel #19
0
    public void CreateFire_BroadcastsFirePacket()
    {
        var mtaServer = new TestingServer();
        var players   = new TestingPlayer[] {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };

        var service = new FireService(mtaServer);

        service.CreateFire(Vector3.Zero);

        foreach (var player in players)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_FIRE, player);
        }
    }
    public void CreateExplosion_BroadcastsExplosionPacket()
    {
        var mtaServer = new TestingServer();
        var players   = new TestingPlayer[] {
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
            mtaServer.AddFakePlayer(),
        };

        var service = new ExplosionService(mtaServer);

        service.CreateExplosion(Vector3.Zero, Enums.ExplosionType.WeakRocket);

        foreach (var player in players)
        {
            mtaServer.VerifyPacketSent(Packets.Enums.PacketId.PACKET_ID_EXPLOSION, player);
        }
    }
    public void ColShapeEnterNotCalledWhenOutOfColShape()
    {
        var server    = new TestingServer();
        var behaviour = server.Instantiate <CollisionShapeBehaviour>();

        var collisionShape = new CollisionSphere(new Vector3(100, 100, 100), 10).AssociateWith(server);;
        var dummy          = new DummyElement().AssociateWith(server);

        var isEventCalled = false;

        collisionShape.ElementEntered += (element) =>
        {
            if (element == dummy)
            {
                isEventCalled = true;
            }
        };

        dummy.Position = new Vector3(0, 100, 100);

        isEventCalled.Should().BeFalse();
    }
    public void HandlePacketSendReturnSyncPacket()
    {
        var server       = new TestingServer();
        var sourcePlayer = server.AddFakePlayer();
        var otherPlayers = new TestingPlayer[] { server.AddFakePlayer(), server.AddFakePlayer(), server.AddFakePlayer() };

        Mock <ILogger> loggerMock = new();

        Mock <ISyncHandlerMiddleware <PlayerPureSyncPacket> > middlewareMock = new();

        middlewareMock.Setup(x => x.GetPlayersToSyncTo(sourcePlayer, It.IsAny <PlayerPureSyncPacket>())).Returns(otherPlayers);

        Mock <IElementRepository> elementRepositoryMock = new();

        var handler = new PlayerPureSyncPacketHandler(loggerMock.Object, middlewareMock.Object, elementRepositoryMock.Object);

        handler.HandlePacket(sourcePlayer.Client, new PlayerPureSyncPacket()
        {
        });

        server.NetWrapperMock.Verify(x => x.SendPacket(sourcePlayer.Address, It.IsAny <ushort>(), It.IsAny <ReturnSyncPacket>()));
    }
    public async Task AsyncScopes_DoNotInterfere()
    {
        var server = new TestingServer();

        var player = server.AddFakePlayer();

        await Task.WhenAll(new Task[]
        {
            Task.Run(async() =>
            {
                await Task.Delay(10);
                using var scope = new ClientPacketScope(new Client[] { player.Client });
                player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 1));
                await Task.Delay(25);
            }),
            Task.Run(async() =>
            {
                using var scope = new ClientPacketScope(Array.Empty <Client>());
                await Task.Delay(25);
                player.Client.SendPacket(new SetElementModelRpcPacket(player.Id, 2));
            })
        });
Beispiel #24
0
        public async Task TryStartNewWorker()
        {
            using var scope = _scopeFactory.CreateScope();
            var context = scope.ServiceProvider.GetRequiredService <RelationalDbContext>();
            var codeManagmentService = scope.ServiceProvider.GetRequiredService <ICodeManagmentService>();

            var serverInfo = context.Servers.FirstOrDefault(s => s.Status == Data.Models.ServerStatus.Free);

            if (serverInfo == null)
            {
                return;
            }

            using var transferService = _transferServiceFactory.Create(serverInfo.IPAddress, serverInfo.Port);
            var server = new TestingServer(serverInfo, transferService);

            var upload = await FetchNextUpload(context);

            while (upload != null)
            {
                var uploadData = codeManagmentService.Get(upload.Id);

                serverInfo.Status = ServerStatus.Busy;
                upload.Status     = UploadStatus.EnvironmentSetup;

                await context.SaveChangesAsync();

                var processor = _uploadProcessorFactory.Create(upload, uploadData,
                                                               server, context);

                await processor.Process();

                upload = await FetchNextUpload(context);
            }

            serverInfo.Status = ServerStatus.Free;
            await context.SaveChangesAsync();
        }
    public void ColShapeEnterCalledOnceForTwoUpdatesInColshape()
    {
        var server    = new TestingServer();
        var behaviour = server.Instantiate <CollisionShapeBehaviour>();

        var collisionShape = new CollisionSphere(new Vector3(100, 100, 100), 10).AssociateWith(server);;
        var dummy          = new DummyElement().AssociateWith(server);

        int callCount = 0;

        collisionShape.ElementEntered += (element) =>
        {
            if (element == dummy)
            {
                callCount++;
            }
        };

        dummy.Position = new Vector3(95, 100, 100);
        dummy.Position = new Vector3(97.5f, 100, 100);

        callCount.Should().Be(1);
    }
Beispiel #26
0
 public virtual void Teardown()
 {
     this.server.Close();
     this.server = null;
 }
 public virtual void Setup()
 {
     zkServer = new TestingServer();
     zkServer.Start();
 }
 public SolidHttpTransportBindingElement(TestingServer server, XmlWriterSettings settings)
 {
     _server   = server;
     _settings = settings;
 }
Beispiel #29
0
 public IUploadProcessor Create(Upload upload, UploadData uploadData,
                                TestingServer testingServer, RelationalDbContext context)
 => new UploadProcessor(upload, uploadData, testingServer, context);