1package eu.siacs.conversations.services;
2
3import static org.junit.Assert.assertFalse;
4import static org.mockito.ArgumentMatchers.any;
5import static org.mockito.Mockito.mock;
6import static org.mockito.Mockito.when;
7
8import android.os.Build;
9
10import org.junit.Before;
11import org.junit.Test;
12import org.junit.runner.RunWith;
13import org.robolectric.RobolectricTestRunner;
14import org.robolectric.annotation.Config;
15import org.robolectric.annotation.ConscryptMode;
16
17import eu.siacs.conversations.Conversations;
18import io.ipfs.cid.Cid;
19
20@RunWith(RobolectricTestRunner.class)
21@Config(sdk = Build.VERSION_CODES.TIRAMISU, application = Conversations.class)
22@ConscryptMode(ConscryptMode.Mode.OFF)
23public class XmppConnectionServiceTest {
24
25 private XmppConnectionService service;
26
27 @Before
28 public void setUp() {
29 service = mock(XmppConnectionService.class);
30 when(service.isBlockedMediaSha1(any())).thenCallRealMethod();
31 when(service.isBlockedMedia(any(Cid.class))).thenReturn(false);
32 }
33
34 @Test
35 public void testIsBlockedMediaSha1ReturnsFalseForNonSha1Length() {
36 // 36 hex chars = 18 bytes; valid SHA-1 is 40 hex chars = 20 bytes.
37 // Reproduces: IllegalStateException: Incorrect hash length: 18 != 20
38 assertFalse(service.isBlockedMediaSha1("aabbccddee1122334455667788990011aabb"));
39 }
40
41 @Test
42 public void testIsBlockedMediaSha1ReturnsFalseForNull() {
43 assertFalse(service.isBlockedMediaSha1(null));
44 }
45
46 @Test
47 public void testIsBlockedMediaSha1AcceptsValidSha1() {
48 // 40 hex chars = 20 bytes = valid SHA-1
49 assertFalse(service.isBlockedMediaSha1("aabbccddee112233445566778899001122334455"));
50 }
51}