public void Consumer_CanAuthorizeUserAsync() { //arrange options.RequestTokenResponseCallbackUrl = TU.GenerateLocalHostBaseAddress(); IConsumer consumer = new ConsumerFactory(options) .CreateConsumer(); string verifier = null; var lisnrManualResetEvent = new ManualResetEvent(false); var requestLoginManualEvent = new ManualResetEvent(false); var authorizeUserManualEvent = new ManualResetEvent(false); Task<Uri> task = consumer.RequestLoginAsync(); task.ContinueWith(uri => requestLoginManualEvent.Set()); requestLoginManualEvent.WaitOne(); Process.Start(task.Result.ToString()); var listener = new HttpListener(); listener.Prefixes.Add(options.RequestTokenResponseCallbackUrl); listener.Start(); listener.BeginGetContext( ((r) => { var lisnr = (HttpListener)r.AsyncState; var context = lisnr.EndGetContext(r); var rq = context.Request.GetRequestParameters(); verifier = rq.Where(p => p.Name == "oauth_verifier") .Select(p => p.Value) .First(); lisnrManualResetEvent.Set(); }), listener); lisnrManualResetEvent.WaitOne(); ((IDisposable)listener).Dispose(); //act //assert Task<TokenInfo> authorizeUserTask = consumer.AuthorizeUserAsync(verifier); task.ContinueWith(token => authorizeUserManualEvent.Set()); authorizeUserManualEvent.WaitOne(); //assert Assert.IsFalse(authorizeUserTask.IsFaulted); Assert.IsNull(authorizeUserTask.Exception); Assert.IsNotNull(authorizeUserTask.Result); }