Beispiel #1
0
        public static void ReadFunctionsMetadataSucceeds()
        {
            string functionsPath = Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\sample");
            // Setup
            var settings             = CreateWebSettings();
            var fileSystem           = CreateFileSystem(settings.ScriptPath);
            var loggerFactory        = MockNullLogerFactory.CreateLoggerFactory();
            var contentBuilder       = new StringBuilder();
            var httpClient           = CreateHttpClient(contentBuilder);
            var proxyMetadataManager = new Mock <IProxyMetadataManager>(MockBehavior.Strict);
            var proxyMetadata        = new ProxyMetadataInfo(new FunctionMetadata[0].ToImmutableArray(), null, null);

            proxyMetadataManager.SetupGet(p => p.ProxyMetadata).Returns(proxyMetadata);
            var webManager = new WebFunctionsManager(new OptionsWrapper <ScriptApplicationHostOptions>(settings), new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, proxyMetadataManager.Object);

            FileUtility.Instance = fileSystem;
            IEnumerable <FunctionMetadata> metadata = webManager.GetFunctionsMetadata();
            var jsFunctions      = metadata.Where(funcMetadata => funcMetadata.Language == LanguageWorkerConstants.NodeLanguageWorkerName).ToList();
            var unknownFunctions = metadata.Where(funcMetadata => string.IsNullOrEmpty(funcMetadata.Language)).ToList();

            Assert.Equal(2, jsFunctions.Count());
            Assert.Equal(1, unknownFunctions.Count());
        }
Beispiel #2
0
        public async Task VerifyDurableTaskHubNameIsAdded()
        {
            var vars = new Dictionary <string, string>
            {
                { EnvironmentSettingNames.WebSiteAuthEncryptionKey, TestHelpers.GenerateKeyHexString() },
                { EnvironmentSettingNames.AzureWebsiteHostName, "appName.azurewebsites.net" }
            };

            using (var env = new TestScopedEnvironmentVariable(vars))
            {
                // Setup
                const string expectedSyncTriggersPayload = "[{\"authLevel\":\"anonymous\",\"type\":\"httpTrigger\",\"direction\":\"in\",\"name\":\"req\",\"functionName\":\"function1\"}," +
                                                           "{\"name\":\"myQueueItem\",\"type\":\"orchestrationTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function2\",\"taskHubName\":\"TestHubValue\"}," +
                                                           "{\"name\":\"myQueueItem\",\"type\":\"activityTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function3\",\"taskHubName\":\"TestHubValue\"}]";
                var settings             = CreateWebSettings();
                var fileSystem           = CreateFileSystem(settings.ScriptPath);
                var loggerFactory        = MockNullLogerFactory.CreateLoggerFactory();
                var contentBuilder       = new StringBuilder();
                var httpClient           = CreateHttpClient(contentBuilder);
                var proxyMetadataManager = new Mock <IProxyMetadataManager>(MockBehavior.Strict);
                var proxyMetadata        = new ProxyMetadataInfo(new FunctionMetadata[0].ToImmutableArray(), null, null);
                proxyMetadataManager.SetupGet(p => p.ProxyMetadata).Returns(proxyMetadata);
                var webManager = new WebFunctionsManager(new OptionsWrapper <ScriptApplicationHostOptions>(settings), new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, proxyMetadataManager.Object);

                FileUtility.Instance = fileSystem;

                // Act
                (var success, var error) = await webManager.TrySyncTriggers();

                var content = contentBuilder.ToString();

                // Assert
                Assert.True(success, "SyncTriggers should return success true");
                Assert.True(string.IsNullOrEmpty(error), "Error should be null or empty");
                Assert.Equal(expectedSyncTriggersPayload, content);
            }
        }
Beispiel #3
0
        public void ProxyMetadata_WhenProxyFileChanges_IsRefreshed()
        {
            using (var tempDirectory = new TempDirectory())
            {
                var testProxiesPath = Path.Combine(Environment.CurrentDirectory, @"TestScripts\Proxies");
                var options         = new OptionsWrapper <ScriptJobHostOptions>(new ScriptJobHostOptions
                {
                    RootScriptPath = tempDirectory.Path
                });

                var environment  = new TestEnvironment();
                var eventManager = new ScriptEventManager();

                var manager = new ProxyMetadataManager(options, environment, eventManager, NullLoggerFactory.Instance);

                // Get metadata before proxies exist
                ProxyMetadataInfo proxyMetadata1 = manager.ProxyMetadata;
                ProxyMetadataInfo proxyMetadata2 = manager.ProxyMetadata;

                Assert.True(proxyMetadata2.Functions.IsDefaultOrEmpty);
                Assert.Same(proxyMetadata1, proxyMetadata2);

                // Update our proxies definition
                FileUtility.CopyDirectory(testProxiesPath, tempDirectory.Path);

                // Simulate a file change notification
                eventManager.Publish(new FileEvent(EventSources.ScriptFiles,
                                                   new FileSystemEventArgs(WatcherChangeTypes.Changed, tempDirectory.Path, ScriptConstants.ProxyMetadataFileName)));

                ProxyMetadataInfo proxyMetadata3 = manager.ProxyMetadata;

                Assert.NotSame(proxyMetadata1, proxyMetadata3);

                Assert.Equal(19, proxyMetadata3.Functions.Length);
            }
        }