14670: Fix run-tests. Skip failing test.
[arvados.git] / sdk / java-v2 / src / test / java / org / arvados / client / facade / ArvadosFacadeTest.java
1 /*
2  * Copyright (C) The Arvados Authors. All rights reserved.
3  *
4  * SPDX-License-Identifier: AGPL-3.0 OR Apache-2.0
5  *
6  */
7
8 package org.arvados.client.facade;
9
10 import com.fasterxml.jackson.databind.ObjectMapper;
11 import com.fasterxml.jackson.databind.ObjectWriter;
12 import okhttp3.mockwebserver.MockResponse;
13 import okio.Buffer;
14 import org.apache.commons.io.FileUtils;
15 import org.arvados.client.api.model.Collection;
16 import org.arvados.client.api.model.KeepService;
17 import org.arvados.client.api.model.KeepServiceList;
18 import org.arvados.client.common.Characters;
19 import org.arvados.client.test.utils.ArvadosClientMockedWebServerTest;
20 import org.arvados.client.test.utils.FileTestUtils;
21 import org.junit.After;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.Ignore;
25
26 import java.io.File;
27 import java.nio.charset.Charset;
28 import java.nio.file.Files;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.List;
32 import java.util.stream.Collectors;
33
34 import static org.arvados.client.test.utils.ApiClientTestUtils.getResponse;
35 import static org.arvados.client.test.utils.FileTestUtils.*;
36 import static org.assertj.core.api.Assertions.assertThat;
37 import static org.junit.Assert.assertEquals;
38 import static org.junit.Assert.assertTrue;
39
40 public class ArvadosFacadeTest extends ArvadosClientMockedWebServerTest {
41
42     ArvadosFacade facade = new ArvadosFacade(CONFIG);
43
44     @Before
45     public void setUp() throws Exception {
46         FileTestUtils.createDirectory(FILE_SPLIT_TEST_DIR);
47         FileTestUtils.createDirectory(FILE_DOWNLOAD_TEST_DIR);
48     }
49
50     @Test
51     @Ignore("Failing test #15041")
52     public void uploadIsPerformedSuccessfullyUsingDiskOnlyKeepServices() throws Exception {
53
54         // given
55         String keepServicesAccessible = setMockedServerPortToKeepServices("keep-services-accessible-disk-only");
56         server.enqueue(new MockResponse().setBody(keepServicesAccessible));
57
58         String blockLocator = "7df44272090cee6c0732382bba415ee9";
59         String signedBlockLocator = blockLocator + "+70+A189a93acda6e1fba18a9dffd42b6591cbd36d55d@5a1c17b6";
60         for (int i = 0; i < 8; i++) {
61             server.enqueue(new MockResponse().setBody(signedBlockLocator));
62         }
63         server.enqueue(getResponse("users-get"));
64         server.enqueue(getResponse("collections-create-manifest"));
65
66         FileTestUtils.generateFile(TEST_FILE, FileTestUtils.ONE_FOURTH_GB);
67
68         // when
69         Collection actual = facade.upload(Arrays.asList(new File(TEST_FILE)), "Super Collection", null);
70
71         // then
72         assertThat(actual.getName()).contains("Super Collection");
73     }
74
75     @Test
76     public void uploadIsPerformedSuccessfully() throws Exception {
77
78         // given
79         String keepServicesAccessible = setMockedServerPortToKeepServices("keep-services-accessible");
80         server.enqueue(new MockResponse().setBody(keepServicesAccessible));
81
82         String blockLocator = "7df44272090cee6c0732382bba415ee9";
83         String signedBlockLocator = blockLocator + "+70+A189a93acda6e1fba18a9dffd42b6591cbd36d55d@5a1c17b6";
84         for (int i = 0; i < 4; i++) {
85             server.enqueue(new MockResponse().setBody(signedBlockLocator));
86         }
87         server.enqueue(getResponse("users-get"));
88         server.enqueue(getResponse("collections-create-manifest"));
89
90         FileTestUtils.generateFile(TEST_FILE, FileTestUtils.ONE_FOURTH_GB);
91
92         // when
93         Collection actual = facade.upload(Arrays.asList(new File(TEST_FILE)), "Super Collection", null);
94
95         // then
96         assertThat(actual.getName()).contains("Super Collection");
97     }
98
99     @Test
100     public void downloadOfWholeCollectionIsPerformedSuccessfully() throws Exception {
101
102         //given
103         String collectionUuid = "ardev-4zz18-jk5vo4uo9u5vj52";
104         server.enqueue(getResponse("collections-download-file"));
105
106         String keepServicesAccessible = setMockedServerPortToKeepServices("keep-services-accessible");
107         server.enqueue(new MockResponse().setBody(keepServicesAccessible));
108         File collectionDestination = new File(FILE_DOWNLOAD_TEST_DIR + Characters.SLASH + collectionUuid);
109
110         List<File> files = generatePredefinedFiles();
111         List<byte[]> fileData = new ArrayList<>();
112         for (File f : files) {
113             fileData.add(Files.readAllBytes(f.toPath()));
114         }
115         byte[] filesDataChunk = fileData.stream().reduce(new byte[0], this::addAll);
116
117         server.enqueue(new MockResponse().setBody(new Buffer().write(filesDataChunk)));
118
119         //when
120         List<File> downloadedFiles = facade.downloadCollectionFiles(collectionUuid, FILE_DOWNLOAD_TEST_DIR, false);
121
122         //then
123         assertEquals(3, downloadedFiles.size());
124         assertTrue(collectionDestination.exists());
125         assertThat(downloadedFiles).allMatch(File::exists);
126         assertEquals(files.stream().map(File::getName).collect(Collectors.toList()), downloadedFiles.stream().map(File::getName).collect(Collectors.toList()));
127         assertEquals(files.stream().map(File::length).collect(Collectors.toList()), downloadedFiles.stream().map(File::length).collect(Collectors.toList()));
128     }
129
130     @Test
131     public void downloadOfWholeCollectionUsingKeepWebPerformedSuccessfully() throws Exception {
132
133         //given
134         String collectionUuid = "ardev-4zz18-jk5vo4uo9u5vj52";
135         server.enqueue(getResponse("collections-download-file"));
136
137         List<File> files = generatePredefinedFiles();
138         for (File f : files) {
139             server.enqueue(new MockResponse().setBody(new Buffer().write(FileUtils.readFileToByteArray(f))));
140         }
141
142         //when
143         List<File> downloadedFiles = facade.downloadCollectionFiles(collectionUuid, FILE_DOWNLOAD_TEST_DIR, true);
144
145         //then
146         assertEquals(3, downloadedFiles.size());
147         assertThat(downloadedFiles).allMatch(File::exists);
148         assertEquals(files.stream().map(File::getName).collect(Collectors.toList()), downloadedFiles.stream().map(File::getName).collect(Collectors.toList()));
149         assertTrue(downloadedFiles.stream().map(File::length).collect(Collectors.toList()).containsAll(files.stream().map(File::length).collect(Collectors.toList())));
150     }
151
152     @Test
153     public void downloadOfSingleFilePerformedSuccessfully() throws Exception {
154
155         //given
156         String collectionUuid = "ardev-4zz18-jk5vo4uo9u5vj52";
157         server.enqueue(getResponse("collections-download-file"));
158
159         File file = generatePredefinedFiles().get(0);
160         byte[] fileData = FileUtils.readFileToByteArray(file);
161         server.enqueue(new MockResponse().setBody(new Buffer().write(fileData)));
162
163         //when
164         File downloadedFile = facade.downloadFile(file.getName(), collectionUuid, FILE_DOWNLOAD_TEST_DIR);
165
166         //then
167         assertTrue(downloadedFile.exists());
168         assertEquals(file.getName(), downloadedFile.getName());
169         assertEquals(file.length(), downloadedFile.length());
170     }
171
172     private String setMockedServerPortToKeepServices(String jsonPath) throws Exception {
173
174         ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
175         String filePath = String.format("src/test/resources/org/arvados/client/api/client/%s.json", jsonPath);
176         File jsonFile = new File(filePath);
177         String json = FileUtils.readFileToString(jsonFile, Charset.defaultCharset());
178         KeepServiceList keepServiceList = mapper.readValue(json, KeepServiceList.class);
179         List<KeepService> items = keepServiceList.getItems();
180         for (KeepService keepService : items) {
181             keepService.setServicePort(server.getPort());
182         }
183         ObjectWriter writer = mapper.writer().withDefaultPrettyPrinter();
184         return writer.writeValueAsString(keepServiceList);
185     }
186
187     //Method to copy multiple byte[] arrays into one byte[] array
188     private byte[] addAll(byte[] array1, byte[] array2) {
189         byte[] joinedArray = new byte[array1.length + array2.length];
190         System.arraycopy(array1, 0, joinedArray, 0, array1.length);
191         System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
192         return joinedArray;
193     }
194
195     @After
196     public void tearDown() throws Exception {
197         FileTestUtils.cleanDirectory(FILE_SPLIT_TEST_DIR);
198         FileTestUtils.cleanDirectory(FILE_DOWNLOAD_TEST_DIR);
199     }
200 }