Skip to content

Commit b529731

Browse files
authored
Merge pull request #502 from RachelTucker/JSDK-256
JSDK-256: Tests for zero length objects and moved put file to helpers
2 parents 6de2907 + ab2f88a commit b529731

File tree

11 files changed

+104
-172
lines changed

11 files changed

+104
-172
lines changed

ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/helpers/FileSystemHelper_Test.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.spectralogic.ds3client.helpers;
1717

1818
import com.spectralogic.ds3client.Ds3Client;
19-
import com.spectralogic.ds3client.commands.decorators.PutFolderResponse;
2019
import com.spectralogic.ds3client.helpers.events.SameThreadEventRunner;
2120
import com.spectralogic.ds3client.integration.Util;
2221
import com.spectralogic.ds3client.integration.test.helpers.TempStorageIds;
@@ -317,8 +316,7 @@ public void createFolderWithSlash() throws IOException {
317316
final String folderName = "FolderNameWithSlash/";
318317

319318
try {
320-
final PutFolderResponse response = HELPERS.createFolder(BUCKET_NAME, folderName);
321-
assertNotNull(response);
319+
HELPERS.createFolder(BUCKET_NAME, folderName);
322320
} finally {
323321
deleteAllContents(client, BUCKET_NAME);
324322
}
@@ -329,8 +327,7 @@ public void createFolderWithNoSlash() throws IOException {
329327
final String folderName = "FolderNameNoSlash";
330328

331329
try {
332-
final PutFolderResponse response = HELPERS.createFolder(BUCKET_NAME, folderName);
333-
assertNotNull(response);
330+
HELPERS.createFolder(BUCKET_NAME, folderName);
334331
} finally {
335332
deleteAllContents(client, BUCKET_NAME);
336333
}

ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java

Lines changed: 84 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
package com.spectralogic.ds3client.integration;
1717

18+
import com.google.common.collect.ImmutableList;
1819
import com.google.common.collect.ImmutableMap;
1920
import com.google.common.collect.Lists;
2021
import com.spectralogic.ds3client.Ds3Client;
@@ -24,50 +25,31 @@
2425
import com.spectralogic.ds3client.commands.spectrads3.*;
2526
import com.spectralogic.ds3client.commands.spectrads3.notifications.*;
2627
import com.spectralogic.ds3client.exceptions.Ds3NoMoreRetriesException;
27-
import com.spectralogic.ds3client.helpers.ChecksumFunction;
28-
import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
29-
import com.spectralogic.ds3client.helpers.FailureEventListener;
30-
import com.spectralogic.ds3client.helpers.FileObjectGetter;
31-
import com.spectralogic.ds3client.helpers.FileObjectPutter;
32-
import com.spectralogic.ds3client.helpers.JobPart;
33-
import com.spectralogic.ds3client.helpers.ObjectCompletedListener;
28+
import com.spectralogic.ds3client.helpers.*;
3429
import com.spectralogic.ds3client.helpers.events.FailureEvent;
3530
import com.spectralogic.ds3client.helpers.events.SameThreadEventRunner;
3631
import com.spectralogic.ds3client.helpers.options.WriteJobOptions;
37-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.BlobStrategy;
38-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.ChunkAttemptRetryBehavior;
39-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.ChunkAttemptRetryDelayBehavior;
40-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.ClientDefinedChunkAttemptRetryDelayBehavior;
41-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.MaxChunkAttemptsRetryBehavior;
42-
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.PutSequentialBlobStrategy;
32+
import com.spectralogic.ds3client.helpers.strategy.blobstrategy.*;
4333
import com.spectralogic.ds3client.helpers.strategy.channelstrategy.ChannelStrategy;
4434
import com.spectralogic.ds3client.helpers.strategy.channelstrategy.SequentialFileReaderChannelStrategy;
45-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.EventDispatcher;
46-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.EventDispatcherImpl;
47-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.MaxNumObjectTransferAttemptsDecorator;
48-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.TransferMethod;
49-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.TransferRetryDecorator;
50-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.TransferStrategy;
51-
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.TransferStrategyBuilder;
52-
import com.spectralogic.ds3client.integration.test.helpers.ABMTestHelper;
53-
import com.spectralogic.ds3client.integration.test.helpers.Ds3ClientShimFactory;
54-
import com.spectralogic.ds3client.integration.test.helpers.TempStorageIds;
55-
import com.spectralogic.ds3client.integration.test.helpers.TempStorageUtil;
35+
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.*;
36+
import com.spectralogic.ds3client.integration.test.helpers.*;
37+
import com.spectralogic.ds3client.integration.test.helpers.Ds3ClientShimFactory.ClientFailureType;
5638
import com.spectralogic.ds3client.metadata.MetadataAccessImpl;
5739
import com.spectralogic.ds3client.models.*;
40+
import com.spectralogic.ds3client.models.Objects;
5841
import com.spectralogic.ds3client.models.bulk.Ds3Object;
5942
import com.spectralogic.ds3client.networking.FailedRequestException;
6043
import com.spectralogic.ds3client.utils.ByteArraySeekableByteChannel;
6144
import com.spectralogic.ds3client.utils.Platform;
6245
import com.spectralogic.ds3client.utils.ResourceUtils;
63-
64-
import com.spectralogic.ds3client.integration.test.helpers.Ds3ClientShimFactory.ClientFailureType;
65-
6646
import com.spectralogic.ds3client.utils.hashing.ChecksumUtils;
6747
import com.spectralogic.ds3client.utils.hashing.Hasher;
6848
import org.apache.commons.io.FileUtils;
6949
import org.apache.commons.io.IOUtils;
7050
import org.junit.*;
51+
import org.slf4j.Logger;
52+
import org.slf4j.LoggerFactory;
7153

7254
import java.io.BufferedInputStream;
7355
import java.io.File;
@@ -83,26 +65,15 @@
8365
import java.nio.file.NoSuchFileException;
8466
import java.nio.file.Path;
8567
import java.nio.file.Paths;
86-
import java.util.ArrayList;
87-
import java.util.Arrays;
88-
import java.util.Date;
89-
import java.util.List;
90-
import java.util.UUID;
68+
import java.util.*;
9169
import java.util.concurrent.atomic.AtomicBoolean;
9270
import java.util.concurrent.atomic.AtomicInteger;
9371

94-
import com.spectralogic.ds3client.integration.test.helpers.Ds3ClientShim;
95-
9672
import static com.spectralogic.ds3client.integration.Util.RESOURCE_BASE_NAME;
9773
import static com.spectralogic.ds3client.integration.Util.deleteAllContents;
9874
import static org.hamcrest.Matchers.*;
9975
import static org.junit.Assert.*;
10076

101-
import com.spectralogic.ds3client.helpers.*;
102-
103-
import org.slf4j.Logger;
104-
import org.slf4j.LoggerFactory;
105-
10677
public class PutJobManagement_Test {
10778
private static final Logger LOG = LoggerFactory.getLogger(PutJobManagement_Test.class);
10879

@@ -157,6 +128,52 @@ public void nakedS3Put() throws IOException, URISyntaxException {
157128
}
158129
}
159130

131+
@SuppressWarnings("deprecation")
132+
@Test
133+
public void nakedS3PutEmptyFile() throws IOException, URISyntaxException {
134+
try {
135+
final String fileName = "emptyFile.txt";
136+
137+
final ByteArraySeekableByteChannel channel = new ByteArraySeekableByteChannel(0);
138+
final PutObjectResponse putObjectResponse = client.putObject(
139+
new PutObjectRequest(BUCKET_NAME, fileName, channel, 0));
140+
assertThat(putObjectResponse, is(notNullValue()));
141+
142+
final GetBucketResponse request = client.getBucket(new GetBucketRequest(BUCKET_NAME));
143+
final ListBucketResult result = request.getListBucketResult();
144+
145+
assertThat(result.getObjects().size(), is(1));
146+
final Contents contents = result.getObjects().get(0);
147+
assertThat(contents.getKey(), is(fileName));
148+
assertThat(contents.getSize(), is((long) 0));
149+
} finally {
150+
deleteAllContents(client, BUCKET_NAME);
151+
}
152+
}
153+
154+
@SuppressWarnings("deprecation")
155+
@Test
156+
public void nakedS3PutFolder() throws IOException, URISyntaxException {
157+
try {
158+
final String fileName = "NakedS3Folder/";
159+
160+
final ByteArraySeekableByteChannel channel = new ByteArraySeekableByteChannel(0);
161+
final PutObjectResponse putObjectResponse = client.putObject(
162+
new PutObjectRequest(BUCKET_NAME, fileName, channel, 0));
163+
164+
assertThat(putObjectResponse, is(notNullValue()));
165+
final GetBucketResponse request = client.getBucket(new GetBucketRequest(BUCKET_NAME));
166+
final ListBucketResult result = request.getListBucketResult();
167+
assertThat(result.getObjects().size(), is(1));
168+
169+
final Contents contents = result.getObjects().get(0);
170+
assertThat(contents.getKey(), is(fileName));
171+
assertThat(contents.getSize(), is((long) 0));
172+
} finally {
173+
deleteAllContents(client, BUCKET_NAME);
174+
}
175+
}
176+
160177
@Test
161178
public void getActiveJobs() throws IOException, URISyntaxException {
162179
try {
@@ -1102,6 +1119,34 @@ private interface ObjectTransferExceptionHandler {
11021119
boolean handleException(final Throwable t);
11031120
}
11041121

1122+
@Test
1123+
public void testWriteJobWithZeroLengthObject() throws Exception {
1124+
final Path tempDirectory = Files.createTempDirectory(Paths.get("."), null);
1125+
final Path tempFile = Files.createTempFile(tempDirectory, "EmptyFile", null);
1126+
final String fileName = tempFile.getFileName().toString();
1127+
1128+
try {
1129+
final Ds3ClientHelpers ds3ClientHelpers = Ds3ClientHelpers.wrap(client);
1130+
1131+
final ImmutableList<Ds3Object> objects = ImmutableList.of(new Ds3Object(fileName, 0));
1132+
1133+
final Ds3ClientHelpers.Job writeJob = ds3ClientHelpers.startWriteJob(BUCKET_NAME, objects);
1134+
writeJob.transfer(new FileObjectPutter(tempDirectory));
1135+
1136+
final GetBucketResponse request = client.getBucket(new GetBucketRequest(BUCKET_NAME));
1137+
final ListBucketResult result = request.getListBucketResult();
1138+
assertThat(result.getObjects().size(), is(1));
1139+
1140+
final Contents contents = result.getObjects().get(0);
1141+
assertThat(contents.getKey(), is(fileName));
1142+
assertThat(contents.getSize(), is((long) 0));
1143+
1144+
} finally {
1145+
FileUtils.deleteDirectory(tempDirectory.toFile());
1146+
deleteAllContents(client, BUCKET_NAME);
1147+
}
1148+
}
1149+
11051150
@Test
11061151
public void testWriteJobWithRetriesAndUserDefinedChecksum() throws Exception {
11071152
final int maxNumObjectTransferAttempts = 3;

ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/Smoke_Test.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@
1515

1616
package com.spectralogic.ds3client.integration;
1717

18-
import com.google.common.collect.ImmutableList;
1918
import com.google.common.collect.ImmutableMap;
2019
import com.google.common.collect.Iterables;
2120
import com.google.common.collect.Lists;
2221
import com.spectralogic.ds3client.Ds3Client;
2322
import com.spectralogic.ds3client.commands.*;
24-
import com.spectralogic.ds3client.commands.decorators.PutFolderRequest;
25-
import com.spectralogic.ds3client.commands.decorators.PutFolderResponse;
2623
import com.spectralogic.ds3client.commands.interfaces.BulkResponse;
2724
import com.spectralogic.ds3client.commands.spectrads3.*;
2825
import com.spectralogic.ds3client.helpers.*;
@@ -1657,23 +1654,6 @@ public void testGetObjectsWithFullDetails() throws IOException, URISyntaxExcepti
16571654
}
16581655
}
16591656

1660-
@Test
1661-
public void createFolderWithSlash() throws IOException {
1662-
final String folderName = "FolderNameWithSlash/";
1663-
final String bucketName = "FolderNameWithSlashTestBucket";
1664-
1665-
try {
1666-
HELPERS.ensureBucketExists(bucketName, envDataPolicyId);
1667-
final Ds3Object ds3Object = new Ds3Object(folderName, 0);
1668-
final PutBulkJobSpectraS3Response jobResponse = client.putBulkJobSpectraS3(new PutBulkJobSpectraS3Request(bucketName, ImmutableList.of(ds3Object)));
1669-
1670-
final PutFolderResponse response = client.putFolder(new PutFolderRequest(bucketName, folderName, jobResponse.getMasterObjectList().getJobId()));
1671-
assertNotNull(response);
1672-
} finally {
1673-
deleteAllContents(client, bucketName);
1674-
}
1675-
}
1676-
16771657
@Test
16781658
public void getBlobsOnTape() throws IOException {
16791659
final GetTapesSpectraS3Response getTapes = client.getTapesSpectraS3(new GetTapesSpectraS3Request());

ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3Client.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import com.spectralogic.ds3client.annotations.Resource;
2121
import com.spectralogic.ds3client.annotations.ResponsePayloadModel;
2222
import com.spectralogic.ds3client.commands.*;
23-
import com.spectralogic.ds3client.commands.decorators.PutFolderRequest;
24-
import com.spectralogic.ds3client.commands.decorators.PutFolderResponse;
2523
import com.spectralogic.ds3client.commands.spectrads3.*;
2624
import com.spectralogic.ds3client.commands.spectrads3.notifications.*;
2725
import com.spectralogic.ds3client.models.JobNode;
@@ -36,10 +34,6 @@
3634
public interface Ds3Client extends Closeable {
3735

3836
ConnectionDetails getConnectionDetails();
39-
40-
PutFolderResponse putFolder(final PutFolderRequest request)
41-
throws IOException;
42-
4337

4438

4539
AbortMultiPartUploadResponse abortMultiPartUpload(final AbortMultiPartUploadRequest request)

ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientImpl.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
import java.io.IOException;
2020
import com.spectralogic.ds3client.commands.*;
21-
import com.spectralogic.ds3client.commands.decorators.PutFolderRequest;
22-
import com.spectralogic.ds3client.commands.decorators.PutFolderResponse;
2321
import com.spectralogic.ds3client.commands.parsers.*;
2422
import com.spectralogic.ds3client.commands.spectrads3.*;
2523
import com.spectralogic.ds3client.commands.spectrads3.notifications.*;
@@ -47,12 +45,6 @@ public ConnectionDetails getConnectionDetails() {
4745
return this.netClient.getConnectionDetails();
4846
}
4947

50-
@Override
51-
public PutFolderResponse putFolder(final PutFolderRequest request) throws IOException {
52-
final PutObjectResponse response = putObject(request.getPutObjectRequest());
53-
return new PutFolderResponse(response);
54-
}
55-
5648
@Override
5749
public AbortMultiPartUploadResponse abortMultiPartUpload(final AbortMultiPartUploadRequest request) throws IOException {
5850
return new AbortMultiPartUploadResponseParser().response(this.netClient.getResponse(request));

ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/decorators/PutFolderRequest.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/decorators/PutFolderResponse.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/Ds3ClientHelpers.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
import com.google.common.base.Function;
1919
import com.google.common.collect.FluentIterable;
2020
import com.spectralogic.ds3client.Ds3Client;
21-
import com.spectralogic.ds3client.commands.decorators.PutFolderResponse;
2221
import com.spectralogic.ds3client.helpers.options.ReadJobOptions;
2322
import com.spectralogic.ds3client.helpers.options.WriteJobOptions;
23+
import com.spectralogic.ds3client.helpers.pagination.FileSystemKey;
2424
import com.spectralogic.ds3client.helpers.strategy.transferstrategy.TransferStrategy;
2525
import com.spectralogic.ds3client.models.Contents;
26-
import com.spectralogic.ds3client.helpers.pagination.FileSystemKey;
2726
import com.spectralogic.ds3client.models.bulk.Ds3Object;
2827
import com.spectralogic.ds3client.utils.Predicate;
2928

@@ -585,5 +584,5 @@ public abstract ObjectStorageSpaceVerificationResult objectsFromBucketWillFitInD
585584
/**
586585
* Creates a folder in the specified bucket
587586
*/
588-
public abstract PutFolderResponse createFolder(final String bucketName, final String folderName) throws IOException;
587+
public abstract void createFolder(final String bucketName, final String folderName) throws IOException;
589588
}

0 commit comments

Comments
 (0)