Skip to content

Commit 1223cbd

Browse files
author
Julian Kast
committed
Fixed testMultipleFileUploadPartialFailure()
1 parent b347dba commit 1223cbd

1 file changed

Lines changed: 64 additions & 69 deletions

File tree

android/sdl_android/src/androidTest/java/com/smartdevicelink/managers/file/FileManagerTests.java

Lines changed: 64 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,39 @@ public Void answer(InvocationOnMock invocation) {
242242
}
243243
};
244244

245+
/**
246+
* Flips between calling onError and onResponse.
247+
* simulating uploading files, with some failing to upload
248+
*/
249+
private Answer<Void> onSendRequestsFailPartialOnError = new Answer<Void>() {
250+
@Override
251+
public Void answer(InvocationOnMock invocation) throws Throwable {
252+
Object[] args = invocation.getArguments();
253+
List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
254+
OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
255+
if (rpcs.get(0) instanceof PutFile) {
256+
Result resultCode = Result.REJECTED;
257+
boolean flip = false;
258+
for (RPCRequest message : rpcs) {
259+
int correlationId = message.getCorrelationID();
260+
listener.addCorrelationId(correlationId);
261+
PutFileResponse putFileResponse = new PutFileResponse();
262+
if (flip) {
263+
putFileResponse.setSuccess(true);
264+
flip = false;
265+
listener.onResponse(correlationId, putFileResponse);
266+
} else {
267+
flip = true;
268+
putFileResponse.setSuccess(false);
269+
listener.onError(correlationId, resultCode, "Binary data empty");
270+
}
271+
}
272+
listener.onFinished();
273+
}
274+
return null;
275+
}
276+
};
277+
245278
// TESTS
246279

247280
/**
@@ -733,90 +766,52 @@ public void onComplete(Map<String, String> errors) {
733766
});
734767
}
735768

736-
public void testMultipleFileUploadPartialFailure(){
737-
final String failureReason = "No space available";
738-
769+
/**
770+
* Testing uploading multiple files with some failing.
771+
*/
772+
public void testMultipleFileUploadPartialFailure() {
739773
ISdl internalInterface = mock(ISdl.class);
740774

741-
doAnswer(onListFilesSuccess).when(internalInterface).sendRPCRequest(any(ListFiles.class));
775+
doAnswer(onListFilesSuccess).when(internalInterface).sendRPC(any(ListFiles.class));
776+
doAnswer(onSendRequestsFailPartialOnError).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
742777

743-
Answer<Void> onSendRequestsFailure = new Answer<Void>() {
744-
private int responseNum = 0;
745-
@Override
746-
public Void answer(InvocationOnMock invocation) {
747-
Object[] args = invocation.getArguments();
748-
List<RPCRequest> rpcs = (List<RPCRequest>) args[0];
749-
OnMultipleRequestListener listener = (OnMultipleRequestListener) args[1];
750-
if(rpcs.get(0) instanceof PutFile){
751-
for(RPCRequest message : rpcs){
752-
int correlationId = message.getCorrelationID();
753-
listener.addCorrelationId(correlationId);
754-
PutFileResponse putFileResponse = new PutFileResponse();
755-
if(responseNum++ % 2 == 0){
756-
listener.onError(correlationId, Result.OUT_OF_MEMORY, failureReason);
757-
}else{
758-
putFileResponse.setSuccess(true);
759-
listener.onResponse(correlationId, putFileResponse);
760-
}
761-
}
762-
}
763-
return null;
764-
}
765-
};
766-
doAnswer(onSendRequestsFailure).when(internalInterface).sendRequests(any(List.class), any(OnMultipleRequestListener.class));
778+
SdlFile validFile2 = new SdlFile();
779+
validFile2.setName(Test.GENERAL_STRING + "2");
780+
validFile2.setFileData(Test.GENERAL_BYTE_ARRAY);
781+
validFile2.setPersistent(false);
782+
validFile2.setType(FileType.GRAPHIC_JPEG);
767783

768-
final FileManager fileManager = new FileManager(internalInterface, mTestContext);
769-
fileManager.start(new CompletionListener() {
770-
@Override
771-
public void onComplete(boolean success) {
772-
assertTrue(success);
773-
final String baseFileName = "file";
774-
int fileNum = 0;
775-
final List<SdlFile> filesToUpload = new ArrayList<>();
776-
SdlFile sdlFile = new SdlFile();
777-
sdlFile.setName(baseFileName + fileNum++);
778-
Uri uri = Uri.parse("android.resource://" + mTestContext.getPackageName() + "/drawable/ic_sdl");
779-
sdlFile.setUri(uri);
780-
filesToUpload.add(sdlFile);
784+
SdlFile validFile3 = new SdlFile();
785+
validFile3.setName(Test.GENERAL_STRING + "3");
786+
validFile3.setFileData(Test.GENERAL_BYTE_ARRAY);
787+
validFile3.setPersistent(false);
788+
validFile3.setType(FileType.GRAPHIC_JPEG);
781789

782-
sdlFile = new SdlFile();
783-
sdlFile.setName(baseFileName + fileNum++);
784-
sdlFile.setResourceId(com.smartdevicelink.test.R.drawable.ic_sdl);
785-
filesToUpload.add(sdlFile);
790+
validFile.setType(FileType.AUDIO_WAVE);
786791

787-
sdlFile = new SdlFile();
788-
sdlFile.setName(baseFileName + fileNum++);
789-
sdlFile.setFileData(Test.GENERAL_BYTE_ARRAY);
790-
sdlFile.setPersistent(true);
791-
sdlFile.setType(FileType.BINARY);
792-
filesToUpload.add(sdlFile);
792+
final List<SdlFile> filesToUpload = new ArrayList<>();
793+
filesToUpload.add(validFile);
794+
filesToUpload.add(validFile2);
795+
filesToUpload.add(validFile3);
793796

797+
FileManagerConfig fileManagerConfig = new FileManagerConfig();
798+
fileManagerConfig.setArtworkRetryCount(0);
799+
fileManagerConfig.setFileRetryCount(0);
800+
final FileManager fileManager = new FileManager(internalInterface, mTestContext, fileManagerConfig);
801+
fileManager.start(new CompletionListener() {
802+
@Override
803+
public void onComplete(boolean success) {
794804
fileManager.uploadFiles(filesToUpload,
795805
new MultipleFileCompletionListener() {
796806
@Override
797807
public void onComplete(Map<String, String> errors) {
798-
assertNotNull(errors);
799-
for(int i = 0; i < filesToUpload.size(); i++){
800-
if(i % 2 == 0){
801-
assertTrue(errors.containsKey(filesToUpload.get(i).getName()));
802-
assertEquals(FileManager.buildErrorString(Result.OUT_OF_MEMORY,
803-
failureReason), errors.get(filesToUpload.get(i).getName()));
804-
}else{
805-
assertFalse(errors.containsKey(filesToUpload.get(i).getName()));
806-
}
807-
}
808-
List <String> uploadedFileNames = fileManager.getRemoteFileNames();
809-
for(int i = 0; i < filesToUpload.size(); i++){
810-
if(i % 2 == 0){
811-
assertFalse(uploadedFileNames.contains(filesToUpload.get(i).getName()));
812-
}else{
813-
assertTrue(uploadedFileNames.contains(filesToUpload.get(i).getName()));
814-
}
815-
}
808+
assertTrue(errors.size() == 2);
816809
}
817810
});
818811
}
819812
});
813+
assertFalse(fileManager.hasUploadedFile(validFile) && fileManager.hasUploadedFile(validFile3));
814+
assertTrue(fileManager.hasUploadedFile(validFile2));
820815
}
821816

822817
public void testMultipleArtworkUploadSuccess(){

0 commit comments

Comments
 (0)