public void GenerateResourcesAsyncWithOperationCancelledError(IResourceGenerator generator, AzureIntegrationServicesModel model, IList <YamlStream> config, Exception e) { "Given a resource generator" .x(() => generator = new YamlResourceGenerator(_mockLogger.Object)); "And a model" .x(() => model = _model); "And configuration" .x(async() => { var renderer = new LiquidTemplateRenderer(_mockLogger.Object); var repository = new FileConfigurationRepository(renderer, _mockLogger.Object); await repository.RenderConfigurationAsync(model, OkMultiConfigPath, _tempOutputTemplatePath); config = repository.GetConfiguration(_tempOutputTemplatePath); }); "And a cancelled token" .x(() => _source.Cancel()); "When generating resources" .x(async() => e = await Record.ExceptionAsync(async() => await generator.GenerateResourcesAsync(model, config, _source.Token))); "Then the generation should error" .x(() => e.Should().NotBeNull().And.Subject.Should().BeOfType <OperationCanceledException>()); }
public static BodyResourceData Load(IResourceGenerator generator, CelestialBody body, ConfigNode bodyNode) { if (bodyNode == null) { bodyNode = new ConfigNode(); } var resources = generator.Load(body, bodyNode.GetNode("GeneratorData")); var scans = new CellSet(KethaneData.GridLevel); var scanMask = bodyNode.GetValue("ScanMask"); if (scanMask != null) { try { scans = new CellSet(KethaneData.GridLevel, Misc.FromBase64String(scanMask)); } catch (FormatException e) { Debug.LogError(String.Format("[Kethane] Failed to parse {0} scan string, resetting ({1})", body.name, e.Message)); } } return(new BodyResourceData(resources, scans)); }
/// <summary> /// Creates a new instance of a <see cref="ResourceGeneratorAnalyzer"/> class. /// </summary> /// <param name="repository">The repository.</param> /// <param name="generator">The generator.</param> /// <param name="model">The model.</param> /// <param name="context">The context.</param> /// <param name="logger">A logger.</param> public ResourceGeneratorAnalyzer(IConfigurationRepository repository, IResourceGenerator generator, IApplicationModel model, MigrationContext context, ILogger logger) : base(nameof(ResourceGeneratorAnalyzer), model, context, logger) { // Validate and set the member. _repository = repository ?? throw new ArgumentNullException(nameof(repository)); _generator = generator ?? throw new ArgumentNullException(nameof(generator)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public void Generate(IResourceGenerator generator, IZetboxServerContext ctx, IEnumerable<Zetbox.App.Base.Module> modules) { using (var writer = generator.AddFile("ZetboxBase\\Modules")) // See ZetboxAssetKeys.Modules { foreach (var m in modules.OrderBy(m => m.Name)) { writer.AddResource(ZetboxAssetKeys.ConstructNameKey(m), m.Name); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(m), m.Description); } } }
public void GenerateResourcesWithMultipleTargetsAsyncWithSuccess(IResourceGenerator generator, AzureIntegrationServicesModel model, IList <YamlStream> config, Exception e) { "Given a resource generator" .x(() => generator = new YamlResourceGenerator(_mockLogger.Object)); "And a model" .x(() => { model = _model; model.MigrationTarget.TargetEnvironment = AzureIntegrationServicesTargetEnvironment.Consumption; }); "And configuration" .x(async() => { var renderer = new LiquidTemplateRenderer(_mockLogger.Object); var repository = new FileConfigurationRepository(renderer, _mockLogger.Object); await repository.RenderConfigurationAsync(model, OkConfigPath, _tempOutputTemplatePath); config = repository.GetConfiguration(_tempOutputTemplatePath); }); "When generating resources" .x(async() => e = await Record.ExceptionAsync(async() => await generator.GenerateResourcesAsync(model, config, _source.Token))); "Then the generation should succeed" .x(() => e.Should().BeNull()); "And the model should have been populated with the template resources from the configuration" .x(() => { model.MigrationTarget.MessageBus.Resources.Should().HaveCount(10); var app = model.MigrationTarget.MessageBus.Applications.Where(a => a.Name == "AppA").SingleOrDefault(); app.Should().NotBeNull(); app.Resources.Should().HaveCount(2); var msg = app.Messages.SingleOrDefault(); msg.Should().NotBeNull(); msg.Resources.Should().HaveCount(1); }); "And the model should have been populated with the snippet resources from the configuration" .x(() => { var app = model.MigrationTarget.MessageBus.Applications.Where(a => a.Name == "AppA").SingleOrDefault(); app.Should().NotBeNull(); var processManagers = app.Intermediaries.Where(i => i is ProcessManager); processManagers.Should().NotBeNull().And.HaveCount(1); var processManager = processManagers.Single(); processManager.Snippets.Should().HaveCount(11); }); }
public void ConstructWithSuccess(IResourceGenerator generator, ILogger logger, Exception e) { "Given a null generator" .x(() => generator.Should().BeNull()); "And a logger" .x(() => logger = _mockLogger.Object); "When constructing the generator" .x(() => e = Record.Exception(() => new YamlResourceGenerator(logger))); "Then the constructor should succeed" .x(() => e.Should().BeNull()); }
public void ConstructWithNullLogger(IResourceGenerator generator, ILogger logger, Exception e) { "Given a null generator" .x(() => generator.Should().BeNull()); "And a null logger" .x(() => logger.Should().BeNull()); "When constructing the generator with null logger" .x(() => e = Record.Exception(() => new YamlResourceGenerator(logger))); "Then the constructor should throw an exception" .x(() => e.Should().NotBeNull().And.Subject.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("logger")); }
public void Generate(IResourceGenerator generator, IZetboxServerContext ctx, IEnumerable<Zetbox.App.Base.Module> modules) { var moduleNames = modules.Select(m => m.Name).ToArray(); using (var writer = generator.AddFile("GUI\\NavigationEntries")) // See ZetboxAssetKeys.NavigationEntries { foreach (var nav in ctx.GetQuery<NavigationEntry>() .ToList() .Where(e => moduleNames.Contains(e.Module.Name)) .OrderBy(e => e.Title)) { writer.AddResource(ZetboxAssetKeys.ConstructTitleKey(nav), nav.Title); writer.AddResource(ZetboxAssetKeys.ConstructColorKey(nav), nav.Color); } } }
public void Generate(IResourceGenerator generator, IZetboxServerContext ctx, IEnumerable<Zetbox.App.Base.Module> modules) { var moduleNames = modules.Select(m => m.Name).ToArray(); using (var writer = generator.AddFile("GUI\\Applications")) // See ZetboxAssetKeys.Applications { foreach (var app in ctx.GetQuery<Application>() .ToList() .Where(a => moduleNames.Contains(a.Module.Name)) .OrderBy(a => a.Name)) { writer.AddResource(ZetboxAssetKeys.ConstructNameKey(app), app.Name); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(app), app.Description); } } }
public void GenerateResourcesAsyncWithConfigNullError(IResourceGenerator generator, AzureIntegrationServicesModel model, IList <YamlStream> config, Exception e) { "Given a resource generator" .x(() => generator = new YamlResourceGenerator(_mockLogger.Object)); "And a model" .x(() => model = _model); "And null configuration" .x(() => config.Should().BeNull()); "When generating resources" .x(async() => e = await Record.ExceptionAsync(async() => await generator.GenerateResourcesAsync(model, config, _source.Token))); "Then the generation should error" .x(() => e.Should().NotBeNull().And.Subject.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("config")); }
public void Generate(IResourceGenerator generator, IZetboxServerContext ctx, IEnumerable<Zetbox.App.Base.Module> modules) { var moduleNames = modules.Select(m => m.Name).ToArray(); var tags = GetTags(ctx, moduleNames); var exceptTags = moduleNames.Contains("ZetboxBase") ? new List<string>() : GetTags(ctx, "ZetboxBase", "GUI"); using (var writer = generator.AddFile("ZetboxBase\\CategoryTags")) { foreach (var tag in tags.Except(exceptTags).OrderBy(i => i)) { if(!string.IsNullOrWhiteSpace(tag)) writer.AddResource(tag, tag); } } }
public static BodyResourceData Load(IResourceGenerator generator, CelestialBody body, ConfigNode bodyNode) { if (bodyNode == null) { bodyNode = new ConfigNode(); } var resources = generator.Load(body, bodyNode.GetNode("GeneratorData")); var scans = new CellSet(KethaneData.GridLevel); var scanMask = bodyNode.GetValue("ScanMask"); if (scanMask != null) { try { scans = new CellSet(KethaneData.GridLevel, Misc.FromBase64String(scanMask)); } catch (FormatException e) { Debug.LogError(String.Format("[Kethane] Failed to parse {0} scan string, resetting ({1})", body.name, e.Message)); } } return new BodyResourceData(resources, scans); }
public static ResourceData Load(ResourceDefinition resource, ConfigNode resourceNode) { var bodyResources = new Dictionary<CelestialBody, BodyResourceData>(); var generatorNode = resourceNode.GetNode("Generator") ?? resource.Generator; var generator = createGenerator(generatorNode.CreateCopy()); if (generator == null) { Debug.LogWarning("[Kethane] Defaulting to empty generator for " + resource.Resource); generator = new EmptyResourceGenerator(); } var bodyNodes = resourceNode.GetNodes("Body"); foreach (var body in FlightGlobals.Bodies) { var bodyNode = bodyNodes.SingleOrDefault(n => n.GetValue("Name") == body.name); bodyResources[body] = BodyResourceData.Load(generator, body, bodyNode); } return new ResourceData(generator, generatorNode, bodyResources); }
public void GenerateResourcesAsyncWithMissingResourceMapKeyWithDebug(IResourceGenerator generator, AzureIntegrationServicesModel model, IList <YamlStream> config, Exception e) { "Given a resource generator" .x(() => generator = new YamlResourceGenerator(_mockLogger.Object)); "And a model with a missing application resource map key" .x(() => { model = _model; model.MigrationTarget.MessageBus.Applications.Where(a => a.Name == "System").Single().ResourceMapKey = null; }); "And configuration" .x(async() => { var renderer = new LiquidTemplateRenderer(_mockLogger.Object); var repository = new FileConfigurationRepository(renderer, _mockLogger.Object); await repository.RenderConfigurationAsync(model, OkMultiConfigPath, _tempOutputTemplatePath); config = repository.GetConfiguration(_tempOutputTemplatePath); }); "When generating resources" .x(async() => e = await Record.ExceptionAsync(async() => await generator.GenerateResourcesAsync(model, config, _source.Token))); "Then the generation should succeed" .x(() => e.Should().BeNull()); "And it should have issued a debug message" .x(() => { // Verify debug log message output once _mockLogger.Verify(l => l.Log( It.Is <LogLevel>(l => l == LogLevel.Debug), It.IsAny <EventId>(), It.Is <It.IsAnyType>((v, t) => v.ToString().Contains("is not associated with a resource map key", StringComparison.CurrentCultureIgnoreCase)), It.IsAny <Exception>(), It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)), Times.Once); }); }
public static ResourceData Load(ResourceDefinition resource, ConfigNode resourceNode) { var bodyResources = new Dictionary <CelestialBody, BodyResourceData>(); var generatorNode = resourceNode.GetNode("Generator") ?? resource.Generator; var generator = createGenerator(generatorNode.CreateCopy()); if (generator == null) { Debug.LogWarning("[Kethane] Defaulting to empty generator for " + resource.Resource); generator = new EmptyResourceGenerator(); } var bodyNodes = resourceNode.GetNodes("Body"); foreach (var body in FlightGlobals.Bodies) { var bodyNode = bodyNodes.SingleOrDefault(n => n.GetValue("Name") == body.name); bodyResources[body] = BodyResourceData.Load(generator, body, bodyNode); } return(new ResourceData(generator, generatorNode, bodyResources)); }
public void Generate(IResourceGenerator generator, IZetboxServerContext ctx, IEnumerable<Zetbox.App.Base.Module> modules) { var moduleNames = modules.Select(m => m.Name).ToArray(); using (var writer = generator.AddFile("ZetboxBase\\DataTypes")) // See ZetboxAssetKeys.DataTypes { foreach (var dt in ctx.GetQuery<DataType>() .ToList() .Where(dt => moduleNames.Contains(dt.Module.Name)) .OrderBy(dt => dt.Name)) { writer.AddResource(ZetboxAssetKeys.ConstructNameKey(dt), dt.Name); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(dt), dt.Description); } } foreach (var grp in ctx.GetQuery<Property>() .ToList() .Where(p => moduleNames.Contains(p.Module.Name)) .GroupBy(p => p.ObjectClass) .OrderBy(p => p.Key.Module.Namespace) .ThenBy(p => p.Key.Name)) { var dtName = grp.Key.Module.Namespace + "." + grp.Key.Name; using (var writer = generator.AddFile("ZetboxBase\\Properties\\" + dtName)) // See ZetboxAssetKeys.ConstructBaseName { foreach (var prop in grp.OrderBy(p => p.Name)) { writer.AddResource(ZetboxAssetKeys.ConstructLabelKey(prop), string.IsNullOrWhiteSpace(prop.Label) ? prop.Name : prop.Label); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(prop), prop.Description); } } } foreach (var grp in ctx.GetQuery<Method>() .ToList() .Where(m => moduleNames.Contains(m.Module.Name)) .GroupBy(m => m.ObjectClass) .OrderBy(m => m.Key.Module.Namespace) .ThenBy(m => m.Key.Name)) { var dtName = grp.Key.Module.Namespace + "." + grp.Key.Name; using (var writer = generator.AddFile("ZetboxBase\\Methods\\" + dtName)) // See ZetboxAssetKeys.ConstructBaseName { foreach (var meth in grp.OrderBy(p => p.Name)) { writer.AddResource(ZetboxAssetKeys.ConstructLabelKey(meth), string.IsNullOrWhiteSpace(meth.Label) ? meth.Name : meth.Label); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(meth), meth.Description); foreach (var param in meth.Parameter) { writer.AddResource(ZetboxAssetKeys.ConstructLabelKey(param), string.IsNullOrWhiteSpace(param.Label) ? param.Name : param.Label); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(param), param.Description); } } } } foreach (var enumeration in ctx.GetQuery<Enumeration>() .ToList() .Where(dt => moduleNames.Contains(dt.Module.Name)) .OrderBy(dt => dt.Name)) { using (var writer = generator.AddFile("ZetboxBase\\Enumerations\\" + enumeration.Module.Namespace + "." + enumeration.Name)) // See ZetboxAssetKeys.ConstructBaseName { foreach (var entry in enumeration.EnumerationEntries) { writer.AddResource(ZetboxAssetKeys.ConstructLabelKey(entry), string.IsNullOrWhiteSpace(entry.Label) ? entry.Name : entry.Label); writer.AddResource(ZetboxAssetKeys.ConstructDescriptionKey(entry), entry.Description); } } } }
protected ResourceData(IResourceGenerator generator, ConfigNode generatorNode, IDictionary <CelestialBody, BodyResourceData> bodies) { this.generator = generator; this.generatorNode = generatorNode; this.bodies = new Dictionary <CelestialBody, BodyResourceData>(bodies); }
public void ConstructWithNullRepository(ResourceGeneratorAnalyzer analyzer, IConfigurationRepository repository, IResourceGenerator generator, IApplicationModel model, ILogger logger, MigrationContext context, Exception e) { "Given an analyzer" .x(() => analyzer.Should().BeNull()); "And a null repository" .x(() => repository.Should().BeNull()); "And a generator" .x(() => generator = _mockGenerator.Object); "And a model" .x(() => model = TestHelper.CreateDefaultModelForAnalyzing()); "And a context" .x(() => context = TestHelper.BuildContext()); "And a logger" .x(() => logger = _mockLogger.Object); "When constructing with a null repository" .x(() => e = Record.Exception(() => new ResourceGeneratorAnalyzer(repository, generator, model, context, logger))); "Then the constructor should throw an exception" .x(() => e.Should().NotBeNull().And.Subject.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("repository")); }
public void ConstructWithSuccess(ResourceGeneratorAnalyzer analyzer, IConfigurationRepository repository, IResourceGenerator generator, IApplicationModel model, ILogger logger, MigrationContext context, Exception e) { "Given an analyzer" .x(() => analyzer.Should().BeNull()); "And a repository" .x(() => repository = _mockRepository.Object); "And a generator" .x(() => generator = _mockGenerator.Object); "And a model" .x(() => model = TestHelper.CreateDefaultModelForAnalyzing()); "And a context" .x(() => context = TestHelper.BuildContext()); "And a logger" .x(() => logger = _mockLogger.Object); "When constructing" .x(() => e = Record.Exception(() => new ResourceGeneratorAnalyzer(repository, generator, model, context, logger))); "Then the constructor should succeed" .x(() => e.Should().BeNull()); }
protected ResourceData(IResourceGenerator generator, ConfigNode generatorNode, IDictionary<CelestialBody, BodyResourceData> bodies) { this.generator = generator; this.generatorNode = generatorNode; this.bodies = new Dictionary<CelestialBody, BodyResourceData>(bodies); }