Пример #1
0
        public void TestMapPoolIdenticalNamesDifferentGameModes()
        {
            var state = new ProtocolState();

            state.MapPool.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "First Map"
            });
            state.MapPool.TryAdd("gamemode2/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Second Map"
            });

            var segment = new ProtocolStateSegment() {
                MapPool = new ConcurrentDictionary<String, MapModel>()
            };
            segment.MapPool.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "First Map"
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.MapPool.Count);
            Assert.AreEqual("Second Map", state.MapPool.First().Value.FriendlyName);
        }
Пример #2
0
        public void TestGroupPoolModifiedAndGroupPoolInserted()
        {
            var state = new ProtocolState();

            state.Groups.TryAdd("Team/1", new GroupModel() {
                Uid = "1",
                Type = GroupModel.Team,
                FriendlyName = "Boring Group 1"
            });

            var segment = new ProtocolStateSegment() {
                Groups = new ConcurrentDictionary<String, GroupModel>()
            };
            segment.Groups.TryAdd("Team/1", new GroupModel() {
                Uid = "1",
                Type = GroupModel.Team,
                FriendlyName = "Fun Group 1"
            });
            segment.Groups.TryAdd("Team/2", new GroupModel() {
                Uid = "2",
                Type = GroupModel.Team,
                FriendlyName = "Fun Group 2"
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Groups.Count);
            Assert.AreEqual("Fun Group 1", state.Groups["Team/1"].FriendlyName);
            Assert.AreEqual("Fun Group 2", state.Groups["Team/2"].FriendlyName);
        }
Пример #3
0
        public void TestGameModePoolModifiedAndGameModePoolInserted()
        {
            var state = new ProtocolState();

            state.GameModePool.TryAdd("gamemode1", new GameModeModel() {
                Name = "gamemode 1",
                FriendlyName = "Boring GameMode 1"
            });

            var segment = new ProtocolStateSegment() {
                GameModePool = new ConcurrentDictionary<String, GameModeModel>()
            };
            segment.GameModePool.TryAdd("gamemode1", new GameModeModel() {
                Name = "gamemode 1",
                FriendlyName = "Fun GameMode 1"
            });
            segment.GameModePool.TryAdd("gamemode2", new GameModeModel() {
                Name = "gamemode 2",
                FriendlyName = "Fun GameMode 2"
            });

            state.Set(segment);

            Assert.AreEqual(2, state.GameModePool.Count);
            Assert.AreEqual("Fun GameMode 1", state.GameModePool["gamemode1"].FriendlyName);
            Assert.AreEqual("Fun GameMode 2", state.GameModePool["gamemode2"].FriendlyName);
        }
Пример #4
0
        public void TestSingleGameModePoolRemoved()
        {
            var state = new ProtocolState();

            state.GameModePool.TryAdd("gamemode1", new GameModeModel() {
                Name = "gamemode 1",
                FriendlyName = "Boring GameMode 1"
            });
            state.GameModePool.TryAdd("gamemode2", new GameModeModel() {
                Name = "gamemode 2",
                FriendlyName = "Boring GameMode 2"
            });

            var segment = new ProtocolStateSegment() {
                GameModePool = new ConcurrentDictionary<String, GameModeModel>()
            };
            segment.GameModePool.TryAdd("gamemode1", new GameModeModel() {
                Name = "gamemode 1",
                FriendlyName = "Boring GameMode 1"
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.GameModePool.Count);
            Assert.AreEqual("Boring GameMode 2", state.GameModePool.First().Value.FriendlyName);
        }
Пример #5
0
        public void TestSingleUidBansRemoved()
        {
            var state = new ProtocolState();

            state.Bans.TryAdd("Permanent/Uid/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Uid = "1",
                            Score = 1
                        }
                    }
                }
            });
            state.Bans.TryAdd("Time/Uid/2", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Time
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Uid = "2",
                            Score = 2
                        }
                    }
                }
            });

            var segment = new ProtocolStateSegment() {
                Bans = new ConcurrentDictionary<String, BanModel>()
            };
            segment.Bans.TryAdd("Permanent/Uid/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Uid = "1",
                            Score = 1
                        }
                    }
                }
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.Bans.Count);
            Assert.AreEqual(TimeSubsetContext.Time, state.Bans.First().Value.Scope.Times.First().Context);
        }
Пример #6
0
        public void TestSinglePlayersRemoved()
        {
            var state = new ProtocolState();

            state.Players.TryAdd("1", new PlayerModel() {
                Uid = "1",
                Score = 1
            });
            state.Players.TryAdd("2", new PlayerModel() {
                Uid = "2",
                Score = 2
            });

            var segment = new ProtocolStateSegment() {
                Players = new ConcurrentDictionary<String, PlayerModel>()
            };
            segment.Players.TryAdd("1", new PlayerModel() {
                Uid = "1",
                Score = 1
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.Players.Count);
            Assert.AreEqual(2, state.Players.First().Value.Score);
        }
Пример #7
0
        public void TestSingleMapsRemoved()
        {
            var state = new ProtocolState();

            state.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Boring Map 1"
            });
            state.Maps.TryAdd("gamemode2/map2", new MapModel() {
                Name = "map2",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Boring Map 2"
            });

            var segment = new ProtocolStateSegment() {
                Maps = new ConcurrentDictionary<String, MapModel>()
            };
            segment.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Boring Map 1"
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.Maps.Count);
            Assert.AreEqual("Boring Map 2", state.Maps.First().Value.FriendlyName);
        }
Пример #8
0
        public void TestSingleItemPoolRemoved()
        {
            var state = new ProtocolState();

            state.Items.TryAdd("1", new ItemModel() {
                Name = "1",
                FriendlyName = "Boring Item 1"
            });
            state.Items.TryAdd("2", new ItemModel() {
                Name = "2",
                FriendlyName = "Boring Item 2"
            });

            var segment = new ProtocolStateSegment() {
                Items = new ConcurrentDictionary<String, ItemModel>()
            };
            segment.Items.TryAdd("1", new ItemModel() {
                Name = "1",
                FriendlyName = "Boring Item 1"
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.Items.Count);
            Assert.AreEqual("Boring Item 2", state.Items.First().Value.FriendlyName);
        }
Пример #9
0
        public void TestSingleGroupPoolRemoved()
        {
            var state = new ProtocolState();

            state.Groups.TryAdd("Team/1", new GroupModel() {
                Uid = "1",
                Type = GroupModel.Team,
                FriendlyName = "Boring Group 1"
            });
            state.Groups.TryAdd("Team/2", new GroupModel() {
                Uid = "2",
                Type = GroupModel.Team,
                FriendlyName = "Boring Group 2"
            });

            var segment = new ProtocolStateSegment() {
                Groups = new ConcurrentDictionary<String, GroupModel>()
            };
            segment.Groups.TryAdd("Team/1", new GroupModel() {
                Uid = "1",
                Type = GroupModel.Team,
                FriendlyName = "Boring Group 1"
            });

            state.Removed(segment);

            Assert.AreEqual(1, state.Groups.Count);
            Assert.AreEqual("Boring Group 2", state.Groups.First().Value.FriendlyName);
        }
Пример #10
0
        public void TestIpBanModifiedAndIpBanInserted()
        {
            var state = new ProtocolState();

            state.Bans.TryAdd("Permanent/Ip/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Ip = "1",
                            Score = 1
                        }
                    }
                }
            });

            var segment = new ProtocolStateSegment() {
                Bans = new ConcurrentDictionary<String, BanModel>()
            };
            segment.Bans.TryAdd("Permanent/Ip/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Ip = "1",
                            Score = 3
                        }
                    }
                }
            });
            segment.Bans.TryAdd("Permanent/Ip/2", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Ip = "2",
                            Score = 4
                        }
                    }
                }
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Bans.Count);
            Assert.AreEqual(3, state.Bans.First(ban => ban.Key == "Permanent/Ip/1").Value.Scope.Players.First().Score);
            Assert.AreEqual(4, state.Bans.Last(ban => ban.Key == "Permanent/Ip/2").Value.Scope.Players.First().Score);
        }
Пример #11
0
        public void TestTwoMapsIdenticalNamesDifferentGameModes()
        {
            var state = new ProtocolState();

            state.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Boring Gamemode 1"
            });
            state.Maps.TryAdd("gamemode2/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Boring Gamemode 2"
            });

            var segment = new ProtocolStateSegment() {
                Maps = new ConcurrentDictionary<String, MapModel>()
            };
            segment.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Fun First Map"
            });
            segment.Maps.TryAdd("gamemode2/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Fun Second Map"
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Maps.Count);
            Assert.AreEqual("Fun First Map", state.Maps.First(item => item.Value.Name == "map1" && item.Value.GameMode.Name == "gamemode1").Value.FriendlyName);
            Assert.AreEqual("Fun Second Map", state.Maps.First(item => item.Value.Name == "map1" && item.Value.GameMode.Name == "gamemode2").Value.FriendlyName);
        }
Пример #12
0
        public void TestPlayerModifiedAndPlayerInserted()
        {
            var state = new ProtocolState();

            state.Players.TryAdd("1", new PlayerModel() {
                Uid = "1",
                Score = 1
            });

            var segment = new ProtocolStateSegment() {
                Players = new ConcurrentDictionary<String, PlayerModel>()
            };
            segment.Players.TryAdd("1", new PlayerModel() {
                Uid = "1",
                Score = 100
            });
            segment.Players.TryAdd("2", new PlayerModel() {
                Uid = "2",
                Score = 200
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Players.Count);
            Assert.AreEqual(100, state.Players.First(item => item.Value.Uid == "1").Value.Score);
            Assert.AreEqual(200, state.Players.First(item => item.Value.Uid == "2").Value.Score);
        }
Пример #13
0
        public void TestMultipleMapsModified()
        {
            var state = new ProtocolState();

            state.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Boring Map 1"
            });
            state.Maps.TryAdd("gamemode2/map2", new MapModel() {
                Name = "map2",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Boring Map 2"
            });

            var segment = new ProtocolStateSegment() {
                Maps = new ConcurrentDictionary<String, MapModel>()
            };
            segment.Maps.TryAdd("gamemode1/map1", new MapModel() {
                Name = "map1",
                GameMode = new GameModeModel() {
                    Name = "gamemode1"
                },
                FriendlyName = "Fun Map 1"
            });
            segment.Maps.TryAdd("gamemode2/map2", new MapModel() {
                Name = "map2",
                GameMode = new GameModeModel() {
                    Name = "gamemode2"
                },
                FriendlyName = "Fun Map 2"
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Maps.Count);
            Assert.AreEqual("Fun Map 1", state.Maps.First(item => item.Value.Name == "map1").Value.FriendlyName);
            Assert.AreEqual("Fun Map 2", state.Maps.First(item => item.Value.Name == "map2").Value.FriendlyName);
        }
Пример #14
0
        public void TestMultipleItemPoolModified()
        {
            var state = new ProtocolState();

            state.Items.TryAdd("1", new ItemModel() {
                Name = "1",
                FriendlyName = "Boring Item 1"
            });
            state.Items.TryAdd("2", new ItemModel() {
                Name = "2",
                FriendlyName = "Boring Item 2"
            });

            var segment = new ProtocolStateSegment() {
                Items = new ConcurrentDictionary<String, ItemModel>()
            };
            segment.Items.TryAdd("1", new ItemModel() {
                Name = "1",
                FriendlyName = "Fun Item 1"
            });
            segment.Items.TryAdd("2", new ItemModel() {
                Name = "2",
                FriendlyName = "Fun Item 2"
            });

            state.Modified(segment);

            Assert.AreEqual(2, state.Items.Count);
            Assert.AreEqual("Fun Item 1", state.Items["1"].FriendlyName);
            Assert.AreEqual("Fun Item 2", state.Items["2"].FriendlyName);
        }
Пример #15
0
        public void TestSingleNameBansSet()
        {
            var state = new ProtocolState();

            state.Bans.TryAdd("Permanent/Name/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Permanent
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Name = "1",
                            Score = 1
                        }
                    }
                }
            });
            state.Bans.TryAdd("Time/Name/2", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Time
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Name = "2",
                            Score = 2
                        }
                    }
                }
            });

            var segment = new ProtocolStateSegment() {
                Bans = new ConcurrentDictionary<String, BanModel>()
            };
            // Technically it would have an incorrect key, so next sync it would be
            // removed because it does not exist..
            segment.Bans.TryAdd("Permanent/Name/1", new BanModel() {
                Scope = {
                    Times = {
                        new TimeSubsetModel() {
                            Context = TimeSubsetContext.Time
                        }
                    },
                    Players = new List<PlayerModel>() {
                        new PlayerModel() {
                            Name = "1",
                            Score = 1
                        }
                    }
                }
            });

            state.Set(segment);

            Assert.AreEqual(1, state.Bans.Count);
            Assert.AreEqual(TimeSubsetContext.Time, state.Bans.First().Value.Scope.Times.First().Context);
        }