use of com.github.dockerjava.api.async.ResultCallback in project dockerunit by qzagarese.
the class DefaultServiceBuilder method pullImage.
private CompletableFuture<Void> pullImage(CreateContainerCmd cmd, DockerClient client) {
PullImageCmd pullImageCmd = client.pullImageCmd(cmd.getImage());
CompletableFuture<Void> pullFut = new CompletableFuture<Void>();
ResultCallback<PullResponseItem> resultCallback = new ResultCallback<PullResponseItem>() {
private Closeable closeable;
@Override
public void close() throws IOException {
try {
closeable.close();
} catch (IOException e) {
throw new RuntimeException("Cannot close closeable " + closeable, e);
}
}
@Override
public void onStart(Closeable closeable) {
this.closeable = closeable;
}
@Override
public void onNext(PullResponseItem object) {
if (object.getId() != null) {
logger.info("Pulling image " + object.getId() + "...");
}
}
@Override
public void onError(Throwable throwable) {
pullFut.completeExceptionally(new RuntimeException("Failed pulling image " + cmd.getImage(), throwable));
}
@Override
public void onComplete() {
pullFut.complete(null);
}
};
pullImageCmd.exec(resultCallback);
return pullFut;
}
use of com.github.dockerjava.api.async.ResultCallback in project vespa by vespa-engine.
the class DockerImplTest method pullImageAsyncIfNeededSuccessfully.
@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
public void pullImageAsyncIfNeededSuccessfully() {
final DockerImage image = new DockerImage("test:1.2.3");
InspectImageResponse inspectImageResponse = mock(InspectImageResponse.class);
when(inspectImageResponse.getId()).thenReturn(image.asString());
InspectImageCmd imageInspectCmd = mock(InspectImageCmd.class);
when(imageInspectCmd.exec()).thenThrow(new NotFoundException("Image not found")).thenReturn(inspectImageResponse);
// Array to make it final
ArgumentCaptor<ResultCallback> resultCallback = ArgumentCaptor.forClass(ResultCallback.class);
PullImageCmd pullImageCmd = mock(PullImageCmd.class);
when(pullImageCmd.exec(resultCallback.capture())).thenReturn(null);
final DockerClient dockerClient = mock(DockerClient.class);
when(dockerClient.inspectImageCmd(image.asString())).thenReturn(imageInspectCmd);
when(dockerClient.pullImageCmd(eq(image.asString()))).thenReturn(pullImageCmd);
final DockerImpl docker = new DockerImpl(dockerClient);
docker.setMetrics(new MetricReceiverWrapper(MetricReceiver.nullImplementation));
assertTrue("Should return true, we just scheduled the pull", docker.pullImageAsyncIfNeeded(image));
assertTrue("Should return true, the pull i still ongoing", docker.pullImageAsyncIfNeeded(image));
assertTrue(docker.imageIsDownloaded(image));
resultCallback.getValue().onComplete();
assertFalse(docker.pullImageAsyncIfNeeded(image));
}
use of com.github.dockerjava.api.async.ResultCallback in project vespa by vespa-engine.
the class DockerImplTest method pullImageAsyncIfNeededWithError.
@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
public void pullImageAsyncIfNeededWithError() {
final DockerImage image = new DockerImage("test:1.2.3");
InspectImageCmd imageInspectCmd = mock(InspectImageCmd.class);
when(imageInspectCmd.exec()).thenThrow(new NotFoundException("Image not found"));
// Array to make it final
ArgumentCaptor<ResultCallback> resultCallback = ArgumentCaptor.forClass(ResultCallback.class);
PullImageCmd pullImageCmd = mock(PullImageCmd.class);
when(pullImageCmd.exec(resultCallback.capture())).thenReturn(null);
final DockerClient dockerClient = mock(DockerClient.class);
when(dockerClient.inspectImageCmd(image.asString())).thenReturn(imageInspectCmd);
when(dockerClient.pullImageCmd(eq(image.asString()))).thenReturn(pullImageCmd);
final DockerImpl docker = new DockerImpl(dockerClient);
docker.setMetrics(new MetricReceiverWrapper(MetricReceiver.nullImplementation));
assertTrue("Should return true, we just scheduled the pull", docker.pullImageAsyncIfNeeded(image));
assertTrue("Should return true, the pull i still ongoing", docker.pullImageAsyncIfNeeded(image));
try {
resultCallback.getValue().onComplete();
} catch (Exception ignored) {
}
assertFalse(docker.imageIsDownloaded(image));
assertTrue("Should return true, new pull scheduled", docker.pullImageAsyncIfNeeded(image));
}
Aggregations