internal ListPipelinesResponse ListPipelines(ListPipelinesRequest request) { var marshaller = new ListPipelinesRequestMarshaller(); var unmarshaller = ListPipelinesResponseUnmarshaller.Instance; return(Invoke <ListPipelinesRequest, ListPipelinesResponse>(request, marshaller, unmarshaller)); }
public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonCodePipelineConfig config = new AmazonCodePipelineConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonCodePipelineClient client = new AmazonCodePipelineClient(creds, config); ListPipelinesResponse resp = new ListPipelinesResponse(); do { ListPipelinesRequest req = new ListPipelinesRequest { NextToken = resp.NextToken , MaxResults = maxItems }; resp = client.ListPipelines(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.Pipelines) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextToken)); }
/// <summary> /// <para>The ListPipelines operation gets a list of the pipelines associated with the current AWS account.</para> /// </summary> /// /// <param name="listPipelinesRequest">Container for the necessary parameters to execute the ListPipelines service method on /// AmazonElasticTranscoder.</param> /// /// <returns>The response from the ListPipelines service method, as returned by AmazonElasticTranscoder.</returns> /// /// <exception cref="T:Amazon.ElasticTranscoder.Model.AccessDeniedException" /> /// <exception cref="T:Amazon.ElasticTranscoder.Model.InternalServiceException" /> /// <exception cref="T:Amazon.ElasticTranscoder.Model.ValidationException" /> /// <exception cref="T:Amazon.ElasticTranscoder.Model.IncompatibleVersionException" /> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> public Task <ListPipelinesResponse> ListPipelinesAsync(ListPipelinesRequest listPipelinesRequest, CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new ListPipelinesRequestMarshaller(); var unmarshaller = ListPipelinesResponseUnmarshaller.GetInstance(); return(Invoke <IRequest, ListPipelinesRequest, ListPipelinesResponse>(listPipelinesRequest, marshaller, unmarshaller, signer, cancellationToken)); }
/// <summary> /// Initiates the asynchronous execution of the ListPipelines operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the ListPipelines operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> public Task <ListPipelinesResponse> ListPipelinesAsync(ListPipelinesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken)) { var marshaller = new ListPipelinesRequestMarshaller(); var unmarshaller = ListPipelinesResponseUnmarshaller.Instance; return(InvokeAsync <ListPipelinesRequest, ListPipelinesResponse>(request, marshaller, unmarshaller, cancellationToken)); }
/// <summary> /// Initiates the asynchronous execution of the ListPipelines operation. /// </summary> /// /// <param name="request">Container for the necessary parameters to execute the ListPipelines operation.</param> /// <param name="cancellationToken"> /// A cancellation token that can be used by other objects or threads to receive notice of cancellation. /// </param> /// <returns>The task object representing the asynchronous operation.</returns> public virtual Task<ListPipelinesResponse> ListPipelinesAsync(ListPipelinesRequest request, System.Threading.CancellationToken cancellationToken = default(CancellationToken)) { var options = new InvokeOptions(); options.RequestMarshaller = ListPipelinesRequestMarshaller.Instance; options.ResponseUnmarshaller = ListPipelinesResponseUnmarshaller.Instance; return InvokeAsync<ListPipelinesResponse>(request, options, cancellationToken); }
internal virtual ListPipelinesResponse ListPipelines(ListPipelinesRequest request) { var options = new InvokeOptions(); options.RequestMarshaller = ListPipelinesRequestMarshaller.Instance; options.ResponseUnmarshaller = ListPipelinesResponseUnmarshaller.Instance; return Invoke<ListPipelinesResponse>(request, options); }
internal ListPipelinesResponse ListPipelines(ListPipelinesRequest request) { var task = ListPipelinesAsync(request); try { return(task.Result); } catch (AggregateException e) { ExceptionDispatchInfo.Capture(e.InnerException).Throw(); return(null); } }
protected override void ProcessRecord() { base.ProcessRecord(); ListPipelinesRequest request; try { request = new ListPipelinesRequest { WorkspaceId = WorkspaceId, OpcRequestId = OpcRequestId, AggregatorKey = AggregatorKey, Fields = Fields, Name = Name, Identifier = Identifier, Limit = Limit, Page = Page, SortOrder = SortOrder, SortBy = SortBy }; IEnumerable <ListPipelinesResponse> responses = GetRequestDelegate().Invoke(request); foreach (var item in responses) { response = item; WriteOutput(response, response.PipelineSummaryCollection, true); } if (!ParameterSetName.Equals(AllPageSet) && !ParameterSetName.Equals(LimitSet) && response.OpcNextPage != null) { WriteWarning("This operation supports pagination and not all resources were returned. Re-run using the -All option to auto paginate and list all resources."); } FinishProcessing(response); } catch (Exception ex) { TerminatingErrorDuringExecution(ex); } }
public void TestPipelineOperations() { const string testPipelineName = "dotnet-test-pipeline"; const string testPipelineDescription = "dotnet test pipeline"; var testPipelineId = "dotnet-test-pipeline" + DateTime.Now.ToFileTime(); const string testObjectId = "123"; const string testObjectName = "object"; string createdPipelineId = null; try { var createPipelineResult = Client.CreatePipeline(new CreatePipelineRequest { Name = testPipelineName, UniqueId = testPipelineId, Description = testPipelineDescription }); createdPipelineId = createPipelineResult.PipelineId; Assert.IsNotNull(createdPipelineId); var pipelineObject = new PipelineObject { Id = testObjectId, Name = testObjectName }; var field = new Field { Key = "workerGroup", StringValue = "dotnetsdk" }; pipelineObject.Fields = new List <Field> { field }; var putPipelineDefinitionResult = Client.PutPipelineDefinition(new PutPipelineDefinitionRequest { PipelineId = createdPipelineId, PipelineObjects = new List <PipelineObject> { pipelineObject } }); Assert.IsFalse(putPipelineDefinitionResult.Errored); var activatePipelineResult = Client.ActivatePipeline(new ActivatePipelineRequest { PipelineId = createdPipelineId }); Assert.IsNotNull(activatePipelineResult); var foundPipeline = false; for (int retries = 0; retries < 5 && !foundPipeline; retries++) { Thread.Sleep(1000 * retries); var listRequest = new ListPipelinesRequest(); var listResponse = new ListPipelinesResponse(); do { listRequest.Marker = listResponse.Marker; listResponse = Client.ListPipelines(listRequest); if (listResponse.PipelineIdList.Count > 0) { if (listResponse.PipelineIdList.Any(p => p.Id.Equals(createdPipelineId) && p.Name.Equals(testPipelineName))) { foundPipeline = true; break; } } } while (!string.IsNullOrEmpty(listResponse.Marker)); } Assert.IsTrue(foundPipeline); } finally { if (!string.IsNullOrEmpty(createdPipelineId)) { Client.DeletePipeline(new DeletePipelineRequest { PipelineId = createdPipelineId }); } } }
public override async Task <CustomResourceResponse> DeleteAsync(CustomResourceRequest request, ILambdaContext context) { try { context.LogInfo("Attempting to delete a pipeline."); ListPipelinesRequest Listing = new ListPipelinesRequest(); List <Pipeline> Pipelines = new List <Pipeline>(); ListPipelinesResponse Pipes; do { Pipes = await this._ETClient.ListPipelinesAsync(Listing); Pipelines.AddRange(Pipes.Pipelines.Where(x => x.Name.Equals(request.ResourceProperties["Name"] as string) && x.InputBucket.Equals(request.ResourceProperties["InputBucket"]) && x.Role.Equals(request.ResourceProperties["Role"]) )); } while (Pipes.NextPageToken != null); if (Pipelines.Count > 1) { context.LogWarning($"{Pipelines.Count} pipelines were found matching the Name, InputBucket, and Role specified."); } if (Pipelines.Count > 0) { DeletePipelineRequest PipelineRequest = new DeletePipelineRequest() { Id = Pipelines.First().Id }; DeletePipelineResponse DeleteResponse = await this._ETClient.DeletePipelineAsync(PipelineRequest); if ((int)DeleteResponse.HttpStatusCode < 200 || (int)DeleteResponse.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)DeleteResponse.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request, false )); } } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, "No pipelines could be found with the matching characteristics.", request )); } } catch (AmazonElasticTranscoderException e) { // If the pipeline doesn't exist, consider it deleted if (e.StatusCode == HttpStatusCode.NotFound) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request )); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } } catch (Exception e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } }
public override async Task <CustomResourceResponse> UpdateAsync(CustomResourceRequest request, ILambdaContext context) { try { context.LogInfo("Initiating update for pipeline."); UpdatePipelineRequest PipelineRequest = JsonConvert.DeserializeObject <UpdatePipelineRequest>(JsonConvert.SerializeObject(request.ResourceProperties)); ListPipelinesRequest Listing = new ListPipelinesRequest(); List <Pipeline> Pipelines = new List <Pipeline>(); ListPipelinesResponse Pipes; do { Pipes = await this._ETClient.ListPipelinesAsync(Listing); Pipelines.AddRange(Pipes.Pipelines.Where(x => x.Name.Equals(request.ResourceProperties["Name"] as string) && x.InputBucket.Equals(request.ResourceProperties["InputBucket"]) && x.Role.Equals(request.ResourceProperties["Role"]) )); } while (Pipes.NextPageToken != null); if (Pipelines.Count > 1) { context.LogWarning($"{Pipelines.Count} pipelines were found matching the Name, InputBucket, and Role specified."); } if (Pipelines.Count > 0) { PipelineRequest.Id = Pipelines.First().Id; UpdatePipelineResponse UpdateResponse = await this._ETClient.UpdatePipelineAsync(PipelineRequest); if ((int)UpdateResponse.HttpStatusCode < 200 || (int)UpdateResponse.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)UpdateResponse.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request, false, new Dictionary <string, object>() { { "Name", UpdateResponse.Pipeline.Name }, { "Arn", UpdateResponse.Pipeline.Arn }, { "Id", UpdateResponse.Pipeline.Id } } )); } } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, "No pipelines could be found with the matching characteristics.", request )); } } catch (AmazonElasticTranscoderException e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } catch (Exception e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } }
public void TestPipelineOperations() { const string testPipelineName = "dotnet-test-pipeline"; const string testPipelineDescription = "dotnet test pipeline"; var testPipelineId = "dotnet-test-pipeline" + DateTime.Now.ToFileTime(); const string testObjectId = "123"; const string testObjectName = "object"; string createdPipelineId = null; try { var createPipelineResult = Client.CreatePipelineAsync(new CreatePipelineRequest { Name = testPipelineName, UniqueId = testPipelineId, Description = testPipelineDescription }).Result; createdPipelineId = createPipelineResult.PipelineId; Assert.IsNotNull(createdPipelineId); var pipelineObject = new PipelineObject { Id = testObjectId, Name = testObjectName }; var field = new Field { Key = "workerGroup", StringValue = "dotnetsdk" }; pipelineObject.Fields = new List <Field> { field }; var putPipelineDefinitionResult = Client.PutPipelineDefinitionAsync(new PutPipelineDefinitionRequest { PipelineId = createdPipelineId, PipelineObjects = new List <PipelineObject> { pipelineObject } }).Result; Assert.IsFalse(putPipelineDefinitionResult.Errored); var tags = new List <Tag> { new Tag { Key = "tag1", Value = "42" }, new Tag { Key = "tag2", Value = DateTime.Now.ToString() } }; Client.AddTagsAsync(createdPipelineId, tags).Wait(); var describeResult = Client.DescribePipelinesAsync(new List <string> { createdPipelineId }).Result.PipelineDescriptionList; Assert.AreEqual(1, describeResult.Count); Assert.AreEqual(tags.Count, describeResult.First().Tags.Count); Client.RemoveTagsAsync(createdPipelineId, new List <string> { "tag1" }).Wait(); describeResult = Client.DescribePipelinesAsync(new List <string> { createdPipelineId }).Result.PipelineDescriptionList; Assert.AreEqual(1, describeResult.Count); Assert.AreEqual(1, describeResult.First().Tags.Count); var activatePipelineResult = Client.ActivatePipelineAsync(new ActivatePipelineRequest { PipelineId = createdPipelineId }).Result; Assert.IsNotNull(activatePipelineResult); var foundPipeline = false; for (int retries = 0; retries < 5 && !foundPipeline; retries++) { UtilityMethods.Sleep(TimeSpan.FromSeconds(retries)); var listRequest = new ListPipelinesRequest(); var listResponse = new ListPipelinesResponse(); do { listRequest.Marker = listResponse.Marker; listResponse = Client.ListPipelinesAsync(listRequest).Result; if (listResponse.PipelineIdList.Count > 0) { if (listResponse.PipelineIdList.Any(p => p.Id.Equals(createdPipelineId) && p.Name.Equals(testPipelineName))) { foundPipeline = true; break; } } } while (!string.IsNullOrEmpty(listResponse.Marker)); } Assert.IsTrue(foundPipeline); } finally { if (!string.IsNullOrEmpty(createdPipelineId)) { Client.DeletePipelineAsync(new DeletePipelineRequest { PipelineId = createdPipelineId }).Wait(); } } }
public async Task CreateCustomResourceWithHandlerTest() { // ARRANGE string AccountNumber = "123456789012"; string Region = "us-east-1"; string InputBucket = $"{Environment.UserName}-rawvideo"; string OutputBucket = $"{Environment.UserName}-video"; string PresignedUrlBucket = $"{Environment.UserName}-presigned-url-test"; string ThumbnailBucket = $"{Environment.UserName}-thumbnails"; string IAMRole = $"arn:aws:iam::{AccountNumber}:role/LambdaElasticTranscoderPipeline"; string NotificationTopic = $"arn:aws:sns:{Region}:{AccountNumber}:ElasticTranscoderNotifications"; string Key = "result.txt"; AWSConfigs.AWSProfilesLocation = $"{Environment.GetEnvironmentVariable("UserProfile")}\\.aws\\credentials"; Mock <IAmazonS3> s3Client = new Mock <IAmazonS3>(); s3Client.Setup(x => x.GetPreSignedURL(It.IsAny <GetPreSignedUrlRequest>())).Returns($"https://{PresignedUrlBucket}.s3.amazonaws.com/{Key}?AWSAccessKeyId=AKIA1234567890123456&Expires=1559247929&Signature=OTgL4H7i%2FQOcTFpLM%2AV2LsFjONE%3D"); GetPreSignedUrlRequest preSignedUrlRequest = new GetPreSignedUrlRequest() { BucketName = PresignedUrlBucket, Key = Key, Expires = DateTime.Now.AddMinutes(2), Protocol = Protocol.HTTPS, Verb = HttpVerb.PUT }; string PreSignedUrl = s3Client.Object.GetPreSignedURL(preSignedUrlRequest); string Json = $@" {{ ""requestType"":""create"", ""responseUrl"":""{PreSignedUrl}"", ""stackId"":""arn:aws:cloudformation:{Region}:{AccountNumber}:stack/stack-name/{Guid.NewGuid().ToString()}"", ""requestId"":""12345678"", ""resourceType"":""Custom::TestResource"", ""logicalResourceId"":""MyTestResource"", ""resourceProperties"":{{ ""Role"":""{IAMRole}"", ""Name"":""TestPipeline"", ""InputBucket"":""{InputBucket}"", ""Notifications"":{{ ""Error"": ""{NotificationTopic}"", }}, ""ContentConfig"":{{ ""Bucket"":""{OutputBucket}"" }}, ""ThumbnailConfig"":{{ ""Bucket"":""{ThumbnailBucket}"" }} }} }}"; Json = Json.Trim().Replace("\r", "").Replace("\n", "").Replace("\t", ""); Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > Create = async(request, context) => { try { //AmazonElasticTranscoderConfig Config = new AmazonElasticTranscoderConfig(); //IAmazonElasticTranscoder Client = new AmazonElasticTranscoderClient(Config); Mock <IAmazonElasticTranscoder> mockClient = new Mock <IAmazonElasticTranscoder>(); mockClient.Setup(x => x.CreatePipelineAsync(It.IsAny <CreatePipelineRequest>(), default(CancellationToken))) .ReturnsAsync(new CreatePipelineResponse() { HttpStatusCode = HttpStatusCode.OK }); context.LogInfo("Attempting to create a pipeline."); CreatePipelineRequest PipelineRequest = JsonConvert.DeserializeObject <CreatePipelineRequest>(JsonConvert.SerializeObject(request.ResourceProperties)); CreatePipelineResponse CreateResponse = await mockClient.Object.CreatePipelineAsync(PipelineRequest); if ((int)CreateResponse.HttpStatusCode < 200 || (int)CreateResponse.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)CreateResponse.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", CreateResponse.Pipeline.Id, request.StackId, request.RequestId, request.LogicalResourceId, false, new Dictionary <string, object>() { { "Name", CreateResponse.Pipeline.Name }, { "Arn", CreateResponse.Pipeline.Arn }, { "Id", CreateResponse.Pipeline.Id } } )); } } catch (AmazonElasticTranscoderException e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, Guid.NewGuid().ToString(), request.StackId, request.RequestId, request.LogicalResourceId )); } catch (Exception e) { context.LogError(e); return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, Guid.NewGuid().ToString(), request.StackId, request.RequestId, request.LogicalResourceId )); } }; Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > Update = async(request, context) => { try { context.LogInfo("Initiating update for pipeline."); UpdatePipelineRequest PipelineRequest = JsonConvert.DeserializeObject <UpdatePipelineRequest>(JsonConvert.SerializeObject(request.ResourceProperties)); ListPipelinesRequest Listing = new ListPipelinesRequest(); List <Pipeline> Pipelines = new List <Pipeline>(); ListPipelinesResponse Pipes; AmazonElasticTranscoderConfig Config = new AmazonElasticTranscoderConfig(); IAmazonElasticTranscoder Client = new AmazonElasticTranscoderClient(Config); do { Pipes = await Client.ListPipelinesAsync(Listing); Pipelines.AddRange(Pipes.Pipelines.Where(x => x.Name.Equals(request.ResourceProperties["Name"] as string) && x.InputBucket.Equals(request.ResourceProperties["InputBucket"]) && x.Role.Equals(request.ResourceProperties["Role"]) )); } while (Pipes.NextPageToken != null); if (Pipelines.Count > 1) { context.LogWarning($"{Pipelines.Count} pipelines were found matching the Name, InputBucket, and Role specified."); } if (Pipelines.Count > 0) { PipelineRequest.Id = Pipelines.First().Id; UpdatePipelineResponse UpdateResponse = await Client.UpdatePipelineAsync(PipelineRequest); if ((int)UpdateResponse.HttpStatusCode < 200 || (int)UpdateResponse.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)UpdateResponse.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request, false, new Dictionary <string, object>() { { "Name", UpdateResponse.Pipeline.Name }, { "Arn", UpdateResponse.Pipeline.Arn }, { "Id", UpdateResponse.Pipeline.Id } } )); } } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, "No pipelines could be found with the matching characteristics.", request )); } } catch (AmazonElasticTranscoderException e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } catch (Exception e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } }; Func <CustomResourceRequest, ILambdaContext, Task <CustomResourceResponse> > Delete = async(request, context) => { try { context.LogInfo("Attempting to delete a pipeline."); ListPipelinesRequest Listing = new ListPipelinesRequest(); List <Pipeline> Pipelines = new List <Pipeline>(); ListPipelinesResponse Pipes; AmazonElasticTranscoderConfig Config = new AmazonElasticTranscoderConfig(); IAmazonElasticTranscoder Client = new AmazonElasticTranscoderClient(Config); do { Pipes = await Client.ListPipelinesAsync(Listing); Pipelines.AddRange(Pipes.Pipelines.Where(x => x.Name.Equals(request.ResourceProperties["Name"] as string) && x.InputBucket.Equals(request.ResourceProperties["InputBucket"]) && x.Role.Equals(request.ResourceProperties["Role"]) )); } while (Pipes.NextPageToken != null); if (Pipelines.Count > 1) { context.LogWarning($"{Pipelines.Count} pipelines were found matching the Name, InputBucket, and Role specified."); } if (Pipelines.Count > 0) { DeletePipelineRequest PipelineRequest = new DeletePipelineRequest() { Id = Pipelines.First().Id }; DeletePipelineResponse DeleteResponse = await Client.DeletePipelineAsync(PipelineRequest); if ((int)DeleteResponse.HttpStatusCode < 200 || (int)DeleteResponse.HttpStatusCode > 299) { return(new CustomResourceResponse(CustomResourceResponse.RequestStatus.FAILED, $"Received HTTP status code {(int)DeleteResponse.HttpStatusCode}.", request)); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request, false )); } } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, "No pipelines could be found with the matching characteristics.", request )); } } catch (AmazonElasticTranscoderException e) { // If the pipeline doesn't exist, consider it deleted if (e.StatusCode == HttpStatusCode.NotFound) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.SUCCESS, $"See the details in CloudWatch Log Stream: {context.LogStreamName}.", request )); } else { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } } catch (Exception e) { return(new CustomResourceResponse( CustomResourceResponse.RequestStatus.FAILED, e.Message, request )); } }; CustomResourceRequest customResourceRequest = JsonConvert.DeserializeObject <CustomResourceRequest>(Json); Mock <ICustomResourceHelper> mockHelper = new Mock <ICustomResourceHelper>(); mockHelper.Setup(x => x.PutCustomResourceResponseAsync(It.IsAny <CustomResourceRequest>(), It.IsAny <CustomResourceResponse>())) .ReturnsAsync(new CustomResourceResult(customResourceRequest, new CustomResourceResponse(RequestStatus.SUCCESS, "", customResourceRequest), new HttpResponseMessage(HttpStatusCode.OK))); ICustomResourceHandler Handler = new CustomResourceFactory(Create, Update, Delete, mockHelper.Object); TestLambdaLogger TestLogger = new TestLambdaLogger(); TestClientContext ClientContext = new TestClientContext(); TestLambdaContext Context = new TestLambdaContext() { FunctionName = "ElasticTranscoderPipelineCreation", FunctionVersion = "1", Logger = TestLogger, ClientContext = ClientContext, LogGroupName = "aws/lambda/ElasticTranscoderPipeline", LogStreamName = Guid.NewGuid().ToString() }; // ACT CustomResourceResult Response = await Handler.ExecuteAsync(customResourceRequest, Context); // ASSERT Assert.NotNull(Response); Assert.NotNull(Response.Response); Assert.NotNull(Response.S3Response); Assert.True(Response.IsSuccess); }