public void FoundDistinctListOfServiceNames() { int call = 0; Func <string, string, SearchOption, IEnumerable <string> > enumerateFiles = (string path, string searchFilter, SearchOption options) => { //Call 0 will results in: AWSSDK.ServiceA.dll, AWSSDK.ServiceB.dll, AWSSDK.ServiceC.dll //Call 1 will results in: AWSSDK.ServiceA.dll, AWSSDK.ServiceB.dll, AWSSDK.ServiceD.dll var files = new List <string> { "AWSSDK.ServiceA.dll", "AWSSDK.ServiceB.dll", $"AWSSDK.Service{(call == 0 ? 'C': 'D')}.dll" }; call++; return(files); }; var allFoundSdkAssemblies = GenerationSources.SDKFindAssemblyFilenames("test", enumerateFiles); //Ensure the two lists of files have been union to the distinct list: ServiceA, ServiceB, ServiceC, ServiceD CollectionAssert.AreEqual(new List <string> { "ServiceA", "ServiceB", "ServiceC", "ServiceD" }, new List <string>(allFoundSdkAssemblies)); }
protected override void GenerateHelper() { CmdletsOutputPath = Path.Combine(OutputFolder, CmdletsOutputSubFoldername); var configurationsFolder = Path.Combine(Options.RootPath, ConfigurationFolderName); var serviceConfigurationsFolder = Path.Combine(configurationsFolder, ServiceConfigFoldername); XmlOverridesMerger.ApplyOverrides(Options.RootPath, serviceConfigurationsFolder); ModelCollection = ConfigModelCollection.LoadAllConfigs(configurationsFolder, Options.Verbose); SourceArtifacts = new GenerationSources(OutputFolder, SdkAssembliesFolder, Options.VersionNumber); LoadCoreSDKRuntimeMaterials(); LoadSpecialServiceAssemblies(); CheckForServicePrefixDuplication(); if (!Options.SkipCmdletGeneration) { //We clean and setup service folders, some services share a folder, project and module, so we use distinct foreach (var project in ModelCollection.ConfigModels.Values .Where(service => !service.SkipCmdletGeneration) .GroupBy(folder => folder.AssemblyName)) { var modelsWithGuid = project.Where(model => !string.IsNullOrWhiteSpace(model.ServiceModuleGuid)); if (modelsWithGuid.Count() > 1) { AnalysisError.DuplicatedAssemblyName(modelsWithGuid); } SetupOutputDir(project.Key); } } foreach (var configModel in ModelCollection.ConfigModels.Values) { // hold some state to model under work so we can make use of // static helpers CurrentModel = configModel; try { Logger.Log("======================================================="); Logger.Log("Processing service: {0}", CurrentModel.ServiceName); LoadCurrentService(CurrentModel); if (!Options.SkipCmdletGeneration) { GenerateClientAndCmdlets(); // if the service contains any hand-maintained cmdlets, scan them to update the // argument completers for any use of ConstantClass-derived types ScanAdvancedCmdletsForServices(); GenerateArgumentCompleters(); ProcessLegacyAliasesForCustomCmdlets(); CheckForCmdletNameDuplication(); } } catch (Exception e) { AnalysisError.ExceptionWhileGeneratingForService(CurrentModel, e); } } var allFoundSdkAssemblies = GenerationSources.SDKFindAssemblyFilenames(SdkAssembliesFolder, Directory.EnumerateFiles); VerifyAllAssembliesHaveConfiguration(SdkVersionsUtils.ReadSdkVersionFile(SdkAssembliesFolder), ModelCollection, allFoundSdkAssemblies); if (!Options.SkipCmdletGeneration) { ScanAdvancedCmdletsForCommonModule(); SourceArtifacts.WriteLegacyAliasesFile(LegacyAliases, ModelCollection.CommonModuleAliases); SourceArtifacts.WriteMonolithicCompletionScriptsFile(GetArgumentCompletionScriptContent()); SourceArtifacts.WriteMonolithicProjectFile(); SourceArtifacts.WriteMonolithicModuleFiles(); SourceArtifacts.WriteAdditionalAliasesFiles(Aliases); SourceArtifacts.WriteModularSolution(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCopyModularArtifactsScript(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCmdletsList(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCommonModule(CommonAdvancedCmdlets.Keys, ModelCollection.CommonModuleAliases); SourceArtifacts.WriteCommonProjectFile(); SourceArtifacts.WriteLegacyAliasesFileForCommonModule(ModelCollection.CommonModuleAliases); SourceArtifacts.WriteCommonCompletionScriptsFile(); SourceArtifacts.WriteCommonModuleCmdletsList(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteModularProjectFiles(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteLegacyAliasesModularFiles(LegacyAliases, ModelCollection.ConfigModels.Values); SourceArtifacts.WriteCompletersModularFiles(ModelCollection.ConfigModels.Values); SourceArtifacts.WriteModularManifestFiles(ModelCollection.ConfigModels.Values, LegacyAliases); SourceArtifacts.WriteVersionFile(); WriteConfigurationChanges(); } foreach (var configModel in ModelCollection.ConfigModels.Values) { foreach (var error in configModel.AnalysisErrors.Concat( configModel.ServiceOperationsList .OrderBy(so => so.MethodName) .SelectMany(operation => operation.AnalysisErrors))) { Logger.LogError(error.ToString()); } } }