diff --git a/java/com/google/domain/registry/export/UpdateSnapshotViewAction.java b/java/com/google/domain/registry/export/UpdateSnapshotViewAction.java index 0c52f3990..8fa245fef 100644 --- a/java/com/google/domain/registry/export/UpdateSnapshotViewAction.java +++ b/java/com/google/domain/registry/export/UpdateSnapshotViewAction.java @@ -25,6 +25,7 @@ import com.google.appengine.api.taskqueue.TaskOptions.Method; import com.google.domain.registry.bigquery.BigqueryFactory; import com.google.domain.registry.config.RegistryEnvironment; import com.google.domain.registry.request.Action; +import com.google.domain.registry.request.HttpException.InternalServerErrorException; import com.google.domain.registry.request.Parameter; import com.google.domain.registry.util.FormattingLogger; import com.google.domain.registry.util.SqlTemplate; @@ -71,7 +72,8 @@ public class UpdateSnapshotViewAction implements Runnable { try { updateSnapshotView(datasetId, tableId, kindName); } catch (Throwable e) { - throw new RuntimeException("Error in update snapshot view action.", e); + logger.severefmt(e, "Could not update snapshot view for table %s", tableId); + throw new InternalServerErrorException("Error in update snapshot view action"); } } diff --git a/javatests/com/google/domain/registry/export/UpdateSnapshotViewActionTest.java b/javatests/com/google/domain/registry/export/UpdateSnapshotViewActionTest.java index 10e654b1c..14c63c225 100644 --- a/javatests/com/google/domain/registry/export/UpdateSnapshotViewActionTest.java +++ b/javatests/com/google/domain/registry/export/UpdateSnapshotViewActionTest.java @@ -31,7 +31,9 @@ import com.google.api.services.bigquery.model.Table; import com.google.appengine.api.taskqueue.QueueFactory; import com.google.domain.registry.bigquery.BigqueryFactory; import com.google.domain.registry.config.TestRegistryConfig; +import com.google.domain.registry.request.HttpException.InternalServerErrorException; import com.google.domain.registry.testing.AppEngineRule; +import com.google.domain.registry.testing.ExceptionRule; import com.google.domain.registry.testing.RegistryConfigRule; import com.google.domain.registry.testing.TaskQueueHelper.TaskMatcher; @@ -43,6 +45,8 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import java.io.IOException; + /** Unit tests for {@link UpdateSnapshotViewAction}. */ @RunWith(MockitoJUnitRunner.class) public class UpdateSnapshotViewActionTest { @@ -52,6 +56,9 @@ public class UpdateSnapshotViewActionTest { .withTaskQueue() .build(); + @Rule + public final ExceptionRule thrown = new ExceptionRule(); + @Rule public final RegistryConfigRule configRule = new RegistryConfigRule(new TestRegistryConfig() { @Override public String getProjectId() { @@ -91,7 +98,7 @@ public class UpdateSnapshotViewActionTest { .thenReturn(bigqueryDatasetsInsert); when(bigquery.tables()).thenReturn(bigqueryTables); when(bigqueryTables.update( - eq("Project-Id"), any(String.class), any(String.class), any(Table.class))) + eq("Project-Id"), anyString(), anyString(), any(Table.class))) .thenReturn(bigqueryTablesUpdate); action = new UpdateSnapshotViewAction(); @@ -125,4 +132,12 @@ public class UpdateSnapshotViewActionTest { assertThat(tableArg.getValue().getView().getQuery()) .isEqualTo("SELECT * FROM [some_dataset.12345_fookind]"); } + + @Test + public void testFailure_bigqueryConnectionThrowsError() throws Exception { + when(bigqueryTables.update(anyString(), anyString(), anyString(), any(Table.class))) + .thenThrow(new IOException("I'm sorry Dave, I can't let you do that")); + thrown.expect(InternalServerErrorException.class, "Error in update snapshot view action"); + action.run(); + } }