using System; using System.IO; using System.Net.Sockets; using Microsoft.VisualStudio.TestTools.UnitTesting; using MySqlConnector; using SyncEngine.MySql; namespace SyncEngine.Tests { [TestClass] public class MySqlConnectionFailuresTests { [TestMethod] public void IsReconnectableMySql_TransientError_ReturnsTrue() { Assert.IsTrue(MySqlConnectionFailures.IsReconnectableMySql(MySqlErrorCode.UnableToConnectToHost, isTransient: true)); } [TestMethod] public void IsReconnectableMySql_ServerShutdown_ReturnsTrue() { Assert.IsTrue(MySqlConnectionFailures.IsReconnectableMySql(MySqlErrorCode.ServerShutdown, isTransient: false)); } [TestMethod] public void IsReconnectableMySql_GoneAwayNumericCode_ReturnsTrue() { Assert.IsTrue(MySqlConnectionFailures.IsReconnectableMySql((MySqlErrorCode)2006, isTransient: false)); } [TestMethod] public void IsReconnectableMySql_AccessDenied_ReturnsFalse() { Assert.IsFalse(MySqlConnectionFailures.IsReconnectableMySql(MySqlErrorCode.AccessDenied, isTransient: false)); } [TestMethod] public void IsReconnectableMySql_NoSuchTable_ReturnsFalse() { Assert.IsFalse(MySqlConnectionFailures.IsReconnectableMySql(MySqlErrorCode.NoSuchTable, isTransient: false)); } [TestMethod] public void IsReconnectable_IOExceptionWrapped_ReturnsTrue() { var ex = new InvalidOperationException("read failed", new IOException("pipe broken")); Assert.IsTrue(MySqlConnectionFailures.IsReconnectable(ex)); } [TestMethod] public void IsReconnectable_SocketExceptionWrapped_ReturnsTrue() { var ex = new Exception("network", new SocketException()); Assert.IsTrue(MySqlConnectionFailures.IsReconnectable(ex)); } [TestMethod] public void IsReconnectable_ClosedConnectionInvalidOperation_ReturnsTrue() { var ex = new InvalidOperationException("The connection is closed."); Assert.IsTrue(MySqlConnectionFailures.IsReconnectable(ex)); } [TestMethod] public void IsReconnectable_ObjectDisposed_ReturnsTrue() { Assert.IsTrue(MySqlConnectionFailures.IsReconnectable(new ObjectDisposedException("conn"))); } [TestMethod] public void IsReconnectable_UnrelatedException_ReturnsFalse() { Assert.IsFalse(MySqlConnectionFailures.IsReconnectable(new ArgumentException("bad arg"))); } } }