Skip to content

Commit de6bcb1

Browse files
authored
IBM COS & S3: Exists Directory fixes and improvements + UnitTest (#512)
1 parent d2c920b commit de6bcb1

File tree

4 files changed

+30
-42
lines changed

4 files changed

+30
-42
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ target/
2020
*.xlsx
2121

2222
PublicTempStorage/
23-
PrivateTempStorage/
23+
PrivateTempStorage/
24+
gxexternalproviders/resources/

gxexternalproviders/src/main/java/com/genexus/db/driver/ExternalProviderIBM.java

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -275,25 +275,12 @@ public String getDirectory(String directoryName) {
275275
}
276276

277277
public boolean existsDirectory(String directoryName) {
278-
directoryName = StorageUtils.normalizeDirectoryName(directoryName);
279-
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
280-
.withBucketName(bucket).withDelimiter(StorageUtils.DELIMITER);
281-
List<String> directories = new ArrayList<String>();
282-
for (String prefix : client.listObjects(listObjectsRequest).getCommonPrefixes()) {
283-
directories.add(prefix);
284-
getAllDirectories(prefix, directories);
285-
}
286-
return directories.contains(directoryName);
287-
}
288-
289-
public void getAllDirectories(String directoryName, List<String> directories) {
290-
directoryName = StorageUtils.normalizeDirectoryName(directoryName);
291-
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
292-
.withBucketName(bucket).withPrefix(directoryName).withDelimiter(StorageUtils.DELIMITER);
293-
for (String prefix : client.listObjects(listObjectsRequest).getCommonPrefixes()) {
294-
directories.add(prefix);
295-
getAllDirectories(prefix, directories);
296-
}
278+
ListObjectsV2Request listObjectsRequest = new ListObjectsV2Request()
279+
.withBucketName(bucket)
280+
.withDelimiter(StorageUtils.DELIMITER)
281+
.withPrefix(StorageUtils.normalizeDirectoryName(directoryName))
282+
.withMaxKeys(1);
283+
return client.listObjectsV2(listObjectsRequest).getKeyCount() > 0;
297284
}
298285

299286
public void createDirectory(String directoryName) {

gxexternalproviders/src/main/java/com/genexus/db/driver/ExternalProviderS3.java

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -328,27 +328,14 @@ public String getDirectory(String directoryName) {
328328
}
329329
}
330330

331-
public boolean existsDirectory(String directoryName) {
332-
directoryName = StorageUtils.normalizeDirectoryName(directoryName);
333-
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
334-
.withBucketName(bucket).withDelimiter(StorageUtils.DELIMITER);
335-
List<String> directories = new ArrayList<String>();
336-
for (String prefix : client.listObjects(listObjectsRequest).getCommonPrefixes()) {
337-
directories.add(prefix);
338-
getAllDirectories(prefix, directories);
339-
}
340-
return directories.contains(directoryName);
341-
}
342-
343-
public void getAllDirectories(String directoryName, List<String> directories) {
344-
directoryName = StorageUtils.normalizeDirectoryName(directoryName);
345-
ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
346-
.withBucketName(bucket).withPrefix(directoryName).withDelimiter(StorageUtils.DELIMITER);
347-
for (String prefix : client.listObjects(listObjectsRequest).getCommonPrefixes()) {
348-
directories.add(prefix);
349-
getAllDirectories(prefix, directories);
350-
}
351-
}
331+
public boolean existsDirectory(String directoryName) {
332+
ListObjectsV2Request listObjectsRequest = new ListObjectsV2Request()
333+
.withBucketName(bucket)
334+
.withDelimiter(StorageUtils.DELIMITER)
335+
.withPrefix(StorageUtils.normalizeDirectoryName(directoryName))
336+
.withMaxKeys(1);
337+
return client.listObjectsV2(listObjectsRequest).getKeyCount() > 0;
338+
}
352339

353340
public void createDirectory(String directoryName) {
354341
ensureFolder(directoryName);

gxexternalproviders/src/test/java/com/genexus/db/driver/TestExternalProvider.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void beforeEachTestMethod() {
5353
assertTrue(provider != null);
5454

5555

56-
uniqueId = Integer.toString(new Random().nextInt(10000));
56+
uniqueId = Integer.toString(new Random().nextInt(5000));
5757
testSampleFileName = String.format("text-%s.txt", uniqueId);
5858
testSampleFilePath = Paths.get("resources", testSampleFileName).toString();
5959

@@ -136,6 +136,19 @@ public void testCopyMethod(){
136136
copy(copyFileName, ResourceAccessControlList.PublicRead);
137137
}
138138

139+
@Test
140+
public void testExistsDirectory(){
141+
String copyFileName = buildRandomTextFileName("tempFolder/f1/f2/test-upload-and-copy");
142+
String upload = provider.upload(testSampleFilePath, copyFileName, ResourceAccessControlList.Default);
143+
assertTrue("Not found URL: " + upload, urlExists(upload));
144+
String folder = "tempFolder";
145+
boolean existsDir = provider.existsDirectory(folder);
146+
assertTrue("Directory does not exists " + folder + " - " + upload, existsDir);
147+
String folderNotExists = "tempFolderNotExists";
148+
existsDir = provider.existsDirectory(folder);
149+
assertTrue("Directory does not exists " + folderNotExists, existsDir);
150+
}
151+
139152
@Test
140153
public void testCopyPrivateMethod(){
141154
String copyFileName = buildRandomTextFileName("copy-text-private");

0 commit comments

Comments
 (0)