Skip to content

Commit bce1fb8

Browse files
Merge pull request #133 from manishdait/issues-99
Implemented tests for missing functionalities in FileClientImpl.createFile()
2 parents 51a80ca + d7653c7 commit bce1fb8

File tree

3 files changed

+129
-5
lines changed

3 files changed

+129
-5
lines changed

hiero-enterprise-base/src/main/java/com/openelements/hiero/base/implementation/FileClientImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public FileId createFile(@NonNull final byte[] contents, @NonNull final Instant
4444

4545
private FileId createFileImpl(@NonNull final byte[] contents, @Nullable final Instant expirationTime)
4646
throws HieroException {
47-
Objects.requireNonNull(contents, "fileId must not be null");
47+
Objects.requireNonNull(contents, "contents must not be null");
4848
if (contents.length > FileCreateRequest.FILE_MAX_SIZE) {
4949
throw new HieroException("File contents must be less than " + FileCreateRequest.FILE_MAX_SIZE + " bytes");
5050
}

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

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
import com.hedera.hashgraph.sdk.FileId;
44
import com.openelements.hiero.base.HieroException;
55
import com.openelements.hiero.base.implementation.FileClientImpl;
6+
import com.openelements.hiero.base.protocol.FileCreateResult;
7+
import com.openelements.hiero.base.protocol.FileCreateRequest;
8+
import com.openelements.hiero.base.protocol.FileAppendRequest;
9+
import com.openelements.hiero.base.protocol.FileAppendResult;
610
import com.openelements.hiero.base.protocol.FileInfoRequest;
711
import com.openelements.hiero.base.protocol.FileInfoResponse;
812
import com.openelements.hiero.base.protocol.ProtocolLayerClient;
@@ -11,8 +15,12 @@
1115
import org.junit.jupiter.api.Test;
1216
import org.mockito.Mockito;
1317

18+
import java.time.Instant;
19+
1420
import static org.mockito.ArgumentMatchers.any;
15-
import static org.mockito.Mockito.*;
21+
import static org.mockito.Mockito.when;
22+
import static org.mockito.Mockito.verify;
23+
import static org.mockito.Mockito.times;
1624

1725
public class FileClientImplTest {
1826
ProtocolLayerClient protocolLayerClient;
@@ -24,6 +32,94 @@ void setup() {
2432
fileClientImpl = new FileClientImpl(protocolLayerClient);
2533
}
2634

35+
@Test
36+
void testCreateFile() throws HieroException {
37+
// mock
38+
final FileId fileId = FileId.fromString("1.2.3");
39+
final FileCreateResult fileCreateResult = Mockito.mock(FileCreateResult.class);
40+
41+
// given
42+
final byte[] content = "Hello Hiero!".getBytes();
43+
44+
//then
45+
when(protocolLayerClient.executeFileCreateTransaction(any(FileCreateRequest.class)))
46+
.thenReturn(fileCreateResult);
47+
when(fileCreateResult.fileId()).thenReturn(fileId);
48+
49+
final FileId result = fileClientImpl.createFile(content);
50+
51+
verify(protocolLayerClient, times(1))
52+
.executeFileCreateTransaction(any(FileCreateRequest.class));
53+
verify(fileCreateResult, times(1)).fileId();
54+
Assertions.assertEquals(fileId, result);
55+
}
56+
57+
@Test
58+
void testCreateFileForSizeGreaterThanFileCreateMaxSize() throws HieroException {
59+
// mock
60+
final FileId fileId = FileId.fromString("1.2.3");
61+
final FileCreateResult fileCreateResult = Mockito.mock(FileCreateResult.class);
62+
final FileAppendResult fileAppendResult = Mockito.mock(FileAppendResult.class);
63+
64+
// given
65+
final byte[] content = new byte[FileCreateRequest.FILE_CREATE_MAX_SIZE * 2];
66+
// -1 because 1 for executeFileCreateTransaction()
67+
final int appendCount = Math.floorDiv(content.length, FileCreateRequest.FILE_CREATE_MAX_SIZE) - 1;
68+
69+
//then
70+
when(protocolLayerClient.executeFileCreateTransaction(any(FileCreateRequest.class)))
71+
.thenReturn(fileCreateResult);
72+
when(fileCreateResult.fileId()).thenReturn(fileId);
73+
when(protocolLayerClient.executeFileAppendRequestTransaction(any(FileAppendRequest.class)))
74+
.thenReturn(fileAppendResult);
75+
76+
final FileId result = fileClientImpl.createFile(content);
77+
78+
verify(protocolLayerClient, times(1))
79+
.executeFileCreateTransaction(any(FileCreateRequest.class));
80+
verify(fileCreateResult, times(1)).fileId();
81+
verify(protocolLayerClient, times(appendCount))
82+
.executeFileAppendRequestTransaction(any(FileAppendRequest.class));
83+
Assertions.assertEquals(fileId, result);
84+
}
85+
86+
@Test
87+
void testCreateFileThrowsExceptionForSizeGreaterThanMaxFileSize() {
88+
final String message = "File contents must be less than " + FileCreateRequest.FILE_MAX_SIZE + " bytes";
89+
// given
90+
final byte[] contents = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];
91+
92+
// then
93+
final HieroException exception = Assertions.assertThrows(
94+
HieroException.class, () -> fileClientImpl.createFile(contents)
95+
);
96+
Assertions.assertTrue(exception.getMessage().contains(message));
97+
}
98+
99+
@Test
100+
void testCreateFileThrowsExceptionForExpirationTimeBeforeNow() {
101+
final String message = "Expiration time must be in the future";
102+
// given
103+
final byte[] contents = "Hello Hiero!".getBytes();
104+
final Instant expiration = Instant.now().minusSeconds(1);
105+
106+
// then
107+
final IllegalArgumentException exception =Assertions.assertThrows(
108+
IllegalArgumentException.class, () -> fileClientImpl.createFile(contents, expiration)
109+
);
110+
Assertions.assertTrue(exception.getMessage().contains(message));
111+
}
112+
113+
@Test
114+
void testCreateFileThrowsExceptionForNullContent() {
115+
final String message = "contents must not be null";
116+
117+
final NullPointerException exception = Assertions.assertThrows(
118+
NullPointerException.class, () -> fileClientImpl.createFile(null)
119+
);
120+
Assertions.assertTrue(exception.getMessage().contains(message));
121+
}
122+
27123
@Test
28124
void testGetFileSize() throws HieroException {
29125
// mocks
@@ -60,6 +156,11 @@ void testGetFileSizeThrowsExceptionForInvalidId() throws HieroException {
60156

61157
@Test
62158
void testGetFileSizeThrowsExceptionForNullId() {
63-
Assertions.assertThrows(NullPointerException.class, () -> fileClientImpl.getSize(null));
159+
final String message = "fileId must not be null";
160+
161+
final NullPointerException exception = Assertions.assertThrows(
162+
NullPointerException.class, () -> fileClientImpl.getSize(null)
163+
);
164+
Assertions.assertTrue(exception.getMessage().contains(message));
64165
}
65166
}

hiero-enterprise-spring/src/test/java/com/openelements/hiero/spring/test/FileClientTests.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.time.Instant;
88
import java.time.temporal.ChronoUnit;
99
import java.util.stream.IntStream;
10+
11+
import com.openelements.hiero.base.protocol.FileCreateRequest;
1012
import org.junit.jupiter.api.Assertions;
1113
import org.junit.jupiter.api.Disabled;
1214
import org.junit.jupiter.api.Test;
@@ -45,7 +47,7 @@ void testCreateEmptyFile() throws Exception {
4547
@Test
4648
void testCreateSmallFile() throws Exception {
4749
//given
48-
final byte[] contents = "Hello, Hedera!".getBytes();
50+
final byte[] contents = "Hello, Hiero!".getBytes();
4951

5052
//when
5153
final FileId fileId = fileClient.createFile(contents);
@@ -57,7 +59,7 @@ void testCreateSmallFile() throws Exception {
5759
@Test
5860
void testCreateLargeFile() throws Exception {
5961
//given
60-
final byte[] contents = IntStream.range(0, 500).mapToObj(i -> "Hello, Hedera!")
62+
final byte[] contents = IntStream.range(0, 500).mapToObj(i -> "Hello, Hiero!")
6163
.reduce((a, b) -> a + b)
6264
.get()
6365
.getBytes();
@@ -69,6 +71,27 @@ void testCreateLargeFile() throws Exception {
6971
Assertions.assertNotNull(fileId);
7072
}
7173

74+
@Test
75+
void testCreateFileThrowExceptionIfExceedMaxFileSize() {
76+
// given
77+
final byte[] contents = new byte[FileCreateRequest.FILE_MAX_SIZE + 1];
78+
79+
// then
80+
Assertions.assertThrows(HieroException.class, () -> fileClient.createFile(contents));
81+
}
82+
83+
@Test
84+
void testCreateFileThrowExceptionIfExpirationTimeBeforeNow() {
85+
// given
86+
final byte[] contents = "Hello Hiero!".getBytes();
87+
final Instant definedExpirationTime = Instant.now().minusSeconds(60);
88+
89+
// then
90+
Assertions.assertThrows(
91+
IllegalArgumentException.class, () -> fileClient.createFile(contents, definedExpirationTime)
92+
);
93+
}
94+
7295
@Test
7396
void testReadFileByFileId() throws Exception {
7497
//given

0 commit comments

Comments
 (0)