public void Only_Retrieve_Distributions_Once() { var cloudfrontClient = new Mock<AmazonCloudFront>(); var distributionId = Guid.NewGuid().ToString(); var bucket = Guid.NewGuid().ToString(); var distribution = bucket + ".s3.amazonaws.com"; var key = Guid.NewGuid().ToString(); var listDistributionsResponse = new ListDistributionsResponse(); listDistributionsResponse.Distribution.Add(new CloudFrontDistribution { Id = distributionId, DistributionConfig = new CloudFrontDistributionConfig { S3Origin = new S3Origin(distribution, null) } }); cloudfrontClient.Setup(cfc => cfc.ListDistributions()) .Returns(listDistributionsResponse); var invalidator = new CloudFrontInvalidator(cloudfrontClient.Object); invalidator.InvalidateObject(bucket, key); invalidator.InvalidateObject(bucket, key); cloudfrontClient.Verify(cfc => cfc.PostInvalidation(It.Is<PostInvalidationRequest>(pir => pir.DistributionId == distributionId && pir.InvalidationBatch.Paths.Count == 1 && pir.InvalidationBatch.Paths.First() == key)), Times.Exactly(2)); cloudfrontClient.Verify(cfc => cfc.ListDistributions(), Times.Once()); }
public void Only_Retrieve_Distributions_Once() { var cloudfrontClient = new Mock <AmazonCloudFront>(); var distributionId = Guid.NewGuid().ToString(); var bucket = Guid.NewGuid().ToString(); var distribution = bucket + ".s3.amazonaws.com"; var key = Guid.NewGuid().ToString(); var listDistributionsResponse = new ListDistributionsResponse(); listDistributionsResponse.Distribution.Add(new CloudFrontDistribution { Id = distributionId, DistributionConfig = new CloudFrontDistributionConfig { S3Origin = new S3Origin(distribution, null) } }); cloudfrontClient.Setup(cfc => cfc.ListDistributions()) .Returns(listDistributionsResponse); var invalidator = new CloudFrontInvalidator(cloudfrontClient.Object); invalidator.InvalidateObject(bucket, key); invalidator.InvalidateObject(bucket, key); cloudfrontClient.Verify(cfc => cfc.PostInvalidation(It.Is <PostInvalidationRequest>(pir => pir.DistributionId == distributionId && pir.InvalidationBatch.Paths.Count == 1 && pir.InvalidationBatch.Paths.First() == key)), Times.Exactly(2)); cloudfrontClient.Verify(cfc => cfc.ListDistributions(), Times.Once()); }
public void Invalidate() { var cloudfrontClient = new Mock<IAmazonCloudFront>(); var distributionId = Guid.NewGuid().ToString(); var bucket = Guid.NewGuid().ToString(); var distribution = bucket + ".s3.amazonaws.com"; var key = Guid.NewGuid().ToString(); var key2 = Guid.NewGuid().ToString(); var listDistributionsResponse = new ListDistributionsResponse() { DistributionList = new DistributionList() { Items = new List<DistributionSummary> { new DistributionSummary { Id = distributionId, DomainName = distribution, Origins = new Origins { Quantity = 1, Items = new List<Origin> { new Origin { DomainName = distribution } } } } } } }; cloudfrontClient.Setup(cfc => cfc.ListDistributions()) .Returns(listDistributionsResponse); var invalidator = new CloudFrontInvalidator(cloudfrontClient.Object); invalidator.InvalidateObject(bucket, key); cloudfrontClient.Verify(cfc => cfc.CreateInvalidation(It.IsAny<CreateInvalidationRequest>()), Times.Never()); invalidator.InvalidateObject(bucket, key2); cloudfrontClient.Verify(cfc => cfc.CreateInvalidation(It.IsAny<CreateInvalidationRequest>()), Times.Never()); invalidator.Flush(); cloudfrontClient.Verify(cfc => cfc.CreateInvalidation(It.Is<CreateInvalidationRequest>(pir => pir.DistributionId == distributionId && pir.InvalidationBatch.Paths.Quantity == 1 && pir.InvalidationBatch.Paths.Items.First() == "/" + key && pir.InvalidationBatch.Paths.Items.Skip(1).First() == "/" + key2))); }
public static void Initialize() { var awsAccessKey = ConfigurationManager.AppSettings["aws.accessKey"]; var awsSecretKey = ConfigurationManager.AppSettings["aws.secretKey"]; var bucketName = ConfigurationManager.AppSettings["aws.bucketName"]; //var baseCdnUrl = ConfigurationManager.AppSettings["aws.baseCdnUrl"]; var s3client = AWSClientFactory.CreateAmazonS3Client( awsAccessKey, awsSecretKey, RegionEndpoint.USEast1); using (var invalidator = new CloudFrontInvalidator(AWSClientFactory.CreateAmazonCloudFrontClient(awsAccessKey, awsSecretKey))) { var renderer = S3Renderer.Create(s3client) .WithBucketName(bucketName) .WithDefaultKeyBuilder(HttpContext.Current.Request.PhysicalApplicationPath, HttpContext.Current.Request.ApplicationPath) .WithInvalidator(invalidator) .WithCannedAcl(S3CannedACL.PublicRead) .WithOverwriteBehavior(true) as IRenderer; //dont recommend this usage pattern if cloudfront invalidation is needed, because of the need to tightly control renderer lifecycle for request pooling //Bundle.ConfigureDefaults() // .UseReleaseRenderer(renderer) // .UseDefaultOutputBaseHref(baseCdnUrl); Bundle.ConfigureDefaults().UseDefaultOutputBaseHref("//s3.amazonaws.com/" + bucketName); Bundle.JavaScript() .Add("~/Scripts/jquery-1.7.1.js") .WithReleaseFileRenderer(renderer) //.WithOutputBaseHref(baseCdnUrl) .ForceRelease() .AsNamed("combined-jq.js", "/combined-jq.js"); }//when dispose is called, the invalidator will be flushed, sending an invalidation request for *all* processed bundles to cloudfront }
public void Only_Retrieve_Distributions_Once() { var cloudfrontClient = new Mock<IAmazonCloudFront>(); var distributionId = Guid.NewGuid().ToString(); var bucket = Guid.NewGuid().ToString(); var distribution = bucket + ".s3.amazonaws.com"; var key = "/" + Guid.NewGuid().ToString(); var listDistributionsResponse = new ListDistributionsResponse() { DistributionList = new DistributionList() { Items = new List<DistributionSummary> { new DistributionSummary { Id = distributionId, DomainName = distribution, Origins = new Origins { Quantity = 1, Items = new List<Origin> { new Origin { DomainName = distribution } } } } } } }; cloudfrontClient.Setup(cfc => cfc.ListDistributions()) .Returns(listDistributionsResponse); var invalidator = new CloudFrontInvalidator(cloudfrontClient.Object); invalidator.InvalidateObject(bucket, key); invalidator.InvalidateObject(bucket, key); cloudfrontClient.Verify(cfc => cfc.ListDistributions(), Times.Once()); }