public void RemoveStaleInstances_CleanUpInstances_Ok()
        {
            // Arrange
            var awsInstances = new List <Amazon.EC2.Model.Instance>
            {
                new Amazon.EC2.Model.Instance {
                    InstanceId = "One"
                },
            };

            InstanceServiceMock.Setup(x => x.GetAllInstances()).Returns(awsInstances);

            AwsClientFactoryMock.Setup(x => x.GetClient(Profile).InstanceService).Returns(InstanceServiceMock.Object);

            var instances = new List <Instance>
            {
                new Instance {
                    ResourceId = "One", OwnerProfileId = Profile.Id
                },
                new Instance {
                    ResourceId = "Two", NeedsRefreshing = true, OwnerProfileId = Profile.Id
                },
                new Instance {
                    ResourceId = "Three", OwnerProfileId = Profile.Id
                }
            };

            StackRepositoryMock.Setup(x => x.FindAll()).Returns(instances);

            // Act
            Command.Execute(Profile.Id);

            // Assert
            BackgroundJobClientMock.Verify(x => x.Create(It.IsAny <Job>(), It.IsAny <IState>()), Times.Once());
        }
示例#2
0
        public void ExitEarlyIfStackIsNotAtAmazon()
        {
            // Arrange
            StackServiceMock.Setup(x => x.GetStack(It.IsAny <string>())).Returns((AwsStack)null);
            AwsClientFactoryMock.Setup(x => x.GetClient(Profile).StackService).Returns(StackServiceMock.Object);

            // Act
            Command.Execute(Profile.Id, "HoojeyStack");

            // Assert
            StackRepositoryMock.Verify(x => x.FindAll(), Times.Never);
        }
        public void SkipsMissingProfile()
        {
            // Arrange
            Guid profileId = Guid.NewGuid();

            AwsProfileRepositoryMock.Setup(x => x.Find(profileId)).Returns((AwsProfile)null);
            var command = new UpdateBillingData(AwsClientFactory, AwsProfileRepository, BillingManager, Clock, new S3PathParser());

            // Act
            command.LoadDeltas(profileId);

            // Assert
            AwsClientFactoryMock.Verify(x => x.GetClient(It.IsAny <AwsProfile>()), Times.Never);
        }
        public void ExitEarlyIfInstanceIdIsNotAtAmazon()
        {
            // Arrange
            var profile = new AwsProfile();

            AwsProfileRepositoryMock.Setup(x => x.Find(profile.Id)).Returns(profile);
            InstanceServiceMock.Setup(x => x.GetInstance(It.IsAny <string>())).Returns((AwsInstance)null);
            AwsClientFactoryMock.Setup(x => x.GetClient(profile).InstanceService).Returns(InstanceServiceMock.Object);

            // Act
            Command.Execute(profile.Id, "HoojeyId");

            // Assert
            InstanceServiceMock.Verify(x => x.GetSecurityGroups(It.IsAny <AwsInstance>()), Times.Never);
        }
示例#5
0
        public void RemoveStaleStacks()
        {
            // Arrange
            var awsStacks = new List <Amazon.CloudFormation.Model.Stack>
            {
                new Amazon.CloudFormation.Model.Stack {
                    StackId = "One"
                },
                new Amazon.CloudFormation.Model.Stack {
                    StackId = "Two"
                },
                new Amazon.CloudFormation.Model.Stack {
                    StackId = "Five"
                },
            };

            StackServiceMock.Setup(x => x.GetAllStacks()).Returns(awsStacks);

            AwsClientFactoryMock.Setup(x => x.GetClient(Profile).StackService).Returns(StackServiceMock.Object);

            var stacks = new List <Stack>
            {
                new Stack {
                    ResourceId = "One", OwnerProfileId = Profile.Id
                },
                new Stack {
                    ResourceId = "Two", OwnerProfileId = Profile.Id
                },
                new Stack {
                    ResourceId = "Three", OwnerProfileId = Profile.Id
                },
                new Stack {
                    ResourceId = "Four", OwnerProfileId = Profile.Id
                }
            };

            StackRepositoryMock.Setup(x => x.FindAll()).Returns(stacks);

            // Act
            Command.Execute(Profile.Id);

            // Assert
            StackRepositoryMock.Verify(x => x.Delete(It.Is <Stack>(s => s.ResourceId == "Three")));
            StackRepositoryMock.Verify(x => x.Delete(It.Is <Stack>(s => s.ResourceId == "Four")));

            // Ensure no stacks were deleted that should not have been
            StackRepositoryMock.Verify(x => x.Delete(It.IsAny <Stack>()), Times.Exactly(2));
        }
        public void RemoveStaleInstances()
        {
            // Arrange
            var awsInstances = new List <Amazon.EC2.Model.Instance>
            {
                new Amazon.EC2.Model.Instance {
                    InstanceId = "One"
                },
                new Amazon.EC2.Model.Instance {
                    InstanceId = "Two"
                },
                new Amazon.EC2.Model.Instance {
                    InstanceId = "Five"
                },
            };

            InstanceServiceMock.Setup(x => x.GetAllInstances()).Returns(awsInstances);

            AwsClientFactoryMock.Setup(x => x.GetClient(Profile).InstanceService).Returns(InstanceServiceMock.Object);

            var instances = new List <Instance>
            {
                new Instance {
                    ResourceId = "One", OwnerProfileId = Profile.Id
                },
                new Instance {
                    ResourceId = "Two", OwnerProfileId = Profile.Id
                },
                new Instance {
                    ResourceId = "Three", OwnerProfileId = Profile.Id
                },
                new Instance {
                    ResourceId = "Four", OwnerProfileId = Profile.Id
                }
            };

            StackRepositoryMock.Setup(x => x.FindAll()).Returns(instances);

            // Act
            Command.Execute(Profile.Id);

            // Assert
            StackRepositoryMock.Verify(x => x.Delete(It.Is <Instance>(s => s.ResourceId == "Three")));
            StackRepositoryMock.Verify(x => x.Delete(It.Is <Instance>(s => s.ResourceId == "Four")));

            // Ensure no stacks were deleted that should not have been
            StackRepositoryMock.Verify(x => x.Delete(It.IsAny <Instance>()), Times.Exactly(2));
        }
        public void LoadsCsv()
        {
            // Arrange
            Guid profileId = Guid.NewGuid();
            var  profile   = new AwsProfile
            {
                Id = profileId,
                DetailedBillingS3Bucket = "my-bucket",
                IsBillingHistoryLoaded  = true,
                Account = "12345",
            };

            AwsProfileRepositoryMock.Setup(x => x.Find(profileId)).Returns(profile);
            AwsClientFactoryMock.Setup(x => x.GetClient(profile)).Returns(AwsClientMock.Object);

            var storage = new TestStorageService();

            AwsClientMock.Setup(x => x.StorageService).Returns(storage);
            storage.Contents = new MemoryStream(Resources.LineItemsZip);

            var now = new DateTime(2014, 6, 14, 16, 15, 14, DateTimeKind.Utc);

            ClockMock.Setup(x => x.UtcNow).Returns(now);

            var command = new UpdateBillingData(AwsClientFactory, AwsProfileRepository, BillingManager, Clock, new S3PathParser());

            string   loadedPeriod = null;
            LineItem lineItem     = null;

            BillingManagerMock.Setup(x => x.LoadLineItems(It.IsAny <IEnumerable <LineItem> >(), It.IsAny <string>()))
            .Callback((IEnumerable <LineItem> lineItems, string period) =>
            {
                lineItem     = lineItems.FirstOrDefault();
                loadedPeriod = period;
            });

            // Act
            command.LoadDeltas(profileId);

            // Assert
            loadedPeriod.Should().Be("2014-06");
            lineItem.RecordId.Should().Be("31861622192480759163092020", "should match first line item from line-items.csv embedded resource");
        }
        public void QueriesCorrectS3Object()
        {
            // Arrange
            Guid profileId    = Guid.NewGuid();
            var  lastModified = new DateTime(2014, 6, 14, 13, 12, 11, DateTimeKind.Utc);
            var  profile      = new AwsProfile
            {
                Id = profileId,
                DetailedBillingS3Bucket = "my-bucket",
                Account = "12345",
                IsBillingHistoryLoaded = true,
                BillingMetadata        = { { "2014-06", new BillingMetadata {
                                                 LastModified = lastModified
                                             } } }
            };

            AwsProfileRepositoryMock.Setup(x => x.Find(profileId)).Returns(profile);
            AwsClientFactoryMock.Setup(x => x.GetClient(profile)).Returns(AwsClientMock.Object);

            var storage = new TestStorageService();

            AwsClientMock.Setup(x => x.StorageService).Returns(storage);

            var now = new DateTime(2014, 6, 14, 16, 15, 14, DateTimeKind.Utc);

            ClockMock.Setup(x => x.UtcNow).Returns(now);

            var command = new UpdateBillingData(AwsClientFactory, AwsProfileRepository, BillingManager, Clock, new S3PathParser());

            // Act
            command.LoadDeltas(profileId);

            // Assert
            string expectedUrl = UpdateBillingData.MonthlyCsvUrl.Create("my-bucket", "12345", "2014-06");

            storage.S3Url.Should().Be(expectedUrl);
            storage.LastModified.Should().Be(lastModified);
            storage.CallCount.Should().Be(1);
        }
        public void SetsLastModified()
        {
            // Arrange
            Guid profileId = Guid.NewGuid();
            var  profile   = new AwsProfile
            {
                Id = profileId,
                DetailedBillingS3Bucket = "my-bucket",
                IsBillingHistoryLoaded  = true,
                Account = "12345",
            };

            AwsProfileRepositoryMock.Setup(x => x.Find(profileId)).Returns(profile);
            AwsClientFactoryMock.Setup(x => x.GetClient(profile)).Returns(AwsClientMock.Object);

            var now = new DateTime(2014, 6, 14, 16, 15, 14, DateTimeKind.Utc);

            ClockMock.Setup(x => x.UtcNow).Returns(now);

            var storage = new TestStorageService();

            AwsClientMock.Setup(x => x.StorageService).Returns(storage);
            storage.NewLastModified = new DateTime(2020, 1, 1, 1, 1, 1, DateTimeKind.Utc);
            storage.Contents        = new MemoryStream(Resources.LineItemsZip);

            var command = new UpdateBillingData(AwsClientFactory, AwsProfileRepository, BillingManager, Clock, new S3PathParser());

            // Act
            command.LoadDeltas(profileId);

            // Assert
            AwsProfileRepositoryMock.Verify(
                x => x.Update(It.Is((AwsProfile p) =>
                                    p.Id == profileId &&
                                    p.BillingMetadata["2014-06"].LastModified == storage.NewLastModified)
                              ));
        }
示例#10
0
        public void RemoveStaleStacks_DontRemoveStacksThatNeedRefreshing()
        {
            // Arrange
            var awsStacks = new List <Amazon.CloudFormation.Model.Stack>
            {
                new Amazon.CloudFormation.Model.Stack {
                    StackId = "One"
                }
            };

            StackServiceMock.Setup(x => x.GetAllStacks()).Returns(awsStacks);

            AwsClientFactoryMock.Setup(x => x.GetClient(Profile).StackService).Returns(StackServiceMock.Object);

            var stacks = new List <Stack>
            {
                new Stack {
                    ResourceId = "One", OwnerProfileId = Profile.Id
                },
                new Stack {
                    ResourceId = "Two", NeedsRefreshing = false, OwnerProfileId = Profile.Id
                },
                new Stack {
                    Id = Guid.NewGuid(), NeedsRefreshing = true, OwnerProfileId = Profile.Id
                }
            };

            StackRepositoryMock.Setup(x => x.FindAll()).Returns(stacks);

            // Act
            Command.Execute(Profile.Id);

            // Assert
            StackRepositoryMock.Verify(x => x.Delete(It.Is <Stack>(s => s.ResourceId == "Two")));

            StackRepositoryMock.Verify(x => x.Delete(It.IsAny <Stack>()), Times.Exactly(1));
        }