public static void _outputTestFiles(List <ContainerImagePayload> payloads, List <string> builtImages)
        {
            PublishContainerImages.WriteLog($"\nWriting test files for the following images:\n { string.Join("\n", builtImages)}");

            var payloadsWithTests = _removeInvalidPayloads(payloads);
            var payloadsWithTestsAndImagesTagged = _updateTestConfigAndParametersWithTaggedImage(payloadsWithTests, builtImages);

            payloadsWithTestsAndImagesTagged.ForEach(payload =>
            {
                var parametersPath  = Path.Combine(OutputTestPath(), payload.TestConfigurationDefinition.Parameters);
                var parametersJson  = JsonSerializeObject(payload.TestParametersDefinition);
                FileInfo paramsFile = new FileInfo(parametersPath);
                Directory.CreateDirectory(paramsFile.DirectoryName);
                File.WriteAllText(parametersPath, parametersJson);
                PublishContainerImages.WriteLog($"\nWrote parameters file at: {paramsFile.FullName}, file contents:");
                PublishContainerImages.WriteLog(parametersJson);
            });

            var testsConfiguration = new TestsDefinition
            {
                Tests = payloadsWithTestsAndImagesTagged.Select(payload =>
                {
                    var config        = payload.TestConfigurationDefinition;
                    config.Parameters = Path.Combine(OutputTestPath(), config.Parameters).Replace("\\", "/");
                    return(config);
                }).ToArray(),
                Images = new[]
                {
                    new TestMarketplaceImageDefinition
                    {
                        Offer     = "microsoft-azure-batch",
                        OsType    = "linux",
                        Publisher = "centos-container",
                        Sku       = "7-5",
                        Version   = "latest",
                    }
                }
            };

            var testsConfigurationFilepath = Path.Combine(OutputTestPath(), PublishContainerImages.TestConfigurationFilename);
            var testsConfigurationJson     = JsonSerializeObject(testsConfiguration);

            FileInfo configFile = new FileInfo(testsConfigurationFilepath);

            Directory.CreateDirectory(configFile.DirectoryName);
            File.WriteAllText(testsConfigurationFilepath, testsConfigurationJson);
            PublishContainerImages.WriteLog($"\nWrote configuration file at: {configFile.FullName}, file contents:");
            PublishContainerImages.WriteLog(testsConfigurationJson);
        }
        public static void _outputTestFiles(string testRepoUsername, string testRepoPassword, string testRepoRegistry, string batchExtensionTemplatesRootDir, List <OutputContainerImage> imageDefinitions, List <string> imagesWithTagsToTest)
        {
            PublishContainerImages.WriteLog($"\nWriting test files for the following images:\n { string.Join("\n", imageDefinitions.Select(image => image.TestContainerImage))}");

            var imagesWithTests         = _removeInvalidPayloads(imageDefinitions);
            var updatedImageDefinitions = _updateTestConfigAndParametersWithTaggedImage(imagesWithTests);

            updatedImageDefinitions.ForEach(payload =>
            {
                var parametersPath = Path.Combine(OutputTestPath(), payload.Payload.TestConfigurationDefinition.GetParametersFileName());
                var parametersJson = Json.JsonSerializeObject(payload.Payload.TestParametersDefinition);

                FileInfo paramsFile = new FileInfo(parametersPath);
                Directory.CreateDirectory(paramsFile.DirectoryName);
                File.WriteAllText(parametersPath, parametersJson);
                PublishContainerImages.WriteLog($"\nWrote parameters file at: {paramsFile.FullName}, file contents:");
                PublishContainerImages.WriteLog(parametersJson);
            });

            updatedImageDefinitions.ForEach(payload =>
            {
                var runnerDirectory = Path.Combine(ExecutableDirectory(), batchExtensionTemplatesRootDir, "runner");
                var poolTemplateOriginalFullPath = Path.Combine(runnerDirectory, payload.Payload.TestConfigurationDefinition.PoolTemplate);
                var poolTemplateDynamic          = Json.ReadJsonFileToDynamic(poolTemplateOriginalFullPath);

                if (!string.IsNullOrEmpty(testRepoUsername))
                {
                    var containerRegistries = JArray.FromObject(new[]
                    {
                        new
                        {
                            username = testRepoUsername, password = testRepoPassword, registryServer = testRepoRegistry
                        }
                    });

                    poolTemplateDynamic.variables.osType.containerConfiguration.containerRegistries = containerRegistries;
                }

                var poolTemplateJson = Json.JsonSerializeObject(poolTemplateDynamic);

                var relativeFinalPathForPoolTemplate = payload.Payload.TestConfigurationDefinition.PoolTemplate.Replace("../", "");
                var poolTemplateFinalPath            = Path.Combine(OutputTestPath(), relativeFinalPathForPoolTemplate);

                payload.Payload.TestConfigurationDefinition.PoolTemplate = poolTemplateFinalPath.Replace("\\", "/");

                FileInfo poolTemplateFinal = new FileInfo(poolTemplateFinalPath);
                Directory.CreateDirectory(poolTemplateFinal.DirectoryName);
                File.WriteAllText(poolTemplateFinalPath, poolTemplateJson);
                PublishContainerImages.WriteLog($"\nWrote pool template file at: {poolTemplateFinalPath}, file contents:");
                PublishContainerImages.WriteLog(poolTemplateJson);
            });

            var testsConfiguration = new TestsDefinition
            {
                Tests = updatedImageDefinitions.Select(payload =>
                {
                    var config        = payload.Payload.TestConfigurationDefinition;
                    config.Parameters = Path.Combine(OutputTestPath(), config.GetParametersFileName()).Replace("\\", "/");
                    return(config);
                }).ToArray(),
                Images = new[]
                {
                    new TestMarketplaceImageDefinition
                    {
                        Offer     = "microsoft-azure-batch",
                        OsType    = "linux",
                        Publisher = "centos-container",
                        Sku       = "7-5",
                        Version   = "latest",
                    },
                    new TestMarketplaceImageDefinition
                    {
                        Offer     = "microsoft-azure-batch",
                        OsType    = "linux",
                        Publisher = "ubuntu-server-container",
                        Sku       = "16-04-lts",
                        Version   = "latest",
                    }
                }
            };

            var testsConfigurationFilepath = Path.Combine(OutputTestPath(), PublishContainerImages.TestConfigurationFilename);
            var testsConfigurationJson     = Json.JsonSerializeObject(testsConfiguration);

            FileInfo configFile = new FileInfo(testsConfigurationFilepath);

            Directory.CreateDirectory(configFile.DirectoryName);
            File.WriteAllText(testsConfigurationFilepath, testsConfigurationJson);
            PublishContainerImages.WriteLog($"\nWrote configuration file at: {configFile.FullName}, file contents:");
            PublishContainerImages.WriteLog(testsConfigurationJson);
        }