private static InMessage CreateInMessage(string id, InStatus status, Operation operation)
        {
            var m = new InMessage(id);

            m.SetStatus(status);
            m.Operation = operation;

            return(m);
        }
 public UploadRetry(
     int currentRetryCount,
     int maxRetryCount,
     UploadResult uploadResult,
     int expectedCurrentRetryCount,
     Operation expectedOperation,
     InStatus expectedStatus)
 {
     CurrentRetryCount         = currentRetryCount;
     MaxRetryCount             = maxRetryCount;
     UploadResult              = uploadResult;
     ExpectedCurrentRetryCount = expectedCurrentRetryCount;
     ExpectedOperation         = expectedOperation;
     ExpectedStatus            = expectedStatus;
 }
 public DeliverRetry(
     int currentRetryCount,
     int maxRetryCount,
     SendResult sendResult,
     int expectedCurrentRetryCount,
     Operation expectedOperation,
     InStatus expectedStatus)
 {
     CurrentRetryCount         = currentRetryCount;
     MaxRetryCount             = maxRetryCount;
     SendResult                = sendResult;
     ExpectedCurrentRetryCount = expectedCurrentRetryCount;
     ExpectedOperation         = expectedOperation;
     ExpectedStatus            = expectedStatus;
 }
        public async Task MainAsync()
        {
            Logger.Info("NerdBot MainAsync() Started");
            _client      = new DiscordSocketClient();
            _client.Log += Log;

            _commands          = new CommandService();
            _randomQuotePicker = new RandomQuotePicker();
            _InStatus          = new InStatus(_client);

            _client.MessageReceived += _randomQuotePicker.MessageReceived;
            if (Environment.GetEnvironmentVariable("InStatusURL") != null && Environment.GetEnvironmentVariable("InStatusURL") != "")
            {
                _client.Connected    += _InStatus.ConnectEvent;
                _client.Disconnected += _InStatus.DisconnectEvent;
            }


            _customCommandHandler    = new CustomCommandHandler(_client);
            _client.MessageReceived += _customCommandHandler.MessageReceived;

            var services = ConfigureServices();
            await services.GetRequiredService <CommandHandler>().InitializeAsync(services);

            Logger.Info("Using Discord Token: " + Environment.GetEnvironmentVariable("DiscordToken"));
            Logger.Info("Logging into Discord now!");
            await _client.LoginAsync(TokenType.Bot,
                                     Environment.GetEnvironmentVariable("DiscordToken"));


            await _client.StartAsync();



            // Block this task until the program is closed.
            await Task.Delay(-1);
        }
Beispiel #5
0
 public void SetStatus(InStatus status)
 {
     Status = status.ToString();
 }
Beispiel #6
0
        public async Task All_Attachments_Should_Succeed_Or_Fail(UploadRetry input)
        {
            // Arrange
            string    id = "deliver-" + Guid.NewGuid();
            InMessage im = InsertInMessage(id);

            var r = RetryReliability.CreateForInMessage(
                refToInMessageId: im.Id,
                maxRetryCount: input.MaxRetryCount,
                retryInterval: default(TimeSpan),
                type: RetryType.Delivery);

            r.CurrentRetryCount = input.CurrentRetryCount;
            GetDataStoreContext.InsertRetryReliability(r);


            var a1          = new FilledAttachment("attachment-1");
            var a2          = new FilledAttachment("attachment-2");
            var userMessage = new FilledUserMessage(id, a1.Id, a2.Id);

            var as4Msg = AS4Message.Create(userMessage);

            as4Msg.AddAttachment(a1);
            as4Msg.AddAttachment(a2);

            MessagingContext fixture = await PrepareAS4MessageForDeliveryAsync(as4Msg, CreateReceivingPModeWithPayloadMethod());

            var stub = new Mock <IAttachmentUploader>();

            stub.Setup(s => s.UploadAsync(a1, fixture.DeliverMessage.Message.MessageInfo))
            .ReturnsAsync(input.UploadResult);
            stub.Setup(s => s.UploadAsync(a2, fixture.DeliverMessage.Message.MessageInfo))
            .ReturnsAsync(
                input.UploadResult.Status == SendResult.Success
                        ? UploadResult.FatalFail
                        : UploadResult.RetryableFail);

            // Act
            await CreateUploadStep(stub.Object).ExecuteAsync(fixture);

            // Assert
            GetDataStoreContext.AssertInMessage(id, actual =>
            {
                Assert.NotNull(actual);
                Operation op = actual.Operation;
                Assert.NotEqual(Operation.Delivered, op);
                InStatus st = actual.Status.ToEnum <InStatus>();
                Assert.NotEqual(InStatus.Delivered, st);

                bool operationToBeRetried     = Operation.ToBeRetried == op;
                bool uploadResultCanBeRetried =
                    input.UploadResult.Status == SendResult.RetryableFail &&
                    input.CurrentRetryCount < input.MaxRetryCount;

                Assert.True(
                    operationToBeRetried == uploadResultCanBeRetried,
                    "InMessage should update Operation=ToBeDelivered");

                bool messageSetToException = Operation.DeadLettered == op && InStatus.Exception == st;
                bool exhaustRetries        =
                    input.CurrentRetryCount == input.MaxRetryCount ||
                    input.UploadResult.Status != SendResult.RetryableFail;

                Assert.True(
                    messageSetToException == exhaustRetries,
                    $"{messageSetToException} != {exhaustRetries} InMessage should update Operation=DeadLettered, Status=Exception");
            });
        }