예제 #1
0
        public async Task ErrorScenarioAsync()
        {
            var logger    = new Mock <ILogger <DefaultWebHookSender> >();
            var signature = new Mock <ISignatureService>();

            var webHook = new WebHook {
                Callback = new Uri("http://www.example.com")
            };
            var notif = new WebHookNotification {
                TriggerId = "noun.verb"
            };

            var httpClient = HttpClientMocker.AlwaysFail(new Exception());

            var service = new CounterDefaultWebHookSender(httpClient, signature.Object, logger.Object);
            await service.SendAsync(new WebHookWorkItem(notif, webHook), CancellationToken.None);

            Assert.Equal(1, service.Failures);
        }
        public async Task InvalidCasesAsync()
        {
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger("valid")
            };
            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.Static(System.Net.HttpStatusCode.NotFound, "fail");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "too short"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook()));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter>()
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "invalid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "c:/data"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "ftp://data"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "http://www.example.com"
            }));

            service = new DefaultWebHookValidator(triggers.Object, logger.Object, HttpClientMocker.AlwaysFail(new Exception()));
            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = "http://www.example.com"
            }));
        }
        public async Task InvalidCasesAsync()
        {
            var schema = new OpenApiSchema
            {
                Properties = new Dictionary <string, OpenApiSchema>
                {
                    ["param1"] = new OpenApiSchema {
                        Type = "integer"
                    },
                    ["param2"] = new OpenApiSchema {
                        Type = "string"
                    },
                    ["param3"] = new OpenApiSchema {
                        Type = "array", Items = new OpenApiSchema {
                            Type = "integer"
                        }
                    },
                    ["param4"] = new OpenApiSchema {
                        Type = "array", Reference = new OpenApiReference()
                    },
                    ["number"] = new OpenApiSchema {
                        Type = "number"
                    },
                    ["integer"] = new OpenApiSchema {
                        Type = "integer"
                    },
                    ["bool"] = new OpenApiSchema {
                        Type = "boolean"
                    },
                    ["object"] = new OpenApiSchema {
                        Type = "object"
                    },
                }
            };
            var triggersById = new Dictionary <string, WebHookTrigger>
            {
                ["valid"] = new WebHookTrigger {
                    Id = "valid", Schema = schema
                },
            };
            var triggers = new Mock <IWebHookTriggerProvider>();

            triggers.Setup(s => s.GetAvailableTriggers()).Returns(triggersById);
            var logger  = new Mock <ILogger <DefaultWebHookValidator> >();
            var client  = HttpClientMocker.Static(System.Net.HttpStatusCode.NotFound, "fail");
            var service = new DefaultWebHookValidator(triggers.Object, logger.Object, client);

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "tooshort"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Secret = "toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_toolong_"
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook()));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter>()
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "invalid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            [""] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["invalid"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param3"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param4.next"] = ""
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param1"] = "string"
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["param1"] = null
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["number"] = true
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["integer"] = 2.3
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["boolean"] = 345
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid", Parameters = new Dictionary <string, object> {
                            ["object"] = 23
                        }
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("c:/data")
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("ftp://data")
            }));

            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("http://www.example.com")
            }));

            service = new DefaultWebHookValidator(triggers.Object, logger.Object, HttpClientMocker.AlwaysFail(new Exception()));
            await Assert.ThrowsAsync <ArgumentException>(() => service.ValidateAsync(new WebHook {
                Filters = new List <WebHookFilter> {
                    new WebHookFilter {
                        Trigger = "valid"
                    }
                }, Callback = new Uri("http://www.example.com")
            }));
        }