11package com .jaspersoft .jasperserver .jaxrs .client .core ;//package com.jaspersoft.jasperserver.jaxrs.client.core;
22
3+ import com .fasterxml .jackson .databind .DeserializationFeature ;
4+ import com .fasterxml .jackson .jaxrs .json .JacksonJaxbJsonProvider ;
35import java .security .SecureRandom ;
46import java .security .cert .CertificateException ;
57import java .security .cert .X509Certificate ;
6- import java .util .HashMap ;
78import javax .net .ssl .SSLContext ;
89import javax .net .ssl .TrustManager ;
910import javax .net .ssl .X509TrustManager ;
1011import javax .ws .rs .client .Client ;
1112import javax .ws .rs .client .ClientBuilder ;
12- import javax .ws .rs .client .Entity ;
1313import javax .ws .rs .client .Invocation ;
1414import javax .ws .rs .client .WebTarget ;
15- import javax .ws .rs .core .Cookie ;
16- import javax .ws .rs .core .NewCookie ;
1715import javax .ws .rs .core .Response ;
16+ import org .glassfish .jersey .filter .LoggingFilter ;
17+ import org .glassfish .jersey .jackson .JacksonFeature ;
1818import org .mockito .Mock ;
19- import org .mockito .Mockito ;
2019import org .mockito .internal .util .reflection .Whitebox ;
2120import org .powermock .api .mockito .PowerMockito ;
2221import org .powermock .core .classloader .annotations .PrepareForTest ;
2322import org .powermock .modules .testng .PowerMockTestCase ;
24- import org .testng .annotations .AfterMethod ;
2523import org .testng .annotations .BeforeMethod ;
2624import org .testng .annotations .Test ;
2725
2826import static org .mockito .Matchers .any ;
27+ import static org .mockito .Matchers .anyBoolean ;
2928import static org .mockito .Matchers .anyString ;
3029import static org .mockito .Matchers .eq ;
30+ import static org .mockito .Matchers .isA ;
3131import static org .mockito .Mockito .doReturn ;
32- import static org .mockito .Mockito .reset ;
33- import static org .mockito .Mockito .spy ;
32+ import static org .mockito .Mockito .never ;
33+ import static org .mockito .Mockito .times ;
34+ import static org .mockito .Mockito .verify ;
35+ import static org .mockito .Mockito .when ;
3436import static org .mockito .MockitoAnnotations .initMocks ;
37+ import static org .powermock .api .mockito .PowerMockito .mockStatic ;
38+ import static org .powermock .api .mockito .PowerMockito .whenNew ;
3539import static org .powermock .api .support .membermodification .MemberMatcher .method ;
40+ import static org .powermock .api .support .membermodification .MemberModifier .suppress ;
3641import static org .testng .Assert .assertEquals ;
3742import static org .testng .Assert .assertNotNull ;
3843
3944/**
4045 * Unit tests for {@link com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage}
4146 */
42-
4347@ PrepareForTest ({SessionStorage .class , SSLContext .class , EncryptionUtils .class , ClientBuilder .class })
4448public class SessionStorageTest extends PowerMockTestCase {
4549
@@ -60,84 +64,123 @@ public class SessionStorageTest extends PowerMockTestCase {
6064 @ Mock
6165 private Response responseMock ;
6266 @ Mock
63- public Response . StatusType statusTypeMock ;
67+ public SSLContext sslContextMock ;
6468
6569 @ Mock
66- public SSLContext sslContextMock ;
70+ private JacksonJaxbJsonProvider providerMock ;
71+ @ Mock
72+ public Response .StatusType statusTypeMock ;
6773
6874
6975 @ BeforeMethod
7076 public void before () {
7177 initMocks (this );
7278 }
7379
74- @ Test
75- public void should_create_new_instance_session_storage () throws Exception {
76-
77- // Given
78- PowerMockito .suppress (method (SessionStorage .class , "init" ));
79- // When
80- SessionStorage sessionStorageSpy = spy (new SessionStorage (configurationMock , credentialsMock ));
81- // Then
82- assertNotNull (sessionStorageSpy );
83- assertNotNull (Whitebox .getInternalState (sessionStorageSpy , "configuration" ));
84- assertNotNull (Whitebox .getInternalState (sessionStorageSpy , "credentials" ));
85- assertEquals (Whitebox .getInternalState (sessionStorageSpy , "rootTarget" ), null );
86- assertEquals (Whitebox .getInternalState (sessionStorageSpy , "sessionId" ), null );
87- }
88-
8980 @ Test
9081 public void should_init_ssl () {
9182
9283 /** - mock for static method **/
93- PowerMockito . mockStatic (ClientBuilder .class );
94- Mockito . when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
84+ mockStatic (ClientBuilder .class );
85+ when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
9586
9687 /** - mocks for {@link SessionStorage#init()} method (no SSL) **/
97- Mockito .doReturn ("https://54.83.98.156/jasperserver-pro" ).when (configurationMock ).getJasperReportsServerUrl ();
98- Mockito .doReturn (10000 ).when (configurationMock ).getConnectionTimeout ();
99- Mockito .doReturn (8000 ).when (configurationMock ).getReadTimeout ();
100- Mockito .doReturn (clientMock ).when (builderMock ).build ();
101- Mockito .doReturn (targetMock ).when (clientMock ).target ("http://54.83.98.156/jasperserver-pro" );
102-
103- /** - mocks for {@link SessionStorage#getSecurityAttributes()} method (no SSL) **/
104- Mockito .doReturn ("Alex" ).when (credentialsMock ).getUsername ();
105- Mockito .doReturn ("oh, yeah!" ).when (credentialsMock ).getPassword ();
106-
107- PowerMockito .mockStatic (EncryptionUtils .class );
108- PowerMockito .when (EncryptionUtils .parseEncryptionParams (responseMock )).thenReturn (null );
109- PowerMockito .when (EncryptionUtils .encryptPassword ("oh, yeah!" , "n_" , "e_" )).thenReturn ("encryptPassword" );
110-
111- Mockito .doReturn (targetMock ).when (targetMock ).path (anyString ());
112- Mockito .doReturn (invocationBuilderMock ).when (targetMock ).request ();
113- Mockito .doReturn (responseMock ).when (invocationBuilderMock ).get ();
114- Mockito .doReturn (new HashMap <String , NewCookie >() {{
115- put ("JSESSIONID" , new NewCookie (new Cookie ("JSESSIONID" , "AC0C233ED7E9BE5DD0D4A286E6C8BBAE" )));
116- }}).when (responseMock ).getCookies ();
117-
118- /** - mocks for {@link SessionStorage#login()} method **/
119- Mockito .doReturn (targetMock ).when (targetMock ).path (anyString ());
120- Mockito .doReturn (targetMock ).when (targetMock ).property (anyString (), eq (Boolean .FALSE ));
121- Mockito .doReturn (invocationBuilderMock ).when (targetMock ).request ();
122- Mockito .doReturn (invocationBuilderMock ).when (invocationBuilderMock )
123- .cookie ("JSESSIONID" , "AC0C233ED7E9BE5DD0D4A286E6C8BBAE" );
124- Mockito .doReturn (responseMock ).when (invocationBuilderMock ).post (any (Entity .class ));
125-
126- /** - mocks for {@link SessionStorage#parseSessionId()} method **/
127- Mockito .doReturn ("JSESSIONID=AC0C233ED7E9BE5DD0D4A286E6C8BBAE;" )
128- .when (responseMock )
129- .getHeaderString ("Set-Cookie" );
130- Mockito .doReturn (302 ).when (responseMock ).getStatus ();
131-
132-
88+ doReturn ("https://54.83.98.156/jasperserver-pro" ).when (configurationMock ).getJasperReportsServerUrl ();
89+ doReturn (10000 ).when (configurationMock ).getConnectionTimeout ();
90+ doReturn (8000 ).when (configurationMock ).getReadTimeout ();
91+ doReturn (clientMock ).when (builderMock ).build ();
92+ doReturn (targetMock ).when (clientMock ).target ("http://54.83.98.156/jasperserver-pro" );
13393 try {
13494 new SessionStorage (configurationMock , credentialsMock );
13595 } catch (Exception e ) {
136- //Mockito.verify(logMock, times(1)).error(anyString(), any(NoSuchAlgorithmException.class));
13796 assertNotNull (e );
13897 }
13998 }
14099
100+ @ Test
101+ public void should_invoke_init_method_with_default_configuration () throws Exception {
102+ //given
103+ mockStatic (ClientBuilder .class );
104+ when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
105+ doReturn ("http://54.83.98.156/jasperserver-pro" ).when (configurationMock ).getJasperReportsServerUrl ();
106+ doReturn (clientMock ).when (builderMock ).build ();
107+ doReturn (null ).when (configurationMock ).getConnectionTimeout ();
108+ doReturn (null ).when (configurationMock ).getReadTimeout ();
109+ doReturn (targetMock ).when (clientMock ).target (anyString ());
110+ doReturn (targetMock ).when (targetMock ).register (JacksonFeature .class );
111+ whenNew (JacksonJaxbJsonProvider .class ).withNoArguments ().thenReturn (providerMock );
112+ PowerMockito .doReturn (providerMock ).when (providerMock ).configure (eq (DeserializationFeature .FAIL_ON_UNKNOWN_PROPERTIES ), anyBoolean ());
113+ doReturn (targetMock ).when (targetMock ).register (providerMock );
114+ doReturn (false ).when (configurationMock ).getLogHttp ();
115+ //when
116+ SessionStorage sessionStorage = new SessionStorage (configurationMock , credentialsMock );
117+ //then
118+ assertEquals (Whitebox .getInternalState (sessionStorage , "configuration" ), configurationMock );
119+ assertEquals (Whitebox .getInternalState (sessionStorage , "credentials" ), credentialsMock );
120+ verify (configurationMock , times (2 )).getJasperReportsServerUrl ();
121+ verify (builderMock ).build ();
122+ verify (configurationMock ).getConnectionTimeout ();
123+ verify (configurationMock ).getReadTimeout ();
124+ verify (clientMock ).target ("http://54.83.98.156/jasperserver-pro" );
125+ verify (targetMock ).register (JacksonFeature .class );
126+ verify (targetMock ).register (providerMock );
127+ verify (configurationMock ).getLogHttp ();
128+ verify (targetMock , never ()).register (LoggingFilter .class );
129+ }
130+
131+ @ Test
132+ public void should_invoke_init_method_with_custom_configuration () throws Exception {
133+ //given
134+ mockStatic (ClientBuilder .class );
135+ when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
136+ doReturn ("http://54.83.98.156/jasperserver-pro" ).when (configurationMock ).getJasperReportsServerUrl ();
137+ doReturn (clientMock ).when (builderMock ).build ();
138+ doReturn (1000 ).when (configurationMock ).getConnectionTimeout ();
139+ doReturn (clientMock ).when (clientMock ).property ("jersey.config.client.connectTimeout" , 1000 );
140+ doReturn (200 ).when (configurationMock ).getReadTimeout ();
141+ doReturn (clientMock ).when (clientMock ).property ("jersey.config.client.readTimeout" , 200 );
142+ doReturn (targetMock ).when (clientMock ).target (anyString ());
143+ doReturn (targetMock ).when (targetMock ).register (JacksonFeature .class );
144+ whenNew (JacksonJaxbJsonProvider .class ).withNoArguments ().thenReturn (providerMock );
145+ PowerMockito .doReturn (providerMock ).when (providerMock ).configure (eq (DeserializationFeature .FAIL_ON_UNKNOWN_PROPERTIES ), anyBoolean ());
146+ doReturn (targetMock ).when (targetMock ).register (providerMock );
147+ doReturn (true ).when (configurationMock ).getLogHttp ();
148+ doReturn (targetMock ).when (targetMock ).register (any (LoggingFilter .class ));
149+ //when
150+ SessionStorage sessionStorage = new SessionStorage (configurationMock , credentialsMock );
151+ //then
152+ assertEquals (Whitebox .getInternalState (sessionStorage , "configuration" ), configurationMock );
153+ assertEquals (Whitebox .getInternalState (sessionStorage , "credentials" ), credentialsMock );
154+ verify (configurationMock , times (2 )).getJasperReportsServerUrl ();
155+ verify (builderMock ).build ();
156+ verify (configurationMock ).getConnectionTimeout ();
157+ verify (configurationMock ).getReadTimeout ();
158+ verify (clientMock ).property ("jersey.config.client.connectTimeout" , 1000 );
159+ verify (clientMock ).property ("jersey.config.client.readTimeout" , 200 );
160+ verify (clientMock ).target ("http://54.83.98.156/jasperserver-pro" );
161+ verify (targetMock ).register (JacksonFeature .class );
162+ verify (targetMock ).register (providerMock );
163+ verify (configurationMock ).getLogHttp ();
164+ verify (targetMock ).register (isA (LoggingFilter .class ));
165+ }
166+
167+ @ Test
168+ public void should_create_new_instance_session_storage () throws Exception {
169+
170+ // Given
171+ suppress (method (SessionStorage .class , "init" ));
172+
173+ // When
174+ SessionStorage sessionStorageSpy = new SessionStorage (configurationMock , credentialsMock );
175+
176+ // Then
177+ assertNotNull (sessionStorageSpy );
178+ assertNotNull (Whitebox .getInternalState (sessionStorageSpy , "configuration" ));
179+ assertNotNull (Whitebox .getInternalState (sessionStorageSpy , "credentials" ));
180+ assertEquals (Whitebox .getInternalState (sessionStorageSpy , "rootTarget" ), null );
181+ assertEquals (Whitebox .getInternalState (sessionStorageSpy , "sessionId" ), null );
182+ }
183+
141184 @ Test (expectedExceptions = RuntimeException .class )
142185 public void should_throw_an_exception_when_unable_to_init_SSL_context () throws Exception {
143186
@@ -158,15 +201,15 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) {
158201 }
159202 }};
160203
161- PowerMockito . mockStatic (ClientBuilder .class , SSLContext .class );
162- PowerMockito . when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
163- PowerMockito . when (SSLContext .getInstance ("SSL" )).thenReturn (ctxMock );
204+ mockStatic (ClientBuilder .class , SSLContext .class );
205+ when (ClientBuilder .newBuilder ()).thenReturn (builderMock );
206+ when (SSLContext .getInstance ("SSL" )).thenReturn (ctxMock );
164207
165208 PowerMockito .when (ctxMock , "init" , null , managers , new SecureRandom ()).thenThrow (new RuntimeException ());
166209
167- PowerMockito . doReturn ("https://abc" ).when (configurationMock ).getJasperReportsServerUrl ();
168- PowerMockito . doReturn (managers ).when (configurationMock ).getTrustManagers ();
169- PowerMockito . doReturn (100L ).when (configurationMock ).getReadTimeout ();
210+ doReturn ("https://abc" ).when (configurationMock ).getJasperReportsServerUrl ();
211+ doReturn (managers ).when (configurationMock ).getTrustManagers ();
212+ doReturn (100L ).when (configurationMock ).getReadTimeout ();
170213
171214 // When
172215 SessionStorage sessionStorageSpy = new SessionStorage (configurationMock , credentialsMock );
@@ -178,7 +221,7 @@ public void checkServerTrusted(X509Certificate[] certs, String authType) {
178221 public void should_set_and_get_state_for_object () {
179222
180223 // Given
181- PowerMockito . suppress (method (SessionStorage .class , "init" ));
224+ suppress (method (SessionStorage .class , "init" ));
182225 doReturn ("http" ).when (configurationMock ).getJasperReportsServerUrl ();
183226
184227 SessionStorage sessionStorage = new SessionStorage (configurationMock , credentialsMock );
@@ -193,8 +236,9 @@ public void should_set_and_get_state_for_object() {
193236 assertNotNull (sessionStorage .getSessionId ());
194237 }
195238
196- @ AfterMethod
197- public void after () {
198- reset (builderMock , configurationMock , credentialsMock , invocationBuilderMock , responseMock , ctxMock , clientMock , targetMock );
199- }
239+ // @AfterMethod
240+ // public void after() {
241+ // reset(builderMock, configurationMock, credentialsMock, invocationBuilderMock, responseMock, ctxMock, clientMock, targetMock);
242+
243+
200244}
0 commit comments