コード例 #1
0
        private IEnumerable <IWorkerProvider> TestReadWorkerProviderFromConfig(IEnumerable <TestLanguageWorkerConfig> configs, ILogger testLogger, string language = null, Dictionary <string, string> keyValuePairs = null)
        {
            var workerPathSection = $"{LanguageWorkerConstants.LanguageWorkersSectionName}:{LanguageWorkerConstants.WorkersDirectorySectionName}";

            try
            {
                foreach (var workerConfig in configs)
                {
                    CreateWorkerFolder(rootPath, workerConfig);
                }

                IConfigurationRoot config = TestConfigBuilder(workerPathSection, keyValuePairs);

                var scriptHostConfig      = new ScriptHostConfiguration();
                var scriptSettingsManager = new ScriptSettingsManager(config);
                var configFactory         = new WorkerConfigFactory(config, testLogger);

                return(configFactory.GetWorkerProviders(testLogger, scriptSettingsManager, language: language));
            }
            finally
            {
                DeleteTestDir(rootPath);
                DeleteTestDir(customRootPath);
            }
        }
コード例 #2
0
        private IEnumerable <IWorkerProvider> TestReadWorkerProviderFromConfig(IEnumerable <TestLanguageWorkerConfig> configs, ILogger testLogger, string language = null, Dictionary <string, string> keyValuePairs = null, bool appSvcEnv = false)
        {
            var workerPathSection = $"{LanguageWorkerConstants.LanguageWorkersSectionName}:{LanguageWorkerConstants.WorkersDirectorySectionName}";

            try
            {
                foreach (var workerConfig in configs)
                {
                    CreateWorkerFolder(rootPath, workerConfig);
                }

                IConfigurationRoot config = TestConfigBuilder(workerPathSection, keyValuePairs);

                var scriptHostConfig      = new ScriptHostConfiguration();
                var scriptSettingsManager = new ScriptSettingsManager(config);
                var configFactory         = new WorkerConfigFactory(config, testLogger);
                if (appSvcEnv)
                {
                    var testEnvVariables = new Dictionary <string, string>
                    {
                        { EnvironmentSettingNames.AzureWebsiteInstanceId, "123" },
                    };
                    using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
                    {
                        return(configFactory.GetWorkerProviders(testLogger, scriptSettingsManager, language: language));
                    }
                }
                return(configFactory.GetWorkerProviders(testLogger, scriptSettingsManager, language: language));
            }
            finally
            {
                DeleteTestDir(rootPath);
                DeleteTestDir(customRootPath);
            }
        }
コード例 #3
0
        public void SetsDebugPort()
        {
            var lang              = "test";
            var extension         = ".test";
            var defaultWorkerPath = "./test";

            var workerPath = "/path/to/custom/worker";

            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>($"workers:{lang}:debug", "1000"),
                new KeyValuePair <string, string>($"workers:{lang}:path", workerPath),
            })
                         .Build();

            var logger = new TestLogger("test");
            var workerConfigFactory = new WorkerConfigFactory(config, logger);

            var workerConfigs = workerConfigFactory.GetConfigs(new List <IWorkerProvider>()
            {
                new TestWorkerProvider()
                {
                    Language          = lang,
                    Extension         = extension,
                    DefaultWorkerPath = defaultWorkerPath
                }
            });

            Assert.Equal(workerConfigs.Single().Arguments.WorkerPath, workerPath);
        }
        public void LanguageWorker_HydratedWorkerPath_UnsupportedEnvironmentRuntimeVersion()
        {
            _testEnvironment.SetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeVersionSettingName, "3.4");

            RpcWorkerDescription workerDescription = new RpcWorkerDescription()
            {
                Arguments                = new List <string>(),
                DefaultExecutablePath    = "python",
                SupportedRuntimeVersions = new List <string>()
                {
                    "3.6", "3.7"
                },
                DefaultWorkerPath = $"{LanguageWorkerConstants.RuntimeVersionPlaceholder}/worker.py",
                WorkerDirectory   = string.Empty,
                Extensions        = new List <string>()
                {
                    ".py"
                },
                Language = "python",
                DefaultRuntimeVersion = "3.7" // Ignore this if environment is set
            };
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, _testEnvironment);

            var ex = Assert.Throws <NotSupportedException>(() => configFactory.GetHydratedWorkerPath(workerDescription));

            Assert.Equal(ex.Message, $"Version 3.4 is not supported for language {workerDescription.Language}");
        }
コード例 #5
0
        public void DefaultLanguageWorkersDir()
        {
            var expectedWorkersDir = Path.Combine(Path.GetDirectoryName(new Uri(typeof(WorkerConfigFactory).Assembly.CodeBase).LocalPath), LanguageWorkerConstants.DefaultWorkersDirectoryName);
            var config             = new ConfigurationBuilder().Build();
            var testLogger         = new TestLogger("test");
            var configFactory      = new WorkerConfigFactory(config, testLogger);

            Assert.Equal(expectedWorkersDir, configFactory.WorkersDirPath);
        }
コード例 #6
0
ファイル: IronClient.cs プロジェクト: RPM1984/IronTools
        /// <summary>
        /// Initializes a new instance of the <see cref="IronClient" /> class.
        /// </summary>
        /// <param name="name">Client name</param>
        /// <param name="version">Version of the client</param>
        /// <param name="product">Iron.io product</param>
        /// <param name="host">hostname to use</param>
        /// <param name="port">port number</param>
        /// <param name="projectId">Project identifier available from the HUD</param>
        /// <param name="token">Token available from the HUD</param>
        /// <param name="protocol">Protocol e.g. http https</param>
        /// <param name="apiVersion">Version of the API to use (1,2)</param>
        /// <param name="configFile">Path to a specific JSON configuration file to load</param>
        public IronClient(string name, string version, string product, string host = null, int port = 0, string projectId = null, string token = null, string protocol = null, int apiVersion = 0, string configFile = null)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException("Name cannot be null or empty");
            }

            AutoMapper.Mapper.CreateMap <Configuration, Configuration>().ForMember(c => c.Port, opt => opt.Condition(s => s.Port > 0))
            .ForMember(c => c.ApiVersion, opt => opt.Condition(s => s.ApiVersion > 0))
            .ForMember(c => c.Host, opt => opt.Condition(s => !string.IsNullOrEmpty(s.Host)))
            .ForMember(c => c.ProjectId, opt => opt.Condition(s => !string.IsNullOrEmpty(s.ProjectId)))
            .ForMember(c => c.Token, opt => opt.Condition(s => !string.IsNullOrEmpty(s.Token)))
            .ForMember(c => c.Protocol, opt => opt.Condition(s => !string.IsNullOrEmpty(s.Protocol)));

            ConfigurationFactory configFactory = new DefaultConfigurationFactory();

            if (product == "iron_mq")
            {
                configFactory = new MQConfigFactory(configFactory);
            }

            if (product == "iron_worker")
            {
                configFactory = new WorkerConfigFactory(configFactory);
            }

            if (product == "iron_cache")
            {
                configFactory = new CacheConfigFactory(configFactory);
            }

            string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
                               Environment.OSVersion.Platform == PlatformID.MacOSX)
            ? Environment.GetEnvironmentVariable("HOME")
            : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");

            configFactory = new JsonConfigFactory(configFactory, System.IO.Path.Combine(homePath, ".iron.json"));
            configFactory = new EnvConfigFactory(configFactory);
            configFactory = new JsonConfigFactory(configFactory, "iron.json");
            configFactory = new JsonConfigFactory(configFactory, configFile);
            configFactory = new ArgsConfigFactory(configFactory, name, version, product, host, port, projectId, token, protocol, apiVersion);

            this.Config = configFactory.GetConfiguartion();

            if (string.IsNullOrEmpty(this.Config.ProjectId))
            {
                throw new Exception("No projectId set. projectId is a required field.");
            }

            if (string.IsNullOrEmpty(this.Config.Token))
            {
                throw new Exception("No token set. token is a required field.");
            }

            this.BuildHeaders();
        }
コード例 #7
0
        public void LanguageWorker_WorkersDir_Set()
        {
            var expectedWorkersDir = @"d:\testWorkersDir";
            var config             = new ConfigurationBuilder()
                                     .AddInMemoryCollection(new Dictionary <string, string>
            {
                [$"{LanguageWorkerConstants.LanguageWorkersSectionName}:{LanguageWorkerConstants.WorkersDirectorySectionName}"] = expectedWorkersDir
            })
                                     .Build();
            var testLogger    = new TestLogger("test");
            var configFactory = new WorkerConfigFactory(config, testLogger);

            Assert.Equal(expectedWorkersDir, configFactory.WorkersDirPath);
        }
コード例 #8
0
        public void LanguageWorker_WorkersDir_NotSet()
        {
            var expectedWorkersDir = Path.Combine(Path.GetDirectoryName(new Uri(typeof(WorkerConfigFactory).Assembly.CodeBase).LocalPath), LanguageWorkerConstants.DefaultWorkersDirectoryName);
            var configBuilder      = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                     .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger);

            Assert.Equal(expectedWorkersDir, configFactory.WorkersDirPath);
        }
        public void LanguageWorker_HydratedWorkerPath_UnsupportedArchitecture(Architecture unsupportedArch)
        {
            RpcWorkerDescription workerDescription = new RpcWorkerDescription()
            {
                Arguments              = new List <string>(),
                DefaultExecutablePath  = "python",
                DefaultWorkerPath      = "{architecture}/worker.py",
                WorkerDirectory        = string.Empty,
                SupportedArchitectures = new List <string>()
                {
                    Architecture.X64.ToString(), Architecture.X86.ToString()
                },
                SupportedRuntimeVersions = new List <string>()
                {
                    "3.6", "3.7"
                },
                SupportedOperatingSystems = new List <string>()
                {
                    OSPlatform.Windows.ToString(),
                                 OSPlatform.OSX.ToString(),
                                 OSPlatform.Linux.ToString()
                },
                Extensions = new List <string>()
                {
                    ".py"
                },
                Language = "python",
                DefaultRuntimeVersion = "3.7"
            };
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            Mock <ISystemRuntimeInformation> mockRuntimeInfo = new Mock <ISystemRuntimeInformation>();

            mockRuntimeInfo.Setup(r => r.GetOSArchitecture()).Returns(unsupportedArch);
            mockRuntimeInfo.Setup(r => r.GetOSPlatform()).Returns(OSPlatform.Linux);
            var configFactory = new WorkerConfigFactory(config, testLogger, mockRuntimeInfo.Object, _testEnvironment);

            var ex = Assert.Throws <PlatformNotSupportedException>(() => configFactory.GetHydratedWorkerPath(workerDescription));

            Assert.Equal(ex.Message, $"Architecture {unsupportedArch.ToString()} is not supported for language {workerDescription.Language}");
        }
コード例 #10
0
        public void FailsIfNoJavaHome()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>($"{LanguageWorkerConstants.LanguageWorkersSectionName}:{LanguageWorkerConstants.JavaLanguageWorkerName}:debug", "1000")
            })
                         .Build();

            var testLogger    = new TestLogger("test");
            var configFactory = new WorkerConfigFactory(config, testLogger);
            var provider      = new JavaWorkerProvider(configFactory.WorkerDirPath);
            var args          = new WorkerProcessArguments();
            var result        = provider.TryConfigureArguments(args, config, testLogger);

            Assert.False(result);
        }
コード例 #11
0
        public void DisablesDebugIfNotConfigured()
        {
            var config = new ConfigurationBuilder()
                         .AddInMemoryCollection(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("JAVA_HOME", "asdf"),
            })
                         .Build();

            var testLogger    = new TestLogger("test");
            var configFactory = new WorkerConfigFactory(config, testLogger);
            var provider      = new JavaWorkerProvider(configFactory.WorkerDirPath);
            var args          = new WorkerProcessArguments();
            var result        = provider.TryConfigureArguments(args, config, testLogger);

            Assert.True(result);
            Assert.DoesNotContain(args.ExecutableArguments, (exeArg) => exeArg.Contains("address="));
        }
コード例 #12
0
        public void LanguageWorker_HydratedWorkerPath_EnvironmentVersionNotSet(string defaultWorkerPath, string expectedPath)
        {
            // We fall back to the default version when this is not set
            // Environment.SetEnvironmentVariable(LanguageWorkerConstants.FunctionWorkerRuntimeVersionSettingName, "3.7");

            RpcWorkerDescription workerDescription = new RpcWorkerDescription()
            {
                Arguments              = new List <string>(),
                DefaultExecutablePath  = "python",
                SupportedArchitectures = new List <string>()
                {
                    Architecture.X64.ToString(), Architecture.X86.ToString()
                },
                SupportedRuntimeVersions = new List <string>()
                {
                    "3.6", "3.7"
                },
                SupportedOperatingSystems = new List <string>()
                {
                    OSPlatform.Windows.ToString(),
                                 OSPlatform.OSX.ToString(),
                                 OSPlatform.Linux.ToString()
                },
                DefaultWorkerPath = defaultWorkerPath,
                WorkerDirectory   = string.Empty,
                Extensions        = new List <string>()
                {
                    ".py"
                },
                Language = "python",
                DefaultRuntimeVersion = "3.6"
            };
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, _testEnvironment);

            Assert.Equal(expectedPath, configFactory.GetHydratedWorkerPath(workerDescription));
        }
コード例 #13
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>($"{LanguageWorkerConstants.LanguageWorkersSectionName}:{LanguageWorkerConstants.JavaLanguageWorkerName}:debug", "localhost:1000")
            })
                         .Build();

            var testLogger    = new TestLogger("test");
            var configFactory = new WorkerConfigFactory(config, testLogger);

            var provider = new JavaWorkerProvider(configFactory.WorkerDirPath);
            var args     = new WorkerProcessArguments();
            var result   = provider.TryConfigureArguments(args, config, testLogger);

            Assert.True(result);
            Assert.Contains(args.ExecutableArguments, (exeArg) => exeArg.Contains("address=localhost:1000"));
        }
コード例 #14
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 testLogger    = new TestLogger("test");
            var configFactory = new WorkerConfigFactory(config, testLogger);
            var provider      = new JavaWorkerProvider(configFactory.WorkerDirPath);
            var args          = new WorkerProcessArguments();
            var result        = provider.TryConfigureArguments(args, config, testLogger);

            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);
        }
コード例 #15
0
        public void JavaPath_JavaHome_NotSet()
        {
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, _testEnvironment);
            var testEnvVariables      = new Dictionary <string, string>
            {
                { "JAVA_HOME", string.Empty }
            };

            using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
            {
                var javaPath = configFactory.GetExecutablePathForJava("java");
                Assert.Equal("java", javaPath);
            }
        }
コード例 #16
0
        public void AddArgumentsFromAppSettings_JavaOpts(string expectedArgument, string javaOpts)
        {
            WorkerDescription workerDescription = new WorkerDescription()
            {
                Arguments = new List <string>()
                {
                    "-jar"
                },
                DefaultExecutablePath = "java",
                DefaultWorkerPath     = "javaworker.jar",
                Extensions            = new List <string>()
                {
                    ".jar"
                },
                Language = "java"
            };
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test",
                ["languageWorkers:java:arguments"] = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger);
            var languageSection       = config.GetSection("languageWorkers:java");
            var testEnvVariables      = new Dictionary <string, string>
            {
                { "JAVA_OPTS", javaOpts }
            };

            using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
            {
                WorkerConfigFactory.AddArgumentsFromAppSettings(workerDescription, languageSection);
                Assert.Equal(2, workerDescription.Arguments.Count);
                Assert.Equal(expectedArgument, workerDescription.Arguments[1]);
            }
        }
コード例 #17
0
        public void JavaPath_JavaHome_Set()
        {
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger);
            var testEnvVariables      = new Dictionary <string, string>
            {
                { "JAVA_HOME", @"D:\Program Files\Java\jdk1.7.0_51" }
            };

            using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
            {
                var javaPath = configFactory.GetExecutablePathForJava("java");
                Assert.Equal(@"D:\Program Files\Java\jdk1.7.0_51\bin\java", javaPath);
            }
        }
コード例 #18
0
        private IEnumerable <WorkerConfig> TestReadWorkerProviderFromConfig(IEnumerable <TestLanguageWorkerConfig> configs, ILogger testLogger, string language = null, Dictionary <string, string> keyValuePairs = null, bool appSvcEnv = false)
        {
            Mock <IEnvironment> mockEnvironment = new Mock <IEnvironment>();
            var workerPathSection = $"{LanguageWorkerConstants.LanguageWorkersSectionName}:{OutOfProcConstants.WorkersDirectorySectionName}";

            try
            {
                foreach (var workerConfig in configs)
                {
                    WorkerConfigTestUtilities.CreateWorkerFolder(rootPath, workerConfig);
                }

                IConfigurationRoot config = TestConfigBuilder(workerPathSection, keyValuePairs);

                var scriptHostOptions     = new ScriptJobHostOptions();
                var scriptSettingsManager = new ScriptSettingsManager(config);
                var configFactory         = new WorkerConfigFactory(config, testLogger, _testSysRuntimeInfo, _testEnvironment);
                if (appSvcEnv)
                {
                    var testEnvVariables = new Dictionary <string, string>
                    {
                        { EnvironmentSettingNames.AzureWebsiteInstanceId, "123" },
                    };
                    using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
                    {
                        configFactory.BuildWorkerProviderDictionary();
                        return(configFactory.GetConfigs());
                    }
                }
                configFactory.BuildWorkerProviderDictionary();
                return(configFactory.GetConfigs());
            }
            finally
            {
                WorkerConfigTestUtilities.DeleteTestDir(rootPath);
                WorkerConfigTestUtilities.DeleteTestDir(customRootPath);
            }
        }
コード例 #19
0
        public void JavaPath_AppServiceEnv()
        {
            var configBuilder = ScriptSettingsManager.CreateDefaultConfigurationBuilder()
                                .AddInMemoryCollection(new Dictionary <string, string>
            {
                ["languageWorker"] = "test"
            });
            var config = configBuilder.Build();
            var scriptSettingsManager = new ScriptSettingsManager(config);
            var testLogger            = new TestLogger("test");
            var configFactory         = new WorkerConfigFactory(config, testLogger);
            var testEnvVariables      = new Dictionary <string, string>
            {
                { EnvironmentSettingNames.AzureWebsiteInstanceId, "123" },
                { "JAVA_HOME", @"D:\Program Files\Java\jdk1.7.0_51" }
            };

            using (var variables = new TestScopedSettings(scriptSettingsManager, testEnvVariables))
            {
                var javaPath = configFactory.GetExecutablePathForJava("../../zulu8.23.0.3-jdk8.0.144-win_x64/bin/java");
                Assert.Equal(@"D:\Program Files\Java\zulu8.23.0.3-jdk8.0.144-win_x64\bin\java", javaPath);
            }
        }