From 84bd1fe17613fab7c2acfbfcea0bfe366d03f77a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Hofman?= Date: Wed, 17 Jan 2024 16:16:08 +0100 Subject: [PATCH] SNOW-950923 codecov fixes, review suggestions to provide more checks in tests --- .../IntegrationTests/SFPutGetTest.cs | 26 +++++++++++++++++++ .../UnitTests/SFFileTransferAgentTests.cs | 8 ++++-- .../Util/SnowflakeDbExceptionAssert.cs | 14 ++++++++++ Snowflake.Data/Client/SnowflakeDbException.cs | 2 +- .../Core/FileTransfer/SFFileTransferAgent.cs | 1 - 5 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 Snowflake.Data.Tests/Util/SnowflakeDbExceptionAssert.cs diff --git a/Snowflake.Data.Tests/IntegrationTests/SFPutGetTest.cs b/Snowflake.Data.Tests/IntegrationTests/SFPutGetTest.cs index 34648dd1a..309a11316 100644 --- a/Snowflake.Data.Tests/IntegrationTests/SFPutGetTest.cs +++ b/Snowflake.Data.Tests/IntegrationTests/SFPutGetTest.cs @@ -7,6 +7,8 @@ using System.Data.Common; using System.IO.Compression; using System.Text; +using Castle.Components.DictionaryAdapter; +using Snowflake.Data.Tests.Util; namespace Snowflake.Data.Tests.IntegrationTests { @@ -227,6 +229,30 @@ public void TestPutFileProvidesQueryIdOnFailure() // Assert Assert.IsNotEmpty(queryId); Assert.DoesNotThrow(()=>Guid.Parse(queryId)); + SnowflakeDbExceptionAssert.HasErrorCode(snowflakeDbException, SFError.IO_ERROR_ON_GETPUT_COMMAND); + } + } + + [Test] + public void TestPutFileWithSyntaxErrorProvidesQueryIdOnFailure() + { + // Arrange + // Set the PUT query variables but do not create a file + t_inputFilePath = "unexisting_file.csv SOME CODE FORCING SYNTAX ERROR"; + t_internalStagePath = $"@{t_schemaName}.{t_stageName}"; + + // Act + using (var conn = new SnowflakeDbConnection(ConnectionString)) + { + conn.Open(); + var snowflakeDbException = Assert.Throws(()=>PutFile(conn)); + var queryId = snowflakeDbException.QueryId; + + // Assert + Assert.IsNotEmpty(queryId); + Assert.DoesNotThrow(()=>Guid.Parse(queryId)); + Assert.That(snowflakeDbException.ErrorCode, Is.EqualTo(1003)); + Assert.That(snowflakeDbException.InnerException, Is.Null); } } diff --git a/Snowflake.Data.Tests/UnitTests/SFFileTransferAgentTests.cs b/Snowflake.Data.Tests/UnitTests/SFFileTransferAgentTests.cs index c07325a8c..4f984bba5 100644 --- a/Snowflake.Data.Tests/UnitTests/SFFileTransferAgentTests.cs +++ b/Snowflake.Data.Tests/UnitTests/SFFileTransferAgentTests.cs @@ -4,6 +4,7 @@ using Amazon.S3.Transfer; using Snowflake.Data.Client; +using Snowflake.Data.Tests.Util; namespace Snowflake.Data.Tests.UnitTests { @@ -311,7 +312,7 @@ public void TestUploadWithGZIPCompression() } [Test] - public void TestUploadWithWilcardInTheFilename() + public void TestUploadWithWildcardInTheFilename() { // Arrange UploadSetUpFile(); @@ -461,7 +462,7 @@ public void TestUploadWithWildcardInTheDirectoryPath() } [Test] - public void TestUploadThrowsArgumentExceptionForMissingRootDirectoryWithWildcard() + public void TestUploadThrowsExceptionForMissingRootDirectoryWithWildcard() { // Arrange UploadSetUpFile(); @@ -501,6 +502,7 @@ public void TestUploadThrowsArgumentExceptionForMissingRootDirectoryWithWildcard // Assert Assert.AreEqual(_responseData.queryId, ex.QueryId); + SnowflakeDbExceptionAssert.HasErrorCode(ex, SFError.IO_ERROR_ON_GETPUT_COMMAND); Assert.That(ex.Message, Does.Match($"No file found for: {tempUploadRootDirectory}\\*/{tempUploadSecondDirectory}\\*/{mockFileName}")); for (int i = 0; i < numberOfDirectories; i++) @@ -595,6 +597,7 @@ public void TestDownloadThrowsErrorFileNotFound() // Assert Assert.AreEqual(_responseData.queryId, ex.QueryId); + SnowflakeDbExceptionAssert.HasErrorCode(ex, SFError.IO_ERROR_ON_GETPUT_COMMAND); Assert.IsInstanceOf(ex.InnerException); var innerException = ((AggregateException)ex.InnerException)?.InnerExceptions[0]; Assert.IsInstanceOf(innerException); @@ -626,6 +629,7 @@ public void TestDownloadThrowsErrorDirectoryNotFound() // Assert Assert.AreEqual(_responseData.queryId, ex.QueryId); + SnowflakeDbExceptionAssert.HasErrorCode(ex, SFError.IO_ERROR_ON_GETPUT_COMMAND); Assert.IsInstanceOf(ex.InnerException); var innerException = ((AggregateException)ex.InnerException)?.InnerExceptions[0]; Assert.IsInstanceOf(innerException); diff --git a/Snowflake.Data.Tests/Util/SnowflakeDbExceptionAssert.cs b/Snowflake.Data.Tests/Util/SnowflakeDbExceptionAssert.cs new file mode 100644 index 000000000..b3d3e50db --- /dev/null +++ b/Snowflake.Data.Tests/Util/SnowflakeDbExceptionAssert.cs @@ -0,0 +1,14 @@ +using Snowflake.Data.Core; +using Snowflake.Data.Client; +using NUnit.Framework; + +namespace Snowflake.Data.Tests.Util +{ + public static class SnowflakeDbExceptionAssert + { + public static void HasErrorCode(SnowflakeDbException exception, SFError sfError) + { + Assert.AreEqual(exception.ErrorCode, sfError.GetAttribute().errorCode); + } + } +} diff --git a/Snowflake.Data/Client/SnowflakeDbException.cs b/Snowflake.Data/Client/SnowflakeDbException.cs index 7d83eb3af..f61349762 100755 --- a/Snowflake.Data/Client/SnowflakeDbException.cs +++ b/Snowflake.Data/Client/SnowflakeDbException.cs @@ -23,7 +23,7 @@ public sealed class SnowflakeDbException : DbException static private ResourceManager rm = new ResourceManager("Snowflake.Data.Core.ErrorMessages", typeof(SnowflakeDbException).Assembly); - public new string SqlState { get; private set; } + public string SqlState { get; private set; } private int VendorCode; diff --git a/Snowflake.Data/Core/FileTransfer/SFFileTransferAgent.cs b/Snowflake.Data/Core/FileTransfer/SFFileTransferAgent.cs index 45d55f137..1932b7079 100644 --- a/Snowflake.Data/Core/FileTransfer/SFFileTransferAgent.cs +++ b/Snowflake.Data/Core/FileTransfer/SFFileTransferAgent.cs @@ -241,7 +241,6 @@ public void execute() } throw new SnowflakeDbException(SFError.IO_ERROR_ON_GETPUT_COMMAND, TransferMetadata.queryId, e); } - } public async Task executeAsync(CancellationToken cancellationToken)