public void WhenBlobTransferProgressChangedEventIsRaisedThenProgressCallbackIsCalled() { const int Percentage = 10; var progressCalled = false; var providedPercentage = -1; EventHandler <BlobTransferProgressChangedEventArgs> blobTransferProgressHandler = null; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateStringAssetCreationOptions = (name, options) => stubAsset }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateString = path => stubAssetFile }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => stubAccessPolicy }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorIAssetIAccessPolicy = (asset, acccessPolicy) => stubLocator }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferProgressChangedAddEventHandlerOfBlobTransferProgressChangedEventArgs = (client, handler) => { blobTransferProgressHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); Action <int> onProgress = progressPercentage => { progressCalled = true; providedPercentage = progressPercentage; }; uploader.On(progress: onProgress); uploader.Start(); } var args = new BlobTransferProgressChangedEventArgs(0, 0, 0, Percentage, 0, new Uri("http://myvideo"), @"C:\videos\myvideo.mp4", null); blobTransferProgressHandler.Invoke(null, args); Assert.IsTrue(progressCalled); Assert.AreEqual(Percentage, providedPercentage); }
public async Task WhenStartIsCalledThenUploadAsyncOnAssetFileIsCalled() { bool uploadAsyncCalled = false; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator) }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => { uploadAsyncCalled = true; return(Task.Delay(0)); }; var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); await uploader.Start(); } Assert.IsTrue(uploadAsyncCalled); }
public async Task WhenBlobTransferCompleteEventIsRaisedThenAccessPolicyAndLocatorAreDeleted() { EventHandler <BlobTransferCompleteEventArgs> blobTransferCompletedHandler = null; var stubAsset = new StubIAsset { IdGet = () => "myId", NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator() { AccessPolicyGet = () => stubAccessPolicy }; bool accessPolicyDeleteCalled = false; bool locatorDeletedCalled = false; using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; stubAccessPolicy.Delete = () => { accessPolicyDeleteCalled = true; }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator), }; stubLocator.Delete = () => { locatorDeletedCalled = true; }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func <CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferCompletedAddEventHandlerOfBlobTransferCompleteEventArgs = (client, handler) => { blobTransferCompletedHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); uploader.On(); await uploader.Start(); } var args = new BlobTransferCompleteEventArgs(null, true, null, @"C:\videos\myvideo.mp4", new Uri("http://myvideo"), BlobTransferType.Upload); blobTransferCompletedHandler.Invoke(null, args); Assert.IsTrue(locatorDeletedCalled); Assert.IsTrue(accessPolicyDeleteCalled); }
public async Task WhenStartIsCalledThenAJobIsSubmitted() { const string Configuration = "H264 Broadband 720p"; const string OutputAssetName = "Output Asset"; const string JobName = "My Job"; IAsset inputAsset = new StubIAsset { NameGet = () => "Input Asset" }; var mediaProcessor = new StubIMediaProcessor { NameGet = () => "Windows Azure Media Encoder", VersionGet = () => "2.0.0" }; string jobName = null; IMediaProcessor taskMediaProcessor = null; string taskConfiguration = null; IAsset taskInputAsset = null; string taskOutputAssetName = null; bool jobSubmitted = false; bool getExecutionProgressTaskCalled = false; using (ShimsContext.Create()) { var outputAsset = new StubIAsset(); var task = new StubITask(); var tasks = new ShimTaskCollection { AddNewStringIMediaProcessorStringTaskOptions = (taskName, processor, configuration, taskOptions) => { taskMediaProcessor = processor; taskConfiguration = configuration; task.NameGet = () => taskName; return(task); } }; var inputAssets = new ShimInputAssetCollection <IAsset> { AddT0 = asset => taskInputAsset = asset }; var outputAssets = new ShimOutputAssetCollection { AddNewStringAssetCreationOptions = (outputAssetName, assetCreationOptions) => { taskOutputAssetName = outputAssetName; outputAsset.NameGet = () => outputAssetName; return(outputAsset); } }; task.InputAssetsGet = () => inputAssets; task.OutputAssetsGet = () => outputAssets; var job = new StubIJob { TasksGet = () => tasks, SubmitAsync = () => { jobSubmitted = true; return(Task.Delay(0)); }, GetExecutionProgressTaskCancellationToken = token => { getExecutionProgressTaskCalled = true; return(Task.Delay(0)); } }; var jobs = new List <IJob>(); var collection = new ShimJobBaseCollection { CreateString = name => { jobName = name; job.NameGet = () => name; return(job); } }; collection.Bind(jobs.AsQueryable()); var mediaProcessors = new List <IMediaProcessor> { mediaProcessor }; var mediaProcessorsCollection = new ShimMediaProcessorBaseCollection(); mediaProcessorsCollection.Bind(mediaProcessors.AsQueryable()); var context = new ShimCloudMediaContext { JobsGet = () => collection, MediaProcessorsGet = () => mediaProcessorsCollection }; Func <CloudMediaContext> createContext = () => context; var encoder = new AzureMediaServicesEncoder( JobName, inputAsset, Configuration, OutputAssetName, createContext); await encoder.Start(); } Assert.AreEqual(JobName, jobName); Assert.AreEqual(Configuration, taskConfiguration); Assert.AreEqual(mediaProcessor, taskMediaProcessor); Assert.AreEqual(inputAsset, taskInputAsset); Assert.AreEqual(OutputAssetName, taskOutputAssetName); Assert.IsTrue(jobSubmitted); Assert.IsTrue(getExecutionProgressTaskCalled); }
public async Task WhenStateChangedEventIsRaisedAndJobIsProcessingThenErrorCallbackIsCalled() { const string Configuration = "H264 Broadband 720p"; const string OutputAssetName = "Output Asset"; const string JobName = "My Job"; const string JobId = "My Id"; const string TaskId = "My Task Id"; const string TaskErrorCode = "My Task Error Code"; const string TaskErrorMessage = "My Task Error Message"; IAsset inputAsset = new StubIAsset { NameGet = () => "Input Asset" }; var mediaProcessor = new StubIMediaProcessor { NameGet = () => "Windows Azure Media Encoder", VersionGet = () => "2.0.0" }; string errorMesage = null; bool errorCalled = false; using (ShimsContext.Create()) { var outputAsset = new StubIAsset(); var task = new StubITask { IdGet = () => TaskId, ErrorDetailsGet = () => new ReadOnlyCollection <ErrorDetail>( new List <ErrorDetail> { new StubErrorDetail { Code = TaskErrorCode, Message = TaskErrorMessage, } }) }; var tasks = new ShimTaskCollection { AddNewStringIMediaProcessorStringTaskOptions = (taskName, processor, configuration, taskOptions) => { task.NameGet = () => taskName; return(task); } }; tasks.Bind(new List <ITask> { task }.AsQueryable()); var inputAssets = new ShimInputAssetCollection <IAsset> { AddT0 = asset => { } }; var outputAssets = new ShimOutputAssetCollection { AddNewStringAssetCreationOptions = (outputAssetName, assetCreationOptions) => { outputAsset.NameGet = () => outputAssetName; return(outputAsset); } }; task.InputAssetsGet = () => inputAssets; task.OutputAssetsGet = () => outputAssets; var job = new StubIJob { TasksGet = () => tasks, SubmitAsync = () => Task.Delay(0), GetExecutionProgressTaskCancellationToken = token => Task.Delay(0) }; var jobs = new List <IJob>(); var collection = new ShimJobBaseCollection { CreateString = name => { job.NameGet = () => name; job.IdGet = () => JobId; return(job); } }; collection.Bind(jobs.AsQueryable()); var mediaProcessors = new List <IMediaProcessor> { mediaProcessor }; var mediaProcessorsCollection = new ShimMediaProcessorBaseCollection(); mediaProcessorsCollection.Bind(mediaProcessors.AsQueryable()); var context = new ShimCloudMediaContext { JobsGet = () => collection, MediaProcessorsGet = () => mediaProcessorsCollection }; Func <CloudMediaContext> createContext = () => context; var encoder = new AzureMediaServicesEncoder( JobName, inputAsset, Configuration, OutputAssetName, createContext); Action <string> onError = message => { errorCalled = true; errorMesage = message; }; encoder.On(error: onError); await encoder.Start(); job.StateChangedEvent.Invoke(job, new StubJobStateChangedEventArgs(JobState.Processing, JobState.Error)); Assert.IsTrue(errorCalled); StringAssert.Contains(errorMesage, TaskId); StringAssert.Contains(errorMesage, TaskErrorCode); StringAssert.Contains(errorMesage, TaskErrorMessage); } }
public void WhenBlobTransferProgressChangedEventIsRaisedThenProgressCallbackIsCalled() { const int Percentage = 10; var progressCalled = false; var providedPercentage = -1; EventHandler<BlobTransferProgressChangedEventArgs> blobTransferProgressHandler = null; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateStringAssetCreationOptions = (name, options) => stubAsset }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateString = path => stubAssetFile }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => stubAccessPolicy }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorIAssetIAccessPolicy = (asset, acccessPolicy) => stubLocator }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferProgressChangedAddEventHandlerOfBlobTransferProgressChangedEventArgs = (client, handler) => { blobTransferProgressHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); Action<int> onProgress = progressPercentage => { progressCalled = true; providedPercentage = progressPercentage; }; uploader.On(progress: onProgress); uploader.Start(); } var args = new BlobTransferProgressChangedEventArgs(0, 0, 0, Percentage, 0, new Uri("http://myvideo"), @"C:\videos\myvideo.mp4", null); blobTransferProgressHandler.Invoke(null, args); Assert.IsTrue(progressCalled); Assert.AreEqual(Percentage, providedPercentage); }
public async Task WhenBlobTransferCompleteEventIsRaisedThenAccessPolicyAndLocatorAreDeleted() { EventHandler<BlobTransferCompleteEventArgs> blobTransferCompletedHandler = null; var stubAsset = new StubIAsset { IdGet = () => "myId", NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator() { AccessPolicyGet = () => stubAccessPolicy }; bool accessPolicyDeleteCalled = false; bool locatorDeletedCalled = false; using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; stubAccessPolicy.Delete = () => { accessPolicyDeleteCalled = true; }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator), }; stubLocator.Delete = () => { locatorDeletedCalled = true; }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => Task.Delay(0); var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; ShimBlobTransferClient.AllInstances.TransferCompletedAddEventHandlerOfBlobTransferCompleteEventArgs = (client, handler) => { blobTransferCompletedHandler = handler; }; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); uploader.On(); await uploader.Start(); } var args = new BlobTransferCompleteEventArgs(null, true, null, @"C:\videos\myvideo.mp4", new Uri("http://myvideo"), BlobTransferType.Upload); blobTransferCompletedHandler.Invoke(null, args); Assert.IsTrue(locatorDeletedCalled); Assert.IsTrue(accessPolicyDeleteCalled); }
public async Task WhenStartIsCalledThenUploadAsyncOnAssetFileIsCalled() { bool uploadAsyncCalled = false; var stubAsset = new StubIAsset { NameGet = () => "test" }; var stubAssetFile = new StubIAssetFile(); var stubAccessPolicy = new StubIAccessPolicy(); var stubLocator = new StubILocator(); using (ShimsContext.Create()) { var stubAssets = new StubAssetBaseCollection { CreateAsyncStringAssetCreationOptionsCancellationToken = (name, options, cancellationToken) => Task.FromResult((IAsset)stubAsset) }; var stubAssetsFiles = new StubAssetFileBaseCollection { CreateAsyncStringCancellationToken = (path, cancellationToken) => Task.FromResult((IAssetFile)stubAssetFile) }; stubAsset.AssetFilesGet = () => stubAssetsFiles; var accessPolicies = new ShimAccessPolicyBaseCollection { CreateAsyncStringTimeSpanAccessPermissions = (name, timesSpan, accessPermissions) => Task.FromResult((IAccessPolicy)stubAccessPolicy) }; var locators = new ShimLocatorBaseCollection { CreateSasLocatorAsyncIAssetIAccessPolicy = (asset, acccessPolicy) => Task.FromResult((ILocator)stubLocator) }; ShimPath.GetFileNameString = fileName => string.Empty; ShimBlobTransferClient.Constructor = client => { }; stubAssetFile.UploadAsyncStringBlobTransferClientILocatorCancellationToken = (filePath, blobTransferClient, locator, cancellationToken) => { uploadAsyncCalled = true; return Task.Delay(0); }; var context = new ShimCloudMediaContext { AssetsGet = () => stubAssets, AccessPoliciesGet = () => accessPolicies, LocatorsGet = () => locators, }; Func<CloudMediaContext> createContext = () => context; var uploader = new AzureMediaServicesUploader("myVideo", @"C:\videos\myvideo.mp4", createContext); await uploader.Start(); } Assert.IsTrue(uploadAsyncCalled); }
public async Task WhenStateChangedEventIsRaisedAndJobIsProcessingThenErrorCallbackIsCalled() { const string Configuration = "H264 Broadband 720p"; const string OutputAssetName = "Output Asset"; const string JobName = "My Job"; const string JobId = "My Id"; const string TaskId = "My Task Id"; const string TaskErrorCode = "My Task Error Code"; const string TaskErrorMessage = "My Task Error Message"; IAsset inputAsset = new StubIAsset { NameGet = () => "Input Asset" }; var mediaProcessor = new StubIMediaProcessor { NameGet = () => "Windows Azure Media Encoder", VersionGet = () => "2.0.0" }; string errorMesage = null; bool errorCalled = false; using (ShimsContext.Create()) { var outputAsset = new StubIAsset(); var task = new StubITask { IdGet = () => TaskId, ErrorDetailsGet = () => new ReadOnlyCollection<ErrorDetail>( new List<ErrorDetail> { new StubErrorDetail { Code = TaskErrorCode, Message = TaskErrorMessage, } }) }; var tasks = new ShimTaskCollection { AddNewStringIMediaProcessorStringTaskOptions = (taskName, processor, configuration, taskOptions) => { task.NameGet = () => taskName; return task; } }; tasks.Bind(new List<ITask> { task }.AsQueryable()); var inputAssets = new ShimInputAssetCollection<IAsset> { AddT0 = asset => { } }; var outputAssets = new ShimOutputAssetCollection { AddNewStringAssetCreationOptions = (outputAssetName, assetCreationOptions) => { outputAsset.NameGet = () => outputAssetName; return outputAsset; } }; task.InputAssetsGet = () => inputAssets; task.OutputAssetsGet = () => outputAssets; var job = new StubIJob { TasksGet = () => tasks, SubmitAsync = () => Task.Delay(0), GetExecutionProgressTaskCancellationToken = token => Task.Delay(0) }; var jobs = new List<IJob>(); var collection = new ShimJobBaseCollection { CreateString = name => { job.NameGet = () => name; job.IdGet = () => JobId; return job; } }; collection.Bind(jobs.AsQueryable()); var mediaProcessors = new List<IMediaProcessor> { mediaProcessor }; var mediaProcessorsCollection = new ShimMediaProcessorBaseCollection(); mediaProcessorsCollection.Bind(mediaProcessors.AsQueryable()); var context = new ShimCloudMediaContext { JobsGet = () => collection, MediaProcessorsGet = () => mediaProcessorsCollection }; Func<CloudMediaContext> createContext = () => context; var encoder = new AzureMediaServicesEncoder( JobName, inputAsset, Configuration, OutputAssetName, createContext); Action<string> onError = message => { errorCalled = true; errorMesage = message; }; encoder.On(error: onError); await encoder.Start(); job.StateChangedEvent.Invoke(job, new StubJobStateChangedEventArgs(JobState.Processing, JobState.Error)); Assert.IsTrue(errorCalled); StringAssert.Contains(errorMesage, TaskId); StringAssert.Contains(errorMesage, TaskErrorCode); StringAssert.Contains(errorMesage, TaskErrorMessage); } }
public async Task WhenStartIsCalledThenAJobIsSubmitted() { const string Configuration = "H264 Broadband 720p"; const string OutputAssetName = "Output Asset"; const string JobName = "My Job"; IAsset inputAsset = new StubIAsset { NameGet = () => "Input Asset" }; var mediaProcessor = new StubIMediaProcessor { NameGet = () => "Windows Azure Media Encoder", VersionGet = () => "2.0.0" }; string jobName = null; IMediaProcessor taskMediaProcessor = null; string taskConfiguration = null; IAsset taskInputAsset = null; string taskOutputAssetName = null; bool jobSubmitted = false; bool getExecutionProgressTaskCalled = false; using (ShimsContext.Create()) { var outputAsset = new StubIAsset(); var task = new StubITask(); var tasks = new ShimTaskCollection { AddNewStringIMediaProcessorStringTaskOptions = (taskName, processor, configuration, taskOptions) => { taskMediaProcessor = processor; taskConfiguration = configuration; task.NameGet = () => taskName; return task; } }; var inputAssets = new ShimInputAssetCollection<IAsset> { AddT0 = asset => taskInputAsset = asset }; var outputAssets = new ShimOutputAssetCollection { AddNewStringAssetCreationOptions = (outputAssetName, assetCreationOptions) => { taskOutputAssetName = outputAssetName; outputAsset.NameGet = () => outputAssetName; return outputAsset; } }; task.InputAssetsGet = () => inputAssets; task.OutputAssetsGet = () => outputAssets; var job = new StubIJob { TasksGet = () => tasks, SubmitAsync = () => { jobSubmitted = true; return Task.Delay(0); }, GetExecutionProgressTaskCancellationToken = token => { getExecutionProgressTaskCalled = true; return Task.Delay(0); } }; var jobs = new List<IJob>(); var collection = new ShimJobBaseCollection { CreateString = name => { jobName = name; job.NameGet = () => name; return job; } }; collection.Bind(jobs.AsQueryable()); var mediaProcessors = new List<IMediaProcessor> { mediaProcessor }; var mediaProcessorsCollection = new ShimMediaProcessorBaseCollection(); mediaProcessorsCollection.Bind(mediaProcessors.AsQueryable()); var context = new ShimCloudMediaContext { JobsGet = () => collection, MediaProcessorsGet = () => mediaProcessorsCollection }; Func<CloudMediaContext> createContext = () => context; var encoder = new AzureMediaServicesEncoder( JobName, inputAsset, Configuration, OutputAssetName, createContext); await encoder.Start(); } Assert.AreEqual(JobName, jobName); Assert.AreEqual(Configuration, taskConfiguration); Assert.AreEqual(mediaProcessor, taskMediaProcessor); Assert.AreEqual(inputAsset, taskInputAsset); Assert.AreEqual(OutputAssetName, taskOutputAssetName); Assert.IsTrue(jobSubmitted); Assert.IsTrue(getExecutionProgressTaskCalled); }