3

I have a scenario where i need to test async method. I have XML based configuration and is looks like below

<task:annotation-driven executor="myExecutor"
        scheduler="myScheduler" />
    <task:executor id="myExecutor" pool-size="5" />
    <task:scheduler id="myScheduler" pool-size="10" />

Original Async method in controller as below

@Async
    public Future<ResponseEntity<?>> saveData(@RequestParam("file") MultipartFile file) {
        byte[] gzipContents = null;
        try {
            gzipContents = file.getBytes();
        } catch (IOException ioEx) {
        }
        if (gzipContents != null) {
            FileDTO fileDTO = new FileDTO(gzipContents);
            boolean response = storingService.processData(fileDTO);
            return new AsyncResult(new ResponseEntity<>(new ApiResponse<Boolean>(response, true), HttpStatus.OK));
        }
        return new AsyncResult(new ResponseEntity<>(new ApiResponse<Boolean>(false, true), HttpStatus.OK));

    }

And my test case looks as below.

@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class TestSave extends BaseIntegrationTest {

        @Test
        public void testTrackingDataSave() throws Exception {
            // setup
            MvcResult mvcResult = this.mockMvc
                    .perform(MockMvcRequestBuilders.fileUpload(API_TESTER_SAVETRACKINGDATA)
                            .file("file", readFileBytesFromClasspath("testdata/output_sample1.txt"))
                            .header("certificate", testerCertificate))
                    .andExpect(request().asyncStarted()).andReturn();

            this.mockMvc.perform(asyncDispatch(mvcResult)).andExpect(status().isOk())
                    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
                    .andExpect(status().is(200));
    }}

When u run this test i am getting exception as async started expected as true but false.

How do need to proceed to fix this problem. Am i missing something..?

Nat Ritmeyer
  • 5,634
  • 8
  • 45
  • 58
EagerToLearn
  • 89
  • 12
  • Could be either you are getting 404 or 400 when doing your request, I had the same issue and to find out the problem debugged the returned value of `perform(...)`. Check the status code returned first and then debug the line to get the causing exception. – higuaro Nov 14 '16 at 17:08
  • @swamybabun could you be able to solve this problem? – Spring Mar 22 '18 at 13:36
  • No, I couldn't solve it. – EagerToLearn Mar 25 '18 at 05:53

0 Answers0