Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import com.openelements.hiero.base.implementation.FileClientImpl;
import com.openelements.hiero.base.protocol.FileCreateResult;
import com.openelements.hiero.base.protocol.FileCreateRequest;
import com.openelements.hiero.base.protocol.FileUpdateResult;
import com.openelements.hiero.base.protocol.FileUpdateRequest;
import com.openelements.hiero.base.protocol.FileAppendRequest;
import com.openelements.hiero.base.protocol.FileAppendResult;
import com.openelements.hiero.base.protocol.FileInfoRequest;
Expand Down Expand Up @@ -120,6 +122,104 @@ void testCreateFileThrowsExceptionForNullContent() {
Assertions.assertTrue(exception.getMessage().contains(message));
}

@Test
void testUpdateFile() throws HieroException {
// mock
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);

// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();

// then
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
.thenReturn(fileUpdateResult);

fileClientImpl.updateFile(fileId, updatedContent);

verify(protocolLayerClient, times(1))
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
}

@Test
void testUpdateFileForSizeGreaterThanFileCreateMaxSize() throws HieroException {
// mock
final FileUpdateResult fileUpdateResult = Mockito.mock(FileUpdateResult.class);
final FileAppendResult fileAppendResult = Mockito.mock(FileAppendResult.class);

// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];
// -1 because 1 for executeFileCreateTransaction()
final int appendCount = Math.floorDiv(updatedContent.length, FileCreateRequest.FILE_CREATE_MAX_SIZE) - 1;

//then
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
.thenReturn(fileUpdateResult);
when(protocolLayerClient.executeFileAppendRequestTransaction(any(FileAppendRequest.class)))
.thenReturn(fileAppendResult);

fileClientImpl.updateFile(fileId, updatedContent);

verify(protocolLayerClient, times(1))
.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class));
verify(protocolLayerClient, times(appendCount))
.executeFileAppendRequestTransaction(any(FileAppendRequest.class));
}

@Test
void testUpdateFileThrowsExceptionForInvalidFileId() throws HieroException {
final String message = "Failed to execute transaction of type FileUpdateTransaction";

// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();

// then
when(protocolLayerClient.executeFileUpdateRequestTransaction(any(FileUpdateRequest.class)))
.thenThrow(new HieroException(message));

final HieroException exception = Assertions.assertThrows(
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
);
Assertions.assertTrue(exception.getMessage().contains(message));
}

@Test
void testUpdateFileThrowsExceptionForSizeGreaterThanMaxFileSize() {
final String message = "File contents must be less than " + FileCreateRequest.FILE_MAX_SIZE + " bytes";

// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];

// then
final HieroException exception = Assertions.assertThrows(
HieroException.class, () -> fileClientImpl.updateFile(fileId, updatedContent)
);
Assertions.assertTrue(exception.getMessage().contains(message));
}

@Test
void testUpdateFileThrowsExceptionForNullArguments() {
// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = "Hello Hiero! Updated".getBytes();

// then
final NullPointerException nullContentException = Assertions.assertThrows(
NullPointerException.class, () -> fileClientImpl.updateFile(fileId, null)
);
Assertions.assertTrue(nullContentException.getMessage().contains("content must not be null"));

final NullPointerException nullIdException = Assertions.assertThrows(
NullPointerException.class, () -> fileClientImpl.updateFile(null, updatedContent)
);
Assertions.assertTrue(nullIdException.getMessage().contains("fileId must not be null"));

Assertions.assertThrows(NullPointerException.class, () -> fileClientImpl.updateFile(null, null));
}

@Test
void testGetFileSize() throws HieroException {
// mocks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.hedera.hashgraph.sdk.FileId;
import com.openelements.hiero.base.FileClient;
import com.openelements.hiero.base.HieroException;

import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
Expand Down Expand Up @@ -147,9 +148,9 @@ void testDeleteFileByFileId() throws Exception {
@Test
void testUpdateFileByFileId() throws Exception {
//given
final byte[] contents = "Hello, Hedera!".getBytes();
final byte[] contents = "Hello, Hiero!".getBytes();
final FileId fileId = fileClient.createFile(contents);
final String newContent = "Hello, Hedera! Updated";
final String newContent = "Hello, Hiero! Updated";

//when
fileClient.updateFile(fileId, newContent.getBytes());
Expand All @@ -159,6 +160,55 @@ void testUpdateFileByFileId() throws Exception {
Assertions.assertArrayEquals(newContent.getBytes(), readContents);
}

@Test
void testUpdateFileForSizeGreaterThanCreateFileSize() throws HieroException {
// given
final byte[] contents = "Hello, Hiero!".getBytes();
final FileId fileId = fileClient.createFile(contents);
final byte[] updatedContent = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];

// when
fileClient.updateFile(fileId, updatedContent);

// then
final byte[] readContent = fileClient.readFile(fileId);
Assertions.assertArrayEquals(updatedContent, readContent);
}

@Test
void testUpdateFileThrowExceptionForInvalidFileId() {
// given
final FileId fileId = FileId.fromString("1.2.3");
final byte[] updatedContent = "Hello, Hiero! Update".getBytes();

// then
Assertions.assertThrows(HieroException.class, () -> fileClient.updateFile(fileId, updatedContent));
}

@Test
void testUpdateFileThrowExceptionIfSizeExceedMaxSize() throws HieroException {
// given
final byte[] contents = "Hello, Hiero!".getBytes();
final FileId fileId = fileClient.createFile(contents);
final byte[] updatedContent = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];

// then
Assertions.assertThrows(HieroException.class, () -> fileClient.updateFile(fileId, updatedContent));
}

@Test
void testUpdateFileThrowsErrorForNullValues() throws HieroException {
// given
final byte[] contents = "Hello, Hiero!".getBytes();
final FileId fileId = fileClient.createFile(contents);
final byte[] updatedContent = "Hello, Hiero! Update".getBytes();

// then
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(fileId, null));
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(null, updatedContent));
Assertions.assertThrows(NullPointerException.class, () -> fileClient.updateFile(null, null));
}

@Test
void testDeleteFileByStringId() throws Exception {
//given
Expand Down
Loading