public void JobsCountStrategyShouldHavePositiveCount()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl   = "Http://localhost",
                Strategy  = "JobsCount",
                JobsCount = -1,
            };

            Assert.False(setting.Validate());
        }
        public void SpecificStrategyShouldHaveAtLeastOneRobot()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl  = "Http://localhost",
                Strategy = "Specific",
                RobotIds = null,
            };

            Assert.False(setting.Validate());
        }
        public void UerTokenRequiredForCloudAuth()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode    = "Cloud",
                BaseUrl     = "Http://localhost",
                Strategy    = "JobsCount",
                JobsCount   = 1,
                ProcessKeys = new ProcessKey[] { new ProcessKey()
                                                 {
                                                     Key = Guid.NewGuid().ToString(), Process = "test"
                                                 } },
            };

            Assert.False(setting.Validate());
        }
        public void ShouldHaveAtLeastOneProcess()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl     = "Http://localhost",
                Strategy    = "JobsCount",
                JobsCount   = 1,
                ProcessKeys = null,
            };

            Assert.False(setting.Validate());
        }
        public void TwoStrategyAllowed()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl     = "Http://localhost",
                Strategy    = "invalid",
                ProcessKeys = new ProcessKey[] { new ProcessKey()
                                                 {
                                                     Key = Guid.NewGuid().ToString(), Process = "test"
                                                 } },
            };

            Assert.False(setting.Validate());
        }
        public void UrlShouldBeValid()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl     = "invalid",
                Strategy    = "JobsCount",
                JobsCount   = 1,
                ProcessKeys = new ProcessKey[] { new ProcessKey()
                                                 {
                                                     Key = Guid.NewGuid().ToString(), Process = "test"
                                                 } },
            };

            Assert.False(setting.Validate());
        }
        public void ValidCloudAuth()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode     = "Cloud",
                RefreshToken = "randometoken",
                ServiceInstanceLogicalName = "test",
                AccountLogicalName         = "test",
                BaseUrl     = "Https://platform.uipath.com",
                Strategy    = "Specific",
                RobotIds    = new long[] { 1, 2, 3 },
                ProcessKeys = new ProcessKey[] { new ProcessKey()
                                                 {
                                                     Key = Guid.NewGuid().ToString(), Process = "test"
                                                 } },
            };

            Assert.True(setting.Validate());
        }
        public void ProcessKeyShouldBeGuid()
        {
            var setting = new OrchestratorSettings()
            {
                AuthMode               = "Basic",
                TenancyName            = "Default",
                UsernameOrEmailAddress = "Test",
                Password               = "******",
                BaseUrl     = "Http://localhost",
                Strategy    = "JobsCount",
                JobsCount   = 1,
                ProcessKeys = new ProcessKey[] { new ProcessKey()
                                                 {
                                                     Key = "1234", Process = "test"
                                                 } },
            };

            Assert.False(setting.Validate());
        }
Beispiel #9
0
 public MyRpaClient(IOrchestratorClient orchestratorClient, IOptionsMonitor <OrchestratorSettings> orchestratorSettingsAccessor)
 {
     _orchestratorClient   = orchestratorClient.CheckNullReference();
     _orchestratorSettings = orchestratorSettingsAccessor.CheckNullReference().CurrentValue;
 }
        public JournalMutation(
            JournalSettings journalSettings,
            OrchestratorSettings orchestratorSettings,
            HttpClient httpClient)
        {
            Field <JournalType>()
            .Name("createJournalEC")
            .Argument <NonNullGraphType <JournalInputType> >("journal", "Add a journal")
            .ResolveAsync(async ctx =>
            {
                var dto = ctx.GetArgument <JournalDTO>("journal");

                var requestUrl = $"{journalSettings.BaseUrl}/{journalSettings.Endpoints.AddJournal}";
                var content    = new StringContent(JsonConvert.SerializeObject(dto), Encoding.Default, "application/json");

                using (var responseMessage = await httpClient.PostAsync(requestUrl, content))
                {
                    if (!responseMessage.IsSuccessStatusCode)
                    {
                        var errorContent = await responseMessage.Content.ReadAsStringAsync();
                        if (!string.IsNullOrEmpty(errorContent))
                        {
                            ctx.Errors.Add(new GraphQL.ExecutionError(errorContent));
                        }
                        else
                        {
                            responseMessage.EnsureSuccessStatusCode();
                        }
                        return(null);
                    }

                    var serializedResponse = await responseMessage.Content.ReadAsStringAsync();
                    var response           = JsonConvert.DeserializeObject <JournalDTO>(serializedResponse);
                    return(response);
                }
            });

            Field <JournalType>()
            .Name("createJournalSaga")
            .Argument <NonNullGraphType <JournalInputType> >("journal", "Add a journal")
            .ResolveAsync(async ctx =>
            {
                var dto = ctx.GetArgument <JournalDTO>("journal");

                var requestUrl = $"{orchestratorSettings.BaseUrl}/{orchestratorSettings.FunctionName}";
                var content    = new StringContent(JsonConvert.SerializeObject(dto), Encoding.Default, "application/json");

                HttpManagementPayload httpManagementPayload;
                using (var responseMessage = await httpClient.PostAsync(requestUrl, content))
                {
                    if (!responseMessage.IsSuccessStatusCode)
                    {
                        var errorContent = await responseMessage.Content.ReadAsStringAsync();
                        if (!string.IsNullOrEmpty(errorContent))
                        {
                            ctx.Errors.Add(new GraphQL.ExecutionError(errorContent));
                        }
                        else
                        {
                            responseMessage.EnsureSuccessStatusCode();
                        }
                        return(null);
                    }

                    var serializedResponse = await responseMessage.Content.ReadAsStringAsync();
                    httpManagementPayload  = JsonConvert.DeserializeObject <HttpManagementPayload>(serializedResponse);
                }

                JToken status = null;

                do
                {
                    await Task.Delay(2000);
                    status = await GetStatus(httpManagementPayload.StatusQueryGetUri, ctx);
                    if (status == null)
                    {
                        return(status);
                    }
                } while(status.Value <string>("runtimeStatus") == "Pending" ||
                        status.Value <string>("runtimeStatus") == "Running");

                if (status.Value <string>("runtimeStatus") != "Completed")
                {
                    ctx.Errors.Add(new GraphQL.ExecutionError("Saga failed"));
                    return(null);
                }
                var journalResult = status["output"].ToObject <Result <JournalDTO> >();

                if (journalResult.IsFailure)
                {
                    ctx.Errors.Add(new GraphQL.ExecutionError(journalResult.ErrorMessage));
                    return(null);
                }
                return(journalResult.Value);
            });
            this.httpClient = httpClient;
        }