Esempio n. 1
0
        public async Task <bool> RunTest(int testNumber)
        {
            var funcKey = _paramService.Get("key");

            if (string.IsNullOrWhiteSpace(funcKey))
            {
                _localLogService.LogWarning("Cannot perform test calls without a function key - pass in with the k option. More info on how to get key at project site");
                return(false);
            }

            if (_settings == null)
            {
                return(false);
            }

            if (_settings.Count < testNumber)
            {
                return(false);
            }

            var setting = _settings[testNumber - 1];

            //find the direction

            var binding = setting.config.bindings
                          .FirstOrDefault(_ => _.direction == KsConstants.Functions.In &&
                                          _.type.EndsWith(KsConstants.Functions.Trigger, StringComparison.Ordinal));



            if (binding == null)
            {
                _localLogService.LogError($"Could not find an input binding for function {setting.name}");
                //erm?
                return(false);
            }

            _localLogService.LogInfo($" > Running function {setting.name} ({binding.type}) with data {setting.test_data}");

            var siteSettings = _pubSettingsService.GetSettingsByPublishMethod(PublishMethods.MSDeploy);

            if (binding.type == KsConstants.Functions.HttpTrigger)
            {
                //httptrigger, so this one needs to be called via direct http
                var confRaw = setting.test_data;
                var conf    = JsonConvert.DeserializeObject <TestDataConfig>(confRaw);

                var urlBase = $"{siteSettings.LiveUrl}/api/{setting.name}?";

                foreach (var qs in conf?.queryStringParams)
                {
                    urlBase += $"{WebUtility.UrlEncode(qs.name)}={WebUtility.UrlEncode(qs.value)}&";
                }

                urlBase += $"code={await _getKey(siteSettings, setting)}";

                return(await _doRequest(urlBase, conf.method, conf.headers, conf.body, siteSettings));
            }
            else
            {
                //other trigger, so call this one via admin api
                var urlBase = $"{siteSettings.LiveUrl}/admin/functions/{setting.name}";
                var headers = new Dictionary <string, string>();
                headers.Add("x-functions-key", funcKey);

                var post = $"{{\"input\":\"{setting.test_data}\"}}";

                var result = await urlBase.Post(post, headers);
            }

            return(true);
        }
Esempio n. 2
0
        public async Task <bool> GetFiles(string subPath = null)
        {
            _siteSettings = _publishSettingsService.GetSettingsByPublishMethod(PublishMethods.MSDeploy);

            using (HttpClient httpClient = new HttpClient())
            {
                httpClient.Timeout = TimeSpan.FromMilliseconds(10000);

                var requestUri = $"https://{_siteSettings.ApiUrl}/api/zip/site/wwwroot/";

                if (!string.IsNullOrEmpty(subPath))
                {
                    subPath     = subPath.Trim('/').Trim('\\');
                    requestUri += $"{subPath}/";
                }

                _localLogService.Log($"Grabbing from {requestUri}");

                var request = new HttpRequestMessage(HttpMethod.Get, requestUri);

                request.Headers.Authorization = new AuthenticationHeaderValue("Basic",
                                                                              HttpHelpers.GetAuthenticationString(_siteSettings));

                var response = await httpClient.SendAsync(
                    request, HttpCompletionOption.ResponseHeadersRead);

                if (!response.IsSuccessStatusCode)
                {
                    _localLogService.Log($"Error: Count not get files from {requestUri}");
                    return(false);
                }

                var result = await response.Content.ReadAsByteArrayAsync();

                var saveFile = Path.GetTempFileName();

                File.WriteAllBytes(saveFile, result);

                try
                {
                    var dir = Directory.GetCurrentDirectory();
                    if (!string.IsNullOrEmpty(subPath))
                    {
                        dir += $"\\{subPath}";
                    }

                    ZipFile.ExtractToDirectory(saveFile, dir);

                    foreach (var f in Directory.GetFiles(dir, "*", SearchOption.AllDirectories))
                    {
                        if (_fileWatcherService.Validate(f))
                        {
                            _localLogService.Log($" - {f.Replace(dir, "")}");
                        }
                    }
                }
                catch (System.IO.IOException ex)
                {
                    _localLogService.LogWarning(
                        "k-scratch will not overwrite existing files. Please 'get' in to an empty directory.");
                    return(false);
                }
                finally
                {
                    File.Delete(saveFile);
                }

                return(true);
            }
        }