public async Task AlarmsAreCreatedForEachIncludedTable()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnIndex(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumerIdIndex-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                indexName: "ConsumerIdIndex",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 312000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnIndex(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumerIdIndex-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                indexName: "ConsumerIdIndex",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 144000,
                                                period: 300);

            CloudwatchVerify.AlarmWasNotPutonIndex(mockery.Cloudwatch,
                                                   tableName: "products-table",
                                                   indexName: "ThisIsAnIndex");
        }
예제 #2
0
        public async Task ReadAlarmsAreCreatedForEachTable()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 292500,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ReadThrottleEvents-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ReadThrottleEvents",
                                                threshold: 2,
                                                period: 60);

            CloudwatchVerify.AlarmWasNotPutOnMetric(mockery.Cloudwatch,
                                                    "ConsumedWriteCapacityUnits");
        }
예제 #3
0
        public async Task BothAlarmsAreCreatedForTablesNotExcluded()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(ConfigWithExclusions(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedWriteCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedWriteCapacityUnits");
        }
        public void NoWriteAlarmIsPut()
        {
            var mockery = new DynamoAlarmGeneratorMockery();

            TestRun(mockery);

            CloudwatchVerify.AlarmWasNotPutOnMetric(mockery.Cloudwatch, "ConsumedWriteCapacityUnits");
        }
        public void FurtherAlarmsAreNotPut()
        {
            var mockery = new DynamoAlarmGeneratorMockery();

            TestRun(mockery);

            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch, "failure-table-1");
            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch, "happy-table-2");
        }
예제 #6
0
        public async Task AlarmsAreNotCreatedForExcludedTable()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(ConfigWithAnExclusion(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch, "products-table");
        }
        public async Task NoWriteAlarmsAreCreated()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasNotPutOnMetric(mockery.Cloudwatch, "ConsumedWriteCapacityUnits");
        }
        public void OtherAlarmsAreNotCreated()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            Assert.That(async() => await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms),
                        Throws.Exception);

            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch, "my-orders");
        }
예제 #9
0
        public void OtherAlarmsAreNotCreated()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            // todo, use ThrowsAsync when nunit is updated
            Assert.Throws <AggregateException>(
                () => generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms).Wait());

            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch, "my-orders");
        }
        public void TheFirstAlarmIsPut()
        {
            var mockery = new DynamoAlarmGeneratorMockery();

            TestRun(mockery);

            CloudwatchVerify.AlarmWasPutOnIndex(mockery.Cloudwatch,
                                                alarmName: "happy-table-1-happy-index-1-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "happy-table-1",
                                                indexName: "happy-index-1",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 312000,
                                                period: 300);
        }
        public void FirstTableHasAlarm()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            Assert.That(async() => await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms),
                        Throws.Exception);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                "test-a-table-ConsumedReadCapacityUnits-TestGroup",
                                                "test-a-table", "ConsumedReadCapacityUnits");
        }
        public async Task AlarmsAreCreatedForEachTable()
        {
            var mockery = new DynamoAlarmGeneratorMockery();

            ConfigureTables(mockery);

            var generator = mockery.AlarmGenerator;

            await generator.GenerateAlarmsFor(CatchAllConfig(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ConsumedWriteCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedWriteCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-supplier-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-supplier-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-supplier-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test-supplier-table",
                                                metricName: "ConsumedWriteCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedWriteCapacityUnits");
        }
예제 #13
0
        public async Task TableAlarmThresholdsAreSet()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutMatching(mockery.Cloudwatch,
                                                 request =>
                                                 request.AlarmName == "orders-ConsumedReadCapacityUnits-TestGroup" &&
                                                 request.MetricName == AwsMetrics.ConsumedReadCapacity &&
                                                 request.Threshold.Equals(4000 * 0.5 * AwsConstants.FiveMinutesInSeconds));
        }
예제 #14
0
        public void FirstTableHasAlarm()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            // todo, use ThrowsAsync when nunit is updated
            Assert.Throws <AggregateException>(
                () => generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms).Wait());

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                "test-a-table-ConsumedReadCapacityUnits-TestGroup",
                                                "test-a-table", "ConsumedReadCapacityUnits");
        }
        public async Task AWriteAlarmIsCreatedOrUpdated()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(Config(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnIndex(mockery.Cloudwatch,
                                                alarmName: "authentication-tokens-ThisIsAnIndex-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "authentication-tokens",
                                                indexName: "ThisIsAnIndex",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 144000,
                                                period: 300);
        }
예제 #16
0
        public async Task OnlyReadAlarmIsCreatedWhenWriteExcluded()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(ConfigWithExclusions(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-supplier-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-supplier-table",
                                                metricName: "ConsumedReadCapacityUnits");

            CloudwatchVerify.AlarmWasNotPutOnTable(mockery.Cloudwatch,
                                                   tableName: "test-supplier-table",
                                                   metricName: "ConsumedWriteCapacityUnits");
        }
        public async Task CorrectAlarmsAreCreatedForEachTable()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            await generator.GenerateAlarmsFor(ConfigWithThresholds(), RunMode.GenerateAlarms);

            var expectedTable1ReadThreshold  = (int)AlarmThresholds.Calulate(ReadCapacity, 0.4);
            var expectedTable1WriteThreshold = (int)AlarmThresholds.Calulate(WriteCapacity, 0.4);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test1-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test1",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: expectedTable1ReadThreshold,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test1-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test1",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: expectedTable1WriteThreshold,
                                                period: 300);

            var expectedTable2ReadThreshold  = (int)AlarmThresholds.Calulate(ReadCapacity, 0.65);
            var expectedTable2WriteThreshold = (int)AlarmThresholds.Calulate(WriteCapacity, 0.65);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test2-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test2",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: expectedTable2ReadThreshold,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test2-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test2",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: expectedTable2WriteThreshold,
                                                period: 300);
        }
예제 #18
0
        public async Task NamedTableThatDoesNotExistIsIgnored()
        {
            var mockery   = new DynamoAlarmGeneratorMockery();
            var generator = mockery.AlarmGenerator;

            ConfigureTables(mockery);

            var config = new WatchmanConfiguration()
            {
                AlertingGroups = new List <AlertingGroup>()
                {
                    new AlertingGroup()
                    {
                        Name            = "TestGroup",
                        AlarmNameSuffix = "TestGroup",
                        DynamoDb        = new DynamoDb()
                        {
                            Tables = new List <Table>
                            {
                                new Table {
                                    Name = "table-that-exists"
                                },
                                new Table {
                                    Name = "missing-table"
                                }
                            }
                        }
                    }
                }
            };

            await generator.GenerateAlarmsFor(config, RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "table-that-exists-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "table-that-exists",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 144000,
                                                period: 300);
        }
        public async Task AlarmsAreCreatedForEachTableAtCorrectLevel()
        {
            var mockery = new DynamoAlarmGeneratorMockery();

            ConfigureTables(mockery);

            var generator = mockery.AlarmGenerator;

            await generator.GenerateAlarmsFor(CatchAllConfig(), RunMode.GenerateAlarms);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 312000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-a-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test-a-table",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 144000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 672000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "customer-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "customer-table",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 271200,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-supplier-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "test-supplier-table",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 96000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "test-supplier-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "test-supplier-table",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 24000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedReadCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedReadCapacityUnits",
                                                threshold: 576000,
                                                period: 300);

            CloudwatchVerify.AlarmWasPutOnTable(mockery.Cloudwatch,
                                                alarmName: "products-table-ConsumedWriteCapacityUnits-TestGroup",
                                                tableName: "products-table",
                                                metricName: "ConsumedWriteCapacityUnits",
                                                threshold: 19200,
                                                period: 300);
        }