Exemple #1
0
        private void CreateNewGSDKConfigFile(int instanceNumber, string sessionHostUniqueId, Dictionary <string, string> certThumbprints, IDictionary <string, string> portMappings, string agentEndpoint, VmConfiguration vmConfiguration, string logFolderId)
        {
            string configFilePath = Path.Combine(VmConfiguration.GetConfigRootFolderForSessionHost(instanceNumber),
                                                 VmDirectories.GsdkConfigFilename);

            _logger.LogInformation($"Creating the configuration file at {configFilePath}");
            GsdkConfiguration gsdkConfig = new GsdkConfiguration
            {
                HeartbeatEndpoint = $"{agentEndpoint}:{VmConfiguration.ListeningPort}",
                SessionHostId     = sessionHostUniqueId,
                VmId                     = vmConfiguration.VmId,
                LogFolder                = GetLogFolder(logFolderId, vmConfiguration),
                CertificateFolder        = vmConfiguration.VmDirectories.CertificateRootFolderContainer,
                SharedContentFolder      = vmConfiguration.VmDirectories.GameSharedContentFolderContainer,
                GameCertificates         = certThumbprints,
                BuildMetadata            = _sessionHostsStartInfo.DeploymentMetadata,
                GamePorts                = portMappings,
                PublicIpV4Address        = _sessionHostsStartInfo.PublicIpV4Address,
                FullyQualifiedDomainName = _sessionHostsStartInfo.FQDN,
                ServerInstanceNumber     = instanceNumber,
                GameServerConnectionInfo = GetGameServerConnectionInfo(instanceNumber)
            };

            string outputJson = JsonConvert.SerializeObject(gsdkConfig, Formatting.Indented, CommonSettings.JsonSerializerSettings);

            // This will overwrite the file if it was already there (which would happen when restarting containers for the same assignment)
            _systemOperations.FileWriteAllText(configFilePath, outputJson);
        }
        public void TestCreateLegacyGSDKConfigFileWithSessionLinuxContainer()
        {
            _vmConfiguration = new VmConfiguration(56001, TestVmId, new VmDirectories(_root), true);

            _sessionHostManager.Setup(x => x.LinuxContainersOnWindows).Returns(true);

            VmPathHelper.AdaptFolderPathsForLinuxContainersOnWindows(_vmConfiguration);

            _sessionHostsStartInfo.SessionHostType  = SessionHostType.Container;
            _sessionHostsStartInfo.PortMappingsList = new List <List <PortMapping> >()
            {
                new List <PortMapping>()
                {
                    new PortMapping()
                    {
                        GamePort = new Port()
                        {
                            Name     = "port",
                            Number   = 80,
                            Protocol = "TCP"
                        },
                        PublicPort = 1234,
                        NodePort   = 56001
                    }
                }
            };

            List <PortMapping> mockPortMapping = _sessionHostsStartInfo.PortMappingsList[0];

            SessionHostContainerConfiguration sessionHostContainerConfiguration =
                new SessionHostContainerConfiguration(_vmConfiguration, _logger, _systemOperations, _dockerClient.Object, _sessionHostsStartInfo, true);

            sessionHostContainerConfiguration.Create(0, TestdDockerId, TestAgentIPaddress, _vmConfiguration, TestLogFolderId);

            string gsdkConfigFilePath = Path.Combine(_root, "Config", "SH0", "gsdkConfig.json");

            GsdkConfiguration gsdkConfigExpected = new GsdkConfiguration()
            {
                HeartbeatEndpoint = $"{TestAgentIPaddress}:56001",
                SessionHostId     = TestdDockerId,
                VmId                     = TestVmId,
                LogFolder                = "/data/GameLogs/",
                CertificateFolder        = "/data/GameCertificates",
                SharedContentFolder      = "/data/GameSharedContent",
                GamePorts                = mockPortMapping?.ToDictionary(x => x.GamePort.Name, x => x.GamePort.Number.ToString()),
                PublicIpV4Address        = TestPublicIpV4Address,
                GameServerConnectionInfo = new GameServerConnectionInfo
                {
                    PublicIpV4Adress       = TestPublicIpV4Address,
                    GamePortsConfiguration = new List <GamePort>()
                    {
                        new GamePort()
                        {
                            Name = mockPortMapping[0].GamePort.Name,
                            ServerListeningPort  = mockPortMapping[0].GamePort.Number,
                            ClientConnectionPort = mockPortMapping[0].PublicPort
                        }
                    }
                }
            };

            GsdkConfiguration gsdkConfig = JsonConvert.DeserializeObject <GsdkConfiguration>(File.ReadAllText(gsdkConfigFilePath));

            gsdkConfig.Should().BeEquivalentTo(gsdkConfigExpected);
        }