From bad96fe11868329eabdc9460d7aa3f84fa2536ae Mon Sep 17 00:00:00 2001 From: David Kocher Date: Wed, 1 Oct 2025 15:25:02 +0200 Subject: [PATCH] Return custom comparison service for checksum. --- .../cyberduck/core/googledrive/DriveProtocol.java | 13 +++++++++++++ .../core/googledrive/DriveMoveFeatureTest.java | 9 +++++++-- .../core/googledrive/DriveWriteFeatureTest.java | 3 +++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/googledrive/src/main/java/ch/cyberduck/core/googledrive/DriveProtocol.java b/googledrive/src/main/java/ch/cyberduck/core/googledrive/DriveProtocol.java index b756770b82..615d4586ee 100644 --- a/googledrive/src/main/java/ch/cyberduck/core/googledrive/DriveProtocol.java +++ b/googledrive/src/main/java/ch/cyberduck/core/googledrive/DriveProtocol.java @@ -19,6 +19,9 @@ import ch.cyberduck.core.AbstractProtocol; import ch.cyberduck.core.LocaleFactory; import ch.cyberduck.core.Protocol; import ch.cyberduck.core.Scheme; +import ch.cyberduck.core.synchronization.ChecksumComparisonService; +import ch.cyberduck.core.synchronization.ComparisonService; +import ch.cyberduck.core.synchronization.DefaultComparisonService; import com.google.auto.service.AutoService; @@ -85,4 +88,14 @@ public class DriveProtocol extends AbstractProtocol { public VersioningMode getVersioningMode() { return VersioningMode.storage; } + + + @Override + @SuppressWarnings("unchecked") + public T getFeature(final Class type) { + if(type == ComparisonService.class) { + return (T) new DefaultComparisonService(new ChecksumComparisonService(), ComparisonService.disabled); + } + return super.getFeature(type); + } } diff --git a/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveMoveFeatureTest.java b/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveMoveFeatureTest.java index 4bffa88f0a..c8a1420148 100644 --- a/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveMoveFeatureTest.java +++ b/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveMoveFeatureTest.java @@ -58,14 +58,19 @@ public class DriveMoveFeatureTest extends AbstractDriveTest { final DriveFileIdProvider fileid = new DriveFileIdProvider(session); final Path test = new DriveTouchFeature(session, fileid).touch(new DriveWriteFeature(session, fileid), new Path(DriveHomeFinderService.MYDRIVE_FOLDER, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus()); final String id = test.attributes().getFileId(); - final Path folder = new Path(DriveHomeFinderService.MYDRIVE_FOLDER, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)); - new DriveDirectoryFeature(session, fileid).mkdir(new DriveWriteFeature(session, fileid), folder, new TransferStatus()); + final Path folder = new DriveDirectoryFeature(session, fileid).mkdir(new DriveWriteFeature(session, fileid), + new Path(DriveHomeFinderService.MYDRIVE_FOLDER, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.directory)), new TransferStatus()); + assertEquals(folder.attributes(), new DriveAttributesFinderFeature(session, fileid).find(folder)); final Path target = new DriveMoveFeature(session, fileid).move(test, new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)), new TransferStatus(), new Delete.DisabledCallback(), new DisabledConnectionCallback()); assertEquals(id, target.attributes().getFileId()); + assertEquals(test.attributes().getChecksum(), target.attributes().getChecksum()); + assertNotEquals(test.attributes().getModificationDate(), target.attributes().getModificationDate()); final Find find = new DefaultFindFeature(session); assertFalse(find.find(test)); assertTrue(find.find(target)); + assertEquals(folder.attributes(), new DriveAttributesFinderFeature(session, fileid).find(folder)); final PathAttributes targetAttr = new DriveAttributesFinderFeature(session, fileid).find(target); + assertEquals(target.attributes(), targetAttr); assertEquals(Comparison.equal, session.getHost().getProtocol().getFeature(ComparisonService.class).compare(Path.Type.file, test.attributes(), targetAttr)); new DriveDeleteFeature(session, fileid).delete(Arrays.asList(target, folder), new DisabledLoginCallback(), new Delete.DisabledCallback()); } diff --git a/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveWriteFeatureTest.java b/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveWriteFeatureTest.java index ab3d05277f..acccc520ed 100644 --- a/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveWriteFeatureTest.java +++ b/googledrive/src/test/java/ch/cyberduck/core/googledrive/DriveWriteFeatureTest.java @@ -55,6 +55,8 @@ public class DriveWriteFeatureTest extends AbstractDriveTest { final DriveFileIdProvider idProvider = new DriveFileIdProvider(session); final Path folder = new DriveDirectoryFeature(session, idProvider).mkdir( new DriveWriteFeature(session, idProvider), new Path(DriveHomeFinderService.MYDRIVE_FOLDER, UUID.randomUUID().toString(), EnumSet.of(Path.Type.directory)), new TransferStatus()); + final PathAttributes folderAttributes = new DriveAttributesFinderFeature(session, idProvider).find(folder); + assertEquals(folderAttributes, folder.attributes()); final Path test = new Path(folder, new AlphanumericRandomStringService().random(), EnumSet.of(Path.Type.file)); String fileid; { @@ -83,6 +85,7 @@ public class DriveWriteFeatureTest extends AbstractDriveTest { assertArrayEquals(content, buffer); assertEquals("x-application/cyberduck", session.getClient().files().get(test.attributes().getFileId()).execute().getMimeType()); } + assertEquals(folderAttributes, new DriveAttributesFinderFeature(session, idProvider).find(folder)); { // overwrite final TransferStatus status = new TransferStatus();