package com.sigmaflare.binancej; import com.codepoetics.ambivalence.Either; import com.fasterxml.jackson.databind.ObjectMapper; import com.sigmaflare.binancej.entities.ServiceError; import com.sigmaflare.binancej.entities.Ping; import com.sigmaflare.binancej.exceptions.BinanceServiceUnreachableException; import com.sigmaflare.binancej.matchers.GetMatcher; import org.apache.http.ProtocolVersion; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.message.BasicStatusLine; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import static com.sigmaflare.binancej.Constant.BASE_ENDPOINT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class PingMethodTests { private static ObjectMapper mapper = new ObjectMapper().findAndRegisterModules(); private final String url = String.format("%s%s", BASE_ENDPOINT, "/api/v1/ping"); @Test public void TestServiceAliveReturnsSuccess() throws IOException, BinanceServiceUnreachableException { CloseableHttpClient mockedCloseableHttpClient = mock(CloseableHttpClient.class); CloseableHttpResponse mockedCloseableHttpResponse = mock(CloseableHttpResponse.class); when(mockedCloseableHttpResponse.getStatusLine()) .thenReturn(new BasicStatusLine(new ProtocolVersion("TEST", 1, 0), 200, "test")); when(mockedCloseableHttpClient.execute(argThat(new GetMatcher(url, "1234")))) .thenReturn(mockedCloseableHttpResponse); BasicHttpEntity httpEntity = new BasicHttpEntity(); httpEntity.setContent(new ByteArrayInputStream("{}".getBytes(StandardCharsets.UTF_8))); when(mockedCloseableHttpResponse.getEntity()).thenReturn(httpEntity); GeneralUtilities generalUtilities = new GeneralUtilities("1234", "abcd", mockedCloseableHttpClient); Either res = generalUtilities.ping(); assertTrue(res.isRight()); } @Test(expected = BinanceServiceUnreachableException.class) public void TestServiceFailsToReturnHttpEntity() throws IOException, BinanceServiceUnreachableException { CloseableHttpClient mockedCloseableHttpClient = mock(CloseableHttpClient.class); CloseableHttpResponse mockedCloseableHttpResponse = mock(CloseableHttpResponse.class); when(mockedCloseableHttpResponse.getStatusLine()) .thenReturn(new BasicStatusLine(new ProtocolVersion("TEST", 1, 0), 200, "test")); when(mockedCloseableHttpClient.execute(argThat(new GetMatcher(url, "1234")))) .thenReturn(mockedCloseableHttpResponse); GeneralUtilities generalUtilities = new GeneralUtilities("1234", "abcd", mockedCloseableHttpClient); generalUtilities.ping(); } @Test public void TestServiceBadApiKeyReturns400() throws IOException, BinanceServiceUnreachableException { CloseableHttpClient mockedCloseableHttpClient = mock(CloseableHttpClient.class); CloseableHttpResponse mockedCloseableHttpResponse = mock(CloseableHttpResponse.class); when(mockedCloseableHttpResponse.getStatusLine()) .thenReturn(new BasicStatusLine(new ProtocolVersion("TEST", 1, 0), 400, "Bad API Key")); when(mockedCloseableHttpClient.execute(argThat(new GetMatcher(url, "1234")))) .thenReturn(mockedCloseableHttpResponse); ServiceError serviceError = ServiceError.builder().code(400).message("Bad API Key").build(); BasicHttpEntity httpEntity = new BasicHttpEntity(); httpEntity.setContent( new ByteArrayInputStream(mapper.writeValueAsString(serviceError).getBytes(StandardCharsets.UTF_8))); when(mockedCloseableHttpResponse.getEntity()).thenReturn(httpEntity); GeneralUtilities generalUtilities = new GeneralUtilities("1234", "abcd", mockedCloseableHttpClient); Either res = generalUtilities.ping(); assertTrue(res.isLeft()); assertEquals(Helpers.extractEitherValueSafely(res.left()), serviceError); } }