public void ClientRuntimeContextService_Should_MakeNAttempts_And_ThrowException() { // expecting SPMeta2Exception AND currentReconnectCount == ExecuteQueryRetryAttempts // tried our best, but failed var currentReconnectCount = 0; var service = new DefaultClientRuntimeContextService(); // to run test faster service.ExecuteQueryDelayInMilliseconds = 1; service.CustomExecuteQueryHandler += (cnt) => { currentReconnectCount++; var webResponce = Activator.CreateInstance<HttpWebResponse>(); var statusCodeProp = webResponce.GetType() .GetField("m_StatusCode", BindingFlags.NonPublic | BindingFlags.Instance); statusCodeProp.SetValue(webResponce, 429); var ex = new WebException("Can't connect to O365", null, (WebExceptionStatus)402, webResponce); throw ex; }; try { service.ExecuteQuery(default(ClientRuntimeContext)); } catch (Exception e) { Assert.AreEqual(currentReconnectCount, service.ExecuteQueryRetryAttempts); Assert.IsTrue(e is SPMeta2Exception); } }
public void ClientRuntimeContextService_Should_ThrowGenericException_On_UnsupportHttpStatuses() { // expecting web exception on unknown http statuses var currentReconnectCount = 0; var service = new DefaultClientRuntimeContextService(); var rndService = new DefaultRandomService(); var supportedHttpStatuses = new[] { 700, 800, 900 }; // to run test faster service.ExecuteQueryDelayInMilliseconds = 1; service.CustomExecuteQueryHandler += (cnt) => { currentReconnectCount++; var webResponce = Activator.CreateInstance<HttpWebResponse>(); var sttausCode = rndService.RandomFromArray(supportedHttpStatuses); SetStatusCode(webResponce, sttausCode); var ex = new WebException("Can't connect to O365", null, (WebExceptionStatus)402, webResponce); throw ex; }; service.ExecuteQuery(default(ClientRuntimeContext)); }
public void ClientRuntimeContextService_Should_Rethrow_GenericException() { // expecting generic exception re-thrown var service = new DefaultClientRuntimeContextService(); service.CustomExecuteQueryHandler += (cnt) => { throw new Exception("Can't do anything!"); }; service.ExecuteQuery(default(ClientRuntimeContext)); }
public void ClientRuntimeContextService_Should_SupportHttpStatuses() { // expecting SPMeta2Exception on known http statuses var currentReconnectCount = 0; var service = new DefaultClientRuntimeContextService(); var rndService = new DefaultRandomService(); var supportedHttpStatuses = new[] { 429, 503 }; // to run test faster service.ExecuteQueryDelayInMilliseconds = 1; service.CustomExecuteQueryHandler += (cnt) => { currentReconnectCount++; var webResponce = Activator.CreateInstance<HttpWebResponse>(); var sttausCode = rndService.RandomFromArray(supportedHttpStatuses); SetStatusCode(webResponce, sttausCode); var ex = new WebException("Can't connect to O365", null, (WebExceptionStatus)402, webResponce); throw ex; }; try { service.ExecuteQuery(default(ClientRuntimeContext)); } catch (Exception e) { Assert.AreEqual(currentReconnectCount, service.ExecuteQueryRetryAttempts); Assert.IsTrue(e is SPMeta2Exception); } }