2 * Copyright (C) The Arvados Authors. All rights reserved.
4 * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
8 package org.arvados.client.logic.keep;
10 import okhttp3.mockwebserver.MockResponse;
12 import org.apache.commons.io.FileUtils;
13 import org.arvados.client.config.FileConfigProvider;
14 import org.arvados.client.config.ConfigProvider;
15 import org.arvados.client.exception.ArvadosClientException;
16 import org.arvados.client.test.utils.ArvadosClientMockedWebServerTest;
17 import org.junit.Assert;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.InjectMocks;
21 import org.mockito.Mock;
22 import org.mockito.junit.MockitoJUnitRunner;
26 import static junit.framework.TestCase.fail;
27 import static org.arvados.client.test.utils.ApiClientTestUtils.getResponse;
28 import static org.assertj.core.api.Assertions.assertThat;
30 @RunWith(MockitoJUnitRunner.class)
31 public class KeepClientTest extends ArvadosClientMockedWebServerTest {
33 private ConfigProvider configProvider = new FileConfigProvider();
34 private static final String TEST_FILE_PATH ="src/test/resources/org/arvados/client/api/client/keep-client-test-file.txt";
37 private KeepClient keepClient = new KeepClient(configProvider);
40 private KeepLocator keepLocator;
43 public void uploadedFile() throws Exception {
45 server.enqueue(getResponse("keep-services-accessible"));
46 server.enqueue(new MockResponse().setBody("0887c78c7d6c1a60ac0b3709a4302ee4"));
49 String actual = keepClient.put(new File(TEST_FILE_PATH), 1, 0);
52 assertThat(actual).isEqualTo("0887c78c7d6c1a60ac0b3709a4302ee4");
56 public void fileIsDownloaded() throws Exception {
58 File data = new File(TEST_FILE_PATH);
59 byte[] fileBytes = FileUtils.readFileToByteArray(data);
62 server.enqueue(getResponse("keep-services-accessible"));
63 server.enqueue(new MockResponse().setBody(new Buffer().write(fileBytes)));
65 byte[] actual = keepClient.getDataChunk(keepLocator);
67 Assert.assertArrayEquals(fileBytes, actual);
71 public void fileIsDownloadedWhenFirstServerDoesNotRespond() throws Exception {
73 File data = new File(TEST_FILE_PATH);
74 byte[] fileBytes = FileUtils.readFileToByteArray(data);
75 server.enqueue(getResponse("keep-services-accessible")); // two servers accessible
76 server.enqueue(new MockResponse().setResponseCode(404)); // first one not responding
77 server.enqueue(new MockResponse().setBody(new Buffer().write(fileBytes))); // second one responding
80 byte[] actual = keepClient.getDataChunk(keepLocator);
83 Assert.assertArrayEquals(fileBytes, actual);
87 public void exceptionIsThrownWhenNoServerResponds() throws Exception {
89 File data = new File(TEST_FILE_PATH);
90 server.enqueue(getResponse("keep-services-accessible")); // two servers accessible
91 server.enqueue(new MockResponse().setResponseCode(404)); // first one not responding
92 server.enqueue(new MockResponse().setResponseCode(404)); // second one not responding
96 keepClient.getDataChunk(keepLocator);
98 } catch (ArvadosClientException e) {
100 Assert.assertEquals("No server responding. Unable to download data chunk.", e.getMessage());
105 public void exceptionIsThrownWhenThereAreNoServersAccessible() throws Exception {
107 server.enqueue(getResponse("keep-services-not-accessible")); // no servers accessible
111 keepClient.getDataChunk(keepLocator);
113 } catch (ArvadosClientException e) {
115 Assert.assertEquals("No gateway services available!", e.getMessage());