/// <summary> /// Set the default mock session settings to modify request and responses. /// </summary> /// <param name="testSession"></param> public static void SetDefaultTestSessionSettings(HttpSession testSession) { testSession.ServiceBaseUri = MockServerHelper.CommonServiceBaseUri; testSession.SessionProperties["Servername"] = "myserver01"; testSession.SessionProperties["Username"] = "******"; testSession.SessionProperties["Password"] = "******"; testSession.ResponseModifier = new Action<HttpMessage>( (message) => { DatabaseTestHelper.FixODataResponseUri( message.ResponseInfo, testSession.ServiceBaseUri, MockHttpServer.DefaultServerPrefixUri); }); testSession.RequestModifier = new Action<HttpMessage.Request>( (request) => { DatabaseTestHelper.FixODataRequestPayload( request, testSession.ServiceBaseUri, MockHttpServer.DefaultServerPrefixUri); }); }
/// <summary> /// Initializes a new instance of the <see cref="MockHttpServer" /> class that record or /// playback responses for requests in a session. /// </summary> /// <param name="exceptionManager"> /// The exception manager that captures all async exceptions. /// </param> /// <param name="baseUri">The server prefix to use.</param> /// <param name="session">The object that stores request/response information.</param> public MockHttpServer( AsyncExceptionManager exceptionManager, Uri baseUri, HttpSession session) : this(exceptionManager, baseUri) { this.stopListenerUri = new Uri(baseUri, Guid.NewGuid().ToString()); this.listener = this.CreateListener( context => HandleMockRequest( context, this.baseUri, session), int.MaxValue); }
/// <summary> /// Set the default mock session settings to modify request and responses. /// </summary> /// <param name="testSession"></param> public static void SetDefaultTestSessionSettings(HttpSession testSession) { testSession.ServiceBaseUri = ServerTestHelper.CommonServiceBaseUri; testSession.RequestModifier = new Action<HttpMessage.Request>( (request) => { }); testSession.ResponseModifier = new Action<HttpMessage>( (message) => { }); }
/// <summary> /// Set the default mock session settings to modify request and responses. /// </summary> /// <param name="testSession"></param> public static void SetDefaultTestSessionSettings(HttpSession testSession) { testSession.ServiceBaseUri = ServerTestHelper.CommonServiceBaseUri; testSession.RequestModifier = new Action<HttpMessage.Request>( (request) => { // To run the tests targetting production uncomment the below line and substitute in a valid subscription ID. // request.RequestUri = new Uri(request.RequestUri.OriginalString.Replace("00000000-0000-0000-0001-000000000001", "<subscription_id>")); }); testSession.ResponseModifier = new Action<HttpMessage>( (message) => { }); }
/// <summary> /// The async delegate that handles an incoming request, passing it through to a real /// service and record the response if <paramref name="serviceBaseUri"/> was specified, /// or plays back responses from a pre-recorded <paramref name="session"/> if it was not. /// </summary> /// <param name="context">The context for the incoming request.</param> /// <param name="baseUri">The incoming request's base Uri.</param> /// <param name="session">The object that stores request/response information.</param> private static void HandleMockRequest( HttpListenerContext context, Uri baseUri, HttpSession session) { if (session.ServiceBaseUri != null) { // Issue the request to a real service and record the response HttpMessage message = GetResponseInfoFromService( context.Request, baseUri, session.ServiceBaseUri, session); session.Messages.RecordMessage(message); } // Construct the mock response from responses in the session. HttpMessage recordedMessage = session.Messages.GetMessage(context.Request.Url); if (session.RequestValidator != null) { HttpMessage.Request actualRequestInfo = ConstructRequestInfo(context.Request); session.RequestValidator(recordedMessage, actualRequestInfo); } if (session.ResponseModifier != null) { session.ResponseModifier(recordedMessage); } ConstructListenerResponse(recordedMessage.ResponseInfo, baseUri, context.Response); context.Response.Close(); }
/// <summary> /// Retrieves an <see cref="HttpMessage"/> object from a real service. /// </summary> /// <param name="request">The request to mimic on the real service.</param> /// <param name="baseUri">The request's base Uri.</param> /// <param name="serviceBaseUri">The real service's base Uri.</param> /// <param name="session">The object that stores request/response information.</param> /// <returns>An <see cref="HttpMessage"/> object containing the request/response.</returns> private static HttpMessage GetResponseInfoFromService( HttpListenerRequest request, Uri baseUri, Uri serviceBaseUri, HttpSession session) { // Construct the request to make HttpMessage message = new HttpMessage(); message.RequestInfo = ConstructRequestInfo(request); // Clone the request and modify it for the real service HttpMessage.Request requestToSend = message.RequestInfo.Clone(); requestToSend.RequestUri = ChangeUriBase(request.Url, baseUri, serviceBaseUri); if (session.RequestModifier != null) { session.RequestModifier(requestToSend); } HttpWebResponse response = MakeServiceRequest(requestToSend); message.ResponseInfo = ConstructResponseInfo(serviceBaseUri, response); return message; }
/// <summary> /// Helper function to create premium database in the powershell environment provided. /// </summary> /// <param name="powershell">The powershell environment</param> /// <param name="testSession">The test session</param> private static void TestCreatePremiumDatabase(System.Management.Automation.PowerShell powershell, HttpSession testSession) { using (AsyncExceptionManager exceptionManager = new AsyncExceptionManager()) { Collection<PSObject> premiumDB_P1, PremiumDB_P2; using (new MockHttpServer( exceptionManager, MockHttpServer.DefaultServerPrefixUri, testSession)) { powershell.InvokeBatchScript( @"$P1 = Get-AzureSqlDatabaseServiceObjective" + @" -Context $context" + @" -ServiceObjectiveName ""P1"""); powershell.InvokeBatchScript( @"$P2 = Get-AzureSqlDatabaseServiceObjective " + @"-Context $context" + @" -ServiceObjectiveName ""P2"""); premiumDB_P1 = powershell.InvokeBatchScript( @"$premiumDB_P1 = New-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName NewAzureSqlPremiumDatabaseTests_P1 " + @"-Edition Premium " + @"-ServiceObjective $P1 "); premiumDB_P1 = powershell.InvokeBatchScript("$PremiumDB_P1"); powershell.InvokeBatchScript( @"$PremiumDB_P2 = New-AzureSqlDatabase " + @"-Context $context " + @"-DatabaseName NewAzureSqlPremiumDatabaseTests_P2 " + @"-Collation Japanese_CI_AS " + @"-Edition Premium " + @"-ServiceObjective $P2 " + @"-MaxSizeGB 10 " + @"-Force"); PremiumDB_P2 = powershell.InvokeBatchScript("$PremiumDB_P2"); } Assert.AreEqual(0, powershell.Streams.Error.Count, "Errors during run!"); Assert.AreEqual(0, powershell.Streams.Warning.Count, "Warnings during run!"); powershell.Streams.ClearStreams(); Assert.IsTrue( premiumDB_P1.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database databaseP1 = (Services.Server.Database)premiumDB_P1.Single().BaseObject; Assert.AreEqual("NewAzureSqlPremiumDatabaseTests_P1", databaseP1.Name, "Expected db name to be NewAzureSqlPremiumDatabaseTests_P1"); Assert.IsTrue( PremiumDB_P2.Single().BaseObject is Services.Server.Database, "Expecting a Database object"); Services.Server.Database databaseP2 = (Services.Server.Database)PremiumDB_P2.Single().BaseObject; Assert.AreEqual("NewAzureSqlPremiumDatabaseTests_P2", databaseP2.Name, "Expected db name to be NewAzureSqlPremiumDatabaseTests_P2"); Assert.AreEqual( "Japanese_CI_AS", databaseP2.CollationName, "Expected collation to be Japanese_CI_AS"); Assert.AreEqual("Premium", databaseP2.Edition, "Expected edition to be Premium"); Assert.AreEqual(10, databaseP2.MaxSizeGB, "Expected max size to be 10 GB"); } }