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); }