package com.dgrid.test;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import com.dgrid.errors.TransportException;
import com.dgrid.gen.InvalidApiKey;
import com.dgrid.gen.InvalidHost;
import com.dgrid.gen.Joblet;
import com.dgrid.gen.NoWorkAvailable;
import com.dgrid.helpers.ForkJoinHelper;
import com.dgrid.service.DGridClient;
public class MemoryLeakTest extends BaseTestCase {
public void testCauseMemoryLeak() throws Exception {
DGridClient gridClient = (DGridClient) super.getBean(DGridClient.NAME);
ForkJoinHelper fj = (ForkJoinHelper) super.getBean(ForkJoinHelper.NAME);
List<Callable> tasks = new ArrayList<Callable>();
for (int i = 0; i < 5; ++i) {
GetWork gw = new GetWork(gridClient);
tasks.add(gw);
}
fj.executeConcurrently(tasks, 2);
}
private static class GetWork implements Callable {
private DGridClient gridClient;
public GetWork(DGridClient gridClient) {
this.gridClient = gridClient;
}
public Object call() {
Joblet joblet = null;
for (int i = 0; i < 300; ++i) {
try {
joblet = gridClient.getWork();
throw new RuntimeException("Work should not be available!");
} catch(NoWorkAvailable e) {
} catch (TransportException e) {
throw new RuntimeException(e);
} catch (InvalidApiKey e) {
throw new RuntimeException(e);
} catch (InvalidHost e) {
throw new RuntimeException(e);
}
}
return joblet;
}
}
}