Пример #1
0
        public async Task Test_SetLevelSucceed_AndFindsIngameClient()
        {
            var server = serviceProvider.GetRequiredService <IW4MServer>();
            var cmd    = serviceProvider.GetRequiredService <SetLevelCommand>();
            var origin = ClientGenerators.CreateBasicClient(server);

            origin.Level = Permission.Owner;
            var databaseTarget = ClientGenerators.CreateDatabaseClient();

            databaseTarget.Level = Permission.Administrator;

            var ingameTarget = ClientGenerators.CreateBasicClient(server);

            ingameTarget.Level = Permission.Administrator;

            A.CallTo(() => manager.GetActiveClients())
            .Returns(new[] { ingameTarget });

            A.CallTo(() => clientService.GetOwnerCount())
            .Returns(Task.FromResult(1));

            var gameEvent = new GameEvent()
            {
                Target = databaseTarget,
                Origin = origin,
                Data   = "User",
                Owner  = server,
            };

            await cmd.ExecuteAsync(gameEvent);

            Assert.AreEqual(Permission.User, ingameTarget.Level);
            Assert.IsNotEmpty(mockEventHandler.Events.Where(_event => _event.Type == GameEvent.EventType.Tell));
            Assert.IsNotEmpty(mockEventHandler.Events.Where(_event => _event.Type == GameEvent.EventType.ChangePermission && !_event.Failed));
        }
Пример #2
0
        private void SetupAliases()
        {
            using var ctx = serviceProvider.GetRequiredService <IDatabaseContextFactory>().CreateContext();

            var client = ClientGenerators.CreateDatabaseClient();

            var aliases = new[]
            {
                new EFAlias()
                {
                    LinkId    = client.AliasLinkId,
                    Name      = "Test1",
                    IPAddress = -1,
                    DateAdded = DateTime.UtcNow.AddMinutes(-1)
                },
                new EFAlias()
                {
                    LinkId    = client.AliasLinkId,
                    Name      = "Test2",
                    IPAddress = -1,
                    DateAdded = DateTime.UtcNow
                }
            };

            ctx.Aliases.AddRange(aliases);
            ctx.SaveChanges();
        }
Пример #3
0
        public async Task Test_ConcurrentCallsToUpdateStatHistoryDoesNotCauseException()
        {
            var server        = serviceProvider.GetRequiredService <IW4MServer>();
            var configHandler = A.Fake <IConfigurationHandler <StatsConfiguration> >();
            var mgr           = new StatManager(serviceProvider.GetRequiredService <IManager>(), serviceProvider.GetRequiredService <IDatabaseContextFactory>(), configHandler);
            var target        = ClientGenerators.CreateDatabaseClient();

            target.CurrentServer = server;

            A.CallTo(() => configHandler.Configuration())
            .Returns(new StatsConfiguration()
            {
                TopPlayersMinPlayTime = 0
            });

            var dbFactory = serviceProvider.GetRequiredService <IDatabaseContextFactory>();
            var db        = dbFactory.CreateContext(true);

            db.Set <EFServer>().Add(new EFServer()
            {
                EndPoint = server.EndPoint.ToString()
            });

            db.Clients.Add(target);
            db.SaveChanges();

            mgr.AddServer(server);
            await mgr.AddPlayer(target);

            var stats = target.GetAdditionalProperty <EFClientStatistics>("ClientStats");

            await mgr.UpdateStatHistory(target, stats);
        }
Пример #4
0
        public async Task Test_GenericGuidClientIsKicked()
        {
            var plugin = new ScriptPlugin(serviceProvider.GetRequiredService <ILogger>(), Path.Join(PLUGIN_DIR, "SharedGUIDKick.js"), PLUGIN_DIR);
            var server = serviceProvider.GetRequiredService <IW4MServer>();

            server.GameName = Server.Game.IW4;
            var client = ClientGenerators.CreateBasicClient(server, hasIp: false, clientState: EFClient.ClientState.Connecting);

            client.NetworkId = -1168897558496584395;
            var databaseClient = ClientGenerators.CreateDatabaseClient(hasIp: false);

            databaseClient.NetworkId = client.NetworkId;

            var fakeClientService = serviceProvider.GetRequiredService <ClientService>();

            A.CallTo(() => fakeClientService.GetUnique(A <long> .Ignored))
            .Returns(Task.FromResult(databaseClient));
            A.CallTo(() => fakeManager.GetClientService())
            .Returns(fakeClientService);

            await plugin.Initialize(serviceProvider.GetRequiredService <IManager>(), serviceProvider.GetRequiredService <IScriptCommandFactory>(), serviceProvider.GetRequiredService <IScriptPluginServiceResolver>());

            var gameEvent = new GameEvent()
            {
                Origin     = client,
                Owner      = server,
                Type       = GameEvent.EventType.PreConnect,
                IsBlocking = true
            };

            await server.ExecuteEvent(gameEvent);

            // connect
            var e = mockEventHandler.Events[0];
            await server.ExecuteEvent(e);

            await plugin.OnEventAsync(e, server);

            // kick
            e = mockEventHandler.Events[1];
            await server.ExecuteEvent(e);
        }
Пример #5
0
        public async Task Test_PrivateMessageAdmins_GameNotSupported()
        {
            var cmd    = serviceProvider.GetRequiredService <PrivateMessageAdminsCommand>();
            var server = serviceProvider.GetRequiredService <IW4MServer>();
            var origin = ClientGenerators.CreateDatabaseClient();

            origin.Level         = Permission.Administrator;
            origin.CurrentServer = server;
            var gameEvent = EventGenerators.GenerateEvent(GameEvent.EventType.Command, "", server);

            gameEvent.Origin = origin;
            cmdConfig.Commands.Add(nameof(PrivateMessageAdminsCommand), new CommandProperties());

            server.Clients[0] = origin;
            server.Clients[1] = origin;
            await cmd.ExecuteAsync(gameEvent);

            int expectedEvents = 1;

            Assert.AreEqual(expectedEvents, mockEventHandler.Events.Count(_event => _event.Type == GameEvent.EventType.Tell));
        }
Пример #6
0
        private void SetupPenalties()
        {
            using var ctx = serviceProvider.GetRequiredService <IDatabaseContextFactory>().CreateContext();

            var firstPenalty  = PenaltyGenerators.Create(occurs: DateTime.UtcNow.AddMinutes(-2), reason: "first");
            var secondPenalty = PenaltyGenerators.Create(occurs: DateTime.UtcNow.AddMinutes(-1), reason: "second", originClient: firstPenalty.Punisher, targetClient: firstPenalty.Offender);
            var linkedPenalty = PenaltyGenerators.Create(occurs: DateTime.UtcNow, reason: "linked", originClient: firstPenalty.Punisher, targetClient: ClientGenerators.CreateDatabaseClient(clientId: 3));

            ctx.Add(firstPenalty);
            ctx.Add(secondPenalty);
            ctx.Add(linkedPenalty);
            ctx.SaveChanges();
        }