Skip to content

Commit 04ea701

Browse files
Merge branch 'main' into working
2 parents 83d84e5 + d467128 commit 04ea701

File tree

3 files changed

+480
-19
lines changed

3 files changed

+480
-19
lines changed

hiero-enterprise-base/src/test/java/com/openelements/hiero/base/test/FileClientImplTest.java

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
import com.openelements.hiero.base.implementation.FileClientImpl;
66
import com.openelements.hiero.base.protocol.FileCreateResult;
77
import com.openelements.hiero.base.protocol.FileCreateRequest;
8+
import com.openelements.hiero.base.protocol.FileUpdateResult;
9+
import com.openelements.hiero.base.protocol.FileUpdateRequest;
810
import com.openelements.hiero.base.protocol.FileAppendRequest;
911
import com.openelements.hiero.base.protocol.FileAppendResult;
1012
import com.openelements.hiero.base.protocol.FileInfoRequest;
1113
import com.openelements.hiero.base.protocol.FileInfoResponse;
14+
import com.openelements.hiero.base.protocol.FileContentsRequest;
15+
import com.openelements.hiero.base.protocol.FileContentsResponse;
1216
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
1317
import org.junit.jupiter.api.Assertions;
1418
import org.junit.jupiter.api.BeforeEach;
@@ -31,6 +35,7 @@
3135
public class FileClientImplTest {
3236
ProtocolLayerClient protocolLayerClient;
3337
FileClientImpl fileClientImpl;
38+
3439
@Mock
3540
private FileClientImpl fileClient;
3641

@@ -129,6 +134,104 @@ void testCreateFileThrowsExceptionForNullContent() {
129134
Assertions.assertTrue(exception.getMessage().contains(message));
130135
}
131136

137+
@Test
138+
void testUpdateFile() throws HieroException {
139+
// mock
140+
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
141+
142+
// given
143+
final FileId fileId = FileId.fromString("1.2.3");
144+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
145+
146+
// then
147+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
148+
.thenReturn(fileUpdateResult);
149+
150+
fileClientImpl.updateFile(fileId, updatedContent);
151+
152+
verify(protocolLayerClient, times(1))
153+
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
154+
}
155+
156+
@Test
157+
void testUpdateFileForSizeGreaterThanFileCreateMaxSize() throws HieroException {
158+
// mock
159+
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
160+
final FileAppendResult fileAppendResult = Mockito.mock(FileAppendResult.class);
161+
162+
// given
163+
final FileId fileId = FileId.fromString("1.2.3");
164+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];
165+
// -1 because 1 for executeFileCreateTransaction()
166+
final int appendCount = Math.floorDiv(updatedContent.length, FileCreateRequest.FILE_CREATE_MAX_SIZE) - 1;
167+
168+
//then
169+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
170+
.thenReturn(fileUpdateResult);
171+
when(protocolLayerClient.executeFileAppendRequestTransaction(any(FileAppendRequest.class)))
172+
.thenReturn(fileAppendResult);
173+
174+
fileClientImpl.updateFile(fileId, updatedContent);
175+
176+
verify(protocolLayerClient, times(1))
177+
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
178+
verify(protocolLayerClient, times(appendCount))
179+
.executeFileAppendRequestTransaction(any(FileAppendRequest.class));
180+
}
181+
182+
@Test
183+
void testUpdateFileThrowsExceptionForInvalidFileId() throws HieroException {
184+
final String message = "Failed to execute transaction of type FileUpdateTransaction";
185+
186+
// given
187+
final FileId fileId = FileId.fromString("1.2.3");
188+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
189+
190+
// then
191+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
192+
.thenThrow(new HieroException(message));
193+
194+
final HieroException exception = Assertions.assertThrows(
195+
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
196+
);
197+
Assertions.assertTrue(exception.getMessage().contains(message));
198+
}
199+
200+
@Test
201+
void testUpdateFileThrowsExceptionForSizeGreaterThanMaxFileSize() {
202+
final String message = "File contents must be less than " + FileCreateRequest.FILE_MAX_SIZE + " bytes";
203+
204+
// given
205+
final FileId fileId = FileId.fromString("1.2.3");
206+
final byte[] updatedContent = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];
207+
208+
// then
209+
final HieroException exception = Assertions.assertThrows(
210+
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
211+
);
212+
Assertions.assertTrue(exception.getMessage().contains(message));
213+
}
214+
215+
@Test
216+
void testUpdateFileThrowsExceptionForNullArguments() {
217+
// given
218+
final FileId fileId = FileId.fromString("1.2.3");
219+
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();
220+
221+
// then
222+
final NullPointerException nullContentException = Assertions.assertThrows(
223+
NullPointerException.class, () -> fileClientImpl.updateFile(fileId, null)
224+
);
225+
Assertions.assertTrue(nullContentException.getMessage().contains("content must not be null"));
226+
227+
final NullPointerException nullIdException = Assertions.assertThrows(
228+
NullPointerException.class, () -> fileClientImpl.updateFile(null, updatedContent)
229+
);
230+
Assertions.assertTrue(nullIdException.getMessage().contains("fileId must not be null"));
231+
232+
Assertions.assertThrows(NullPointerException.class, () -> fileClientImpl.updateFile(null, null));
233+
}
234+
132235
@Test
133236
void testGetFileSize() throws HieroException {
134237
// mocks
@@ -173,6 +276,7 @@ void testGetFileSizeThrowsExceptionForNullId() {
173276
Assertions.assertTrue(exception.getMessage().contains(message));
174277
}
175278

279+
176280
//tests for deletefile method
177281
@Test
178282
public void testIsDeleted_FileIsDeleted() throws HieroException {
@@ -215,4 +319,131 @@ public void testIsDeleted_NullFileId() {
215319
assertEquals("fileId must not be null", exception.getMessage());
216320
}
217321

322+
323+
@Test
324+
void testReadFile() throws HieroException {
325+
// mock
326+
final FileContentsResponse fileContentsResponse = Mockito.mock(FileContentsResponse.class);
327+
final byte[] content = "Hello Hiero!".getBytes();
328+
329+
// given
330+
final FileId fileId = FileId.fromString("1.2.3");
331+
332+
when(protocolLayerClient.executeFileContentsQuery(any(FileContentsRequest.class)))
333+
.thenReturn(fileContentsResponse);
334+
when(fileContentsResponse.contents()).thenReturn(content);
335+
336+
final byte[] result = fileClientImpl.readFile(fileId);
337+
338+
verify(protocolLayerClient, times(1))
339+
.executeFileContentsQuery(any(FileContentsRequest.class));
340+
verify(fileContentsResponse, times(1)).contents();
341+
342+
Assertions.assertArrayEquals(content, result);
343+
}
344+
345+
@Test
346+
void testReadFileThrowsExceptionForInvalidId() throws HieroException {
347+
// given
348+
final FileId fileId = FileId.fromString("1.2.3");
349+
final String message = "Failed to read file with fileId " + fileId;
350+
351+
when(protocolLayerClient.executeFileContentsQuery(any(FileContentsRequest.class)))
352+
.thenThrow(new HieroException("Failed to execute query"));
353+
354+
final HieroException exception = Assertions.assertThrows(
355+
HieroException.class, () -> fileClientImpl.readFile(fileId)
356+
);
357+
358+
Assertions.assertTrue(exception.getMessage().contains(message));
359+
}
360+
361+
@Test
362+
void testReadFileThrowsExceptionForNullValue() {
363+
final String message = "fileId must not be null";
364+
final FileId fileId = null;
365+
366+
final NullPointerException exception = Assertions.assertThrows(
367+
NullPointerException.class, () -> fileClientImpl.readFile(fileId)
368+
);
369+
370+
Assertions.assertTrue(exception.getMessage().contains(message));
371+
}
372+
373+
@Test
374+
void testUpdateExpirationTime() throws HieroException {
375+
// mock
376+
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
377+
378+
// given
379+
final FileId fileId = FileId.fromString("1.2.3");
380+
final Instant expirationTime = Instant.now().plusSeconds(120);
381+
382+
//then
383+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
384+
.thenReturn(fileUpdateResult);
385+
386+
fileClientImpl.updateExpirationTime(fileId, expirationTime);
387+
388+
verify(protocolLayerClient, times(1))
389+
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
390+
}
391+
392+
@Test
393+
void testUpdateExpirationTimeThrowsExceptionForPastExpiration() {
394+
final String message = "Expiration time must be in the future";
395+
396+
// given
397+
final FileId fileId = FileId.fromString("1.2.3");
398+
final Instant expirationTime = Instant.now().minusSeconds(1);
399+
400+
// then
401+
final IllegalArgumentException exception = Assertions.assertThrows(
402+
IllegalArgumentException.class, () -> fileClientImpl.updateExpirationTime(fileId, expirationTime)
403+
);
404+
405+
Assertions.assertTrue(exception.getMessage().contains(message));
406+
}
407+
408+
@Test
409+
void testUpdateExpirationTimeThrowsExceptionForInvalidId() throws HieroException {
410+
final String message = "Failed to execute transaction of type FileUpdateTransaction";
411+
412+
// given
413+
final FileId fileId = FileId.fromString("1.2.3");
414+
final Instant expirationTime = Instant.now().plusSeconds(1);
415+
416+
// then
417+
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
418+
.thenThrow(new HieroException(message));
419+
420+
final HieroException exception = Assertions.assertThrows(
421+
HieroException.class, () -> fileClientImpl.updateExpirationTime(fileId, expirationTime)
422+
);
423+
424+
Assertions.assertTrue(exception.getMessage().contains(message));
425+
}
426+
427+
428+
@Test
429+
void testUpdateExpirationTimeThrowsExceptionForNullArguments() {
430+
// given
431+
final FileId fileId = FileId.fromString("1.2.3");
432+
final Instant expirationTime = Instant.now().plusSeconds(120);
433+
434+
// then
435+
final NullPointerException nullIdException = Assertions.assertThrows(
436+
NullPointerException.class, () -> fileClientImpl.updateExpirationTime(null, expirationTime)
437+
);
438+
Assertions.assertTrue(nullIdException.getMessage().contains("fileId must not be null"));
439+
440+
final NullPointerException nullTimeException = Assertions.assertThrows(
441+
NullPointerException.class, () -> fileClientImpl.updateExpirationTime(fileId, null)
442+
);
443+
Assertions.assertTrue(nullTimeException.getMessage().contains("expirationTime must not be null"));
444+
445+
Assertions.assertThrows(
446+
NullPointerException.class, () -> fileClientImpl.updateExpirationTime(null, null)
447+
);
448+
}
218449
}

0 commit comments

Comments
 (0)