Пример #1
0
        public void TryConfigureArguments_ReturnsTrue()
        {
            var provider = new GenericWorkerProvider(new WorkerDescription(), new List <string>());
            var args     = new ArgumentsDescription();

            Assert.True(provider.TryConfigureArguments(args, null, null));
        }
        public IEnumerable <WorkerConfig> GetConfigs(IEnumerable <IWorkerProvider> providers)
        {
            foreach (var provider in providers)
            {
                var description     = provider.GetDescription();
                var languageSection = _config.GetSection($"workers:{description.Language}");

                // Can override the path we load from, or we use the default path from where we loaded the config
                var workerPath = languageSection.GetSection("path").Value ?? Path.Combine(provider.GetWorkerDirectoryPath(), description.DefaultWorkerPath);

                var arguments = new ArgumentsDescription()
                {
                    ExecutablePath = description.DefaultExecutablePath,
                    WorkerPath     = workerPath
                };

                if (provider.TryConfigureArguments(arguments, _config, _logger))
                {
                    yield return(new WorkerConfig()
                    {
                        Description = description,
                        Arguments = arguments
                    });
                }
                else
                {
                    _logger.LogTrace($"Could not configure language worker {description.Language}.");
                }
            }
        }
        public IEnumerable <WorkerConfig> GetConfigs(IEnumerable <IWorkerProvider> providers)
        {
            foreach (var provider in providers)
            {
                var description     = provider.GetDescription();
                var languageSection = _config.GetSection($"workers:{description.Language}");

                // get explicit worker path from config, or build relative path from default
                var workerPath = languageSection.GetSection("path").Value;
                if (string.IsNullOrEmpty(workerPath) && !string.IsNullOrEmpty(description.DefaultWorkerPath))
                {
                    workerPath = Path.Combine(_assemblyDir, "workers", description.Language.ToLower(), description.DefaultWorkerPath);
                }

                var arguments = new ArgumentsDescription()
                {
                    ExecutablePath = description.DefaultExecutablePath,
                    WorkerPath     = workerPath
                };

                if (provider.TryConfigureArguments(arguments, _config, _logger))
                {
                    yield return(new WorkerConfig()
                    {
                        Description = description,
                        Arguments = arguments
                    });
                }
                else
                {
                    _logger.LogError($"Could not configure language worker {description.Language}.");
                }
            }
        }
Пример #4
0
        public bool TryConfigureArguments(ArgumentsDescription args, IConfiguration config, ILogger logger)
        {
            var options = new DefaultWorkerOptions();

            config.GetSection("workers:node").Bind(options);
            if (options.TryGetDebugPort(out int debugPort))
            {
                args.ExecutableArguments.Add($"--inspect={debugPort}");
            }
            return(true);
        }
        public void DisablesDebugIfNotConfigured()
        {
            var config = new ConfigurationBuilder().Build();

            var provider = new NodeWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.True(result);
            Assert.DoesNotContain(args.ExecutableArguments, (exeArgs) => exeArgs.Contains("--inspect"));
        }
        public bool TryConfigureArguments(ArgumentsDescription args, IConfiguration config, ILogger logger)
        {
            var options = new DefaultWorkerOptions();

            config.GetSection("workers:node").Bind(options);

            if (!string.IsNullOrWhiteSpace(options.Debug))
            {
                args.ExecutableArguments.Add($"--inspect={options.Debug}");
            }
            return(true);
        }
Пример #7
0
        public void FailsIfNoJavaHome()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("workers:java:debug", "1000")
            })
                         .Build();

            var provider = new JavaWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.False(result);
        }
Пример #8
0
        public void DisablesDebugIfNotConfigured()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("JAVA_HOME", "asdf"),
            })
                         .Build();

            var provider = new JavaWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.True(result);
            Assert.DoesNotContain(args.ExecutableArguments, (exeArg) => exeArg.Contains("address="));
        }
        public void SetsDebugAddress()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("workers:node:debug", "localhost:2020"),
            })
                         .Build();

            var provider = new NodeWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.True(result);
            Assert.Contains(args.ExecutableArguments, (exeArgs) => exeArgs.Contains("--inspect=localhost:2020"));
        }
Пример #10
0
        public void SetsDebugAddress()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("JAVA_HOME", "asdf"),
                new KeyValuePair <string, string>("workers:java:debug", "localhost:1000")
            })
                         .Build();

            var provider = new JavaWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.True(result);
            Assert.Contains(args.ExecutableArguments, (exeArg) => exeArg.Contains("address=localhost:1000"));
        }
Пример #11
0
        public void OverridesJavaHomeInAzure()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("JAVA_HOME", "d:/java/jdk1.7.0"),
                new KeyValuePair <string, string>("WEBSITE_INSTANCE_ID", "id"),
            })
                         .Build();

            var provider = new JavaWorkerProvider();
            var args     = new ArgumentsDescription();
            var result   = provider.TryConfigureArguments(args, config, new TestLogger("test"));

            Assert.True(result);
            var exePath = Path.GetFullPath("d:/java/zulu8.23.0.3-jdk8.0.144-win_x64/bin/java");

            Assert.Equal(exePath, args.ExecutablePath);
        }
Пример #12
0
        public IEnumerable <WorkerConfig> GetConfigs(IEnumerable <IWorkerProvider> providers)
        {
            foreach (var provider in providers)
            {
                var description     = provider.GetDescription();
                var languageSection = _config.GetSection($"workers:{description.Language}");

                // Resolve worker path
                // 1. If workers.{language}.path is set, use that explicitly
                // 2. If workers.path is set, use that as the base directory + language + default path
                // 3. Else, use the default workers directory

                // get explicit worker path from config, or build relative path from default
                var workerPath = languageSection.GetSection("path").Value;
                if (string.IsNullOrEmpty(workerPath))
                {
                    var baseWorkerPath = !string.IsNullOrEmpty(_config.GetSection("workers:path").Value) ?
                                         _config.GetSection("workers:path").Value :
                                         Path.Combine(_assemblyDir, "workers");
                    workerPath = Path.Combine(baseWorkerPath, description.Language.ToLower(), description.DefaultWorkerPath);
                }

                var arguments = new ArgumentsDescription()
                {
                    ExecutablePath = description.DefaultExecutablePath,
                    WorkerPath     = workerPath
                };

                if (provider.TryConfigureArguments(arguments, _config, _logger))
                {
                    yield return(new WorkerConfig()
                    {
                        Description = description,
                        Arguments = arguments
                    });
                }
                else
                {
                    _logger.LogError($"Could not configure language worker {description.Language}.");
                }
            }
        }
        public bool TryConfigureArguments(ArgumentsDescription args, IConfiguration config, ILogger logger)
        {
            var options = new DefaultWorkerOptions();

            config.GetSection("workers:java").Bind(options);
            var env = new JavaEnvironment();

            config.Bind(env);
            if (string.IsNullOrEmpty(env.JAVA_HOME))
            {
                logger.LogError("Unable to configure java worker. Could not find JAVA_HOME app setting.");
                return(false);
            }

            args.ExecutablePath = Path.GetFullPath(Path.Combine(env.ResolveJavaHome(), "bin", "java"));
            args.ExecutableArguments.Add("-jar");

            if (options.TryGetDebugPort(out int debugPort))
            {
                if (!env.HasJavaOpts)
                {
                    var debugOpts = $"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address={debugPort}";
                    args.ExecutableArguments.Add(debugOpts);
                }
                else
                {
                    logger.LogWarning("Both JAVA_OPTS and debug port settings found. Defaulting to JAVA_OPTS.");
                }
            }

            if (env.HasJavaOpts)
            {
                args.ExecutableArguments.Add(env.JAVA_OPTS);
            }
            return(true);
        }
 public bool TryConfigureArguments(ArgumentsDescription args, IConfiguration config, ILogger logger)
 {
     args.ExecutableArguments.AddRange(_arguments);
     return(true);
 }
Пример #15
0
        /// <summary>
        /// Initialises the action description.
        /// </summary>
        protected override void Initialise()
        {
            base.Initialise();

            maArguments = new ArgumentsDescription(this);
        }
Пример #16
0
 public bool TryConfigureArguments(ArgumentsDescription args, IConfiguration config, ILogger logger)
 {
     // make no modifications
     return(true);
 }