diff --git a/pom.xml b/pom.xml
index 241e588..e25879f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
io.cdap.plugin
Google Drive plugins
google-drive-plugins
- 1.6.1
+ 1.6.2-SNAPSHOT
jar
Google Drive plugins
diff --git a/src/main/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfig.java b/src/main/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfig.java
index 1ccfbba..8c8d950 100644
--- a/src/main/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfig.java
+++ b/src/main/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfig.java
@@ -596,8 +596,8 @@ private void getAndValidateSheetSchema(FailureCollector collector, GoogleSheetsS
}
} catch (IOException e) {
collector.addFailure(
- String.format("Failed to prepare headers, spreadsheet id: '%s', sheet title: '%s'.",
- currentSpreadsheetId, currentSheetTitle), null);
+ String.format("Failed to prepare headers, spreadsheet id: '%s', sheet title: '%s' due to reason: '%s'.",
+ currentSpreadsheetId, currentSheetTitle, e.getMessage()), null);
}
}
}
diff --git a/src/test/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfigTest.java b/src/test/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfigTest.java
index c613559..54885ac 100644
--- a/src/test/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfigTest.java
+++ b/src/test/java/io/cdap/plugin/google/sheets/source/GoogleSheetsSourceConfigTest.java
@@ -16,6 +16,7 @@
package io.cdap.plugin.google.sheets.source;
+import com.google.api.services.drive.model.File;
import com.google.api.services.sheets.v4.model.CellData;
import com.google.api.services.sheets.v4.model.ExtendedValue;
import com.google.api.services.sheets.v4.model.GridRange;
@@ -27,7 +28,9 @@
import io.cdap.plugin.google.sheets.source.utils.MetadataKeyValueAddress;
import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
+import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -471,4 +474,34 @@ public void testProcessColumnsInvalidTitlesOldSchema()
Assert.assertEquals("d", subColumns.get(1).getHeaderTitle());
Assert.assertTrue(subColumns.get(0).getSubColumns().isEmpty());
}
+
+ @Test
+ public void testGetAndValidateSheetSchemaIOException() throws Exception {
+ FailureCollector collector = new DefaultFailureCollector("", Collections.EMPTY_MAP);
+ GoogleSheetsSourceClient mockClient = Mockito.mock(GoogleSheetsSourceClient.class);
+
+ List spreadsheetsFiles = new ArrayList<>();
+ File mockFile = new File();
+ mockFile.setId("spreadsheetId");
+ spreadsheetsFiles.add(mockFile);
+
+ Mockito.when(mockClient.getSheetsTitles("spreadsheetId")).thenReturn(Arrays.asList("Sheet1"));
+
+ Mockito.when(mockClient.getSingleRows(Mockito.anyString(), Mockito.anyString(), Mockito.anySet()))
+ .thenThrow(new IOException("Mocked IO exception"));
+
+ setFieldValue("sheetsToPull", "all");
+ setFieldValue("columnNamesSelection", "noColumnNames");
+
+ Method method = GoogleSheetsSourceConfig.class.getDeclaredMethod("getAndValidateSheetSchema",
+ FailureCollector.class, GoogleSheetsSourceClient.class, List.class);
+ method.setAccessible(true);
+
+ method.invoke(config, collector, mockClient, spreadsheetsFiles);
+
+ Assert.assertEquals(1, collector.getValidationFailures().size());
+ ValidationFailure failure = collector.getValidationFailures().get(0);
+ Assert.assertTrue(failure.getMessage().contains("Failed to prepare headers"));
+ Assert.assertTrue(failure.getMessage().contains("due to reason: 'Mocked IO exception'"));
+ }
}