From da4b1d82a0ec99f50281d6ed104e85d5643de337 Mon Sep 17 00:00:00 2001 From: Joze RIHTARSIC <joze.rihtarsic@ext.ec.europa.eu> Date: Fri, 11 Oct 2019 08:24:27 +0200 Subject: [PATCH] add unit tests --- .../smp/ui/AuthenticationResourceTest.java | 7 +- .../ec/edelivery/smp/ui/UserResourceTest.java | 183 +++++++++++++++++- 2 files changed, 181 insertions(+), 9 deletions(-) diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/AuthenticationResourceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/AuthenticationResourceTest.java index 85751ca23..442269e09 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/AuthenticationResourceTest.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/AuthenticationResourceTest.java @@ -1,9 +1,11 @@ package eu.europa.ec.edelivery.smp.ui; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.europa.ec.edelivery.smp.config.PropertiesTestConfig; import eu.europa.ec.edelivery.smp.config.SmpAppConfig; import eu.europa.ec.edelivery.smp.config.SmpWebAppConfig; import eu.europa.ec.edelivery.smp.config.SpringSecurityConfig; +import eu.europa.ec.edelivery.smp.data.ui.UserRO; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,6 +18,7 @@ import org.springframework.test.context.jdbc.SqlConfig; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.RequestPostProcessor; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.ContextLoaderListener; @@ -24,10 +27,11 @@ import org.springframework.web.context.WebApplicationContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSession; +import javax.ws.rs.core.MediaType; import static org.junit.Assert.*; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -82,6 +86,7 @@ public class AuthenticationResourceTest { assertNotNull(session); } + @Test public void authenticateInvalidPasswordTest() throws Exception { diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/UserResourceTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/UserResourceTest.java index a6c67149f..eab1870de 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/UserResourceTest.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/UserResourceTest.java @@ -5,12 +5,10 @@ import eu.europa.ec.edelivery.smp.config.PropertiesTestConfig; import eu.europa.ec.edelivery.smp.config.SmpAppConfig; import eu.europa.ec.edelivery.smp.config.SmpWebAppConfig; import eu.europa.ec.edelivery.smp.config.SpringSecurityConfig; -import eu.europa.ec.edelivery.smp.data.ui.CertificateRO; -import eu.europa.ec.edelivery.smp.data.ui.ServiceGroupRO; -import eu.europa.ec.edelivery.smp.data.ui.ServiceResult; -import eu.europa.ec.edelivery.smp.data.ui.UserRO; +import eu.europa.ec.edelivery.smp.data.ui.*; import eu.europa.ec.edelivery.smp.testutils.X509CertificateTestUtils; import org.apache.commons.io.IOUtils; +import org.hamcrest.CoreMatchers; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -25,20 +23,26 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.WebApplicationContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import javax.servlet.http.HttpSession; +import javax.ws.rs.core.MediaType; import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; +import java.util.UUID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -65,6 +69,7 @@ public class UserResourceTest { private MockMvc mvc; private static final RequestPostProcessor ADMIN_CREDENTIALS = httpBasic("smp_admin", "test123"); private static final RequestPostProcessor SYSTEM_CREDENTIALS = httpBasic("sys_admin", "test123"); + private static final RequestPostProcessor SG_ADMIN_CREDENTIALS = httpBasic("sg_admin", "test123"); @Before public void setup() { mvc = MockMvcBuilders.webAppContextSetup(webAppContext) @@ -101,6 +106,121 @@ public class UserResourceTest { }); } + @Test + public void testUpdateCurrentUserOK() throws Exception { + + // given when - log as SMP admin + MvcResult result = mvc.perform(post("/ui/rest/security/authentication") + .header("Content-Type","application/json") + .content("{\"username\":\"smp_admin\",\"password\":\"test123\"}")) + .andExpect(status().isOk()).andReturn(); + ObjectMapper mapper = new ObjectMapper(); + UserRO userRO = mapper.readValue(result.getResponse().getContentAsString(), UserRO.class); + assertNotNull(userRO); + + // when + userRO.setActive(!userRO.isActive()); + userRO.setEmailAddress("test@mail.com"); + userRO.setPassword(UUID.randomUUID().toString()); + if (userRO.getCertificate()==null) { + userRO.setCertificate(new CertificateRO()); + } + userRO.getCertificate().setCertificateId(UUID.randomUUID().toString()); + + mvc.perform(put(PATH+"/"+userRO.getId()).with(ADMIN_CREDENTIALS) + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(userRO)) + ).andExpect(status().isOk()).andReturn(); + } + + @Test + public void testUpdateCurrentUserNotAuthenticatedUser() throws Exception { + + // given when - log as SMP admin + // then change values and list uses for changed value + MvcResult result = mvc.perform(post("/ui/rest/security/authentication") + .header("Content-Type","application/json") + .content("{\"username\":\"smp_admin\",\"password\":\"test123\"}")) + .andExpect(status().isOk()).andReturn(); + ObjectMapper mapper = new ObjectMapper(); + UserRO userRO = mapper.readValue(result.getResponse().getContentAsString(), UserRO.class); + assertNotNull(userRO); + + // when + userRO.setActive(!userRO.isActive()); + userRO.setEmailAddress("test@mail.com"); + userRO.setPassword(UUID.randomUUID().toString()); + if (userRO.getCertificate()==null) { + userRO.setCertificate(new CertificateRO()); + } + userRO.getCertificate().setCertificateId(UUID.randomUUID().toString()); + + mvc.perform(put(PATH+"/"+userRO.getId()).with(SYSTEM_CREDENTIALS) + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(userRO)) + ).andExpect(status().isUnauthorized()); + } + + @Test + public void testUpdateUserList() throws Exception { + // given when + MvcResult result = mvc.perform(get(PATH).with(SYSTEM_CREDENTIALS)). + andExpect(status().isOk()).andReturn(); + ObjectMapper mapper = new ObjectMapper(); + ServiceResult res = mapper.readValue(result.getResponse().getContentAsString(), ServiceResult.class); + assertNotNull(res); + assertFalse(res.getServiceEntities().isEmpty()); + UserRO userRO = mapper.convertValue(res.getServiceEntities().get(0), UserRO.class); + // then + userRO.setActive(!userRO.isActive()); + userRO.setEmailAddress("test@mail.com"); + userRO.setPassword(UUID.randomUUID().toString()); + if (userRO.getCertificate()==null) { + userRO.setCertificate(new CertificateRO()); + } + userRO.getCertificate().setCertificateId(UUID.randomUUID().toString()); + + mvc.perform(put(PATH) + .with(SYSTEM_CREDENTIALS).contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(Arrays.asList(userRO))) + ).andExpect(status().isOk()); + } + + @Test + public void testUpdateUserListWrongAuthentication() throws Exception { + // given when + MvcResult result = mvc.perform(get(PATH).with(SYSTEM_CREDENTIALS)). + andExpect(status().isOk()).andReturn(); + ObjectMapper mapper = new ObjectMapper(); + ServiceResult res = mapper.readValue(result.getResponse().getContentAsString(), ServiceResult.class); + assertNotNull(res); + assertFalse(res.getServiceEntities().isEmpty()); + UserRO userRO = mapper.convertValue(res.getServiceEntities().get(0), UserRO.class); + // then + userRO.setActive(!userRO.isActive()); + userRO.setEmailAddress("test@mail.com"); + userRO.setPassword(UUID.randomUUID().toString()); + if (userRO.getCertificate()==null) { + userRO.setCertificate(new CertificateRO()); + } + userRO.getCertificate().setCertificateId(UUID.randomUUID().toString()); + // anonymous + mvc.perform(put(PATH) + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(Arrays.asList(userRO))) + ).andExpect(status().isUnauthorized()); + + mvc.perform(put(PATH) + .with(ADMIN_CREDENTIALS).contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(Arrays.asList(userRO))) + ).andExpect(status().isUnauthorized()); + + mvc.perform(put(PATH) + .with(SG_ADMIN_CREDENTIALS).contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(Arrays.asList(userRO))) + ).andExpect(status().isUnauthorized()); + } + @Test public void uploadCertificateSystemAdmin() throws Exception { byte[] buff = IOUtils.toByteArray(UserResourceTest.class.getResourceAsStream("/SMPtest.crt")); @@ -123,6 +243,19 @@ public class UserResourceTest { assertEquals("sno=3&subject=1.2.840.113549.1.9.1%3D%23160c736d7040746573742e636f6d%2CCN%3DSMP+test%2CO%3DDIGIT%2CC%3DBE&validfrom=May+22+20%3A59%3A00+2018+GMT&validto=May+22+20%3A56%3A00+2019+GMT&issuer=CN%3DIntermediate+CA%2CO%3DDIGIT%2CC%3DBE", res.getBlueCoatHeader()); } + @Test + public void uploadInvalidCertificate() throws Exception { + byte[] buff = (new String("Not a certficate :) ")).getBytes(); + + // given when + mvc.perform(post(PATH+"/1098765430/certdata") + .with(SYSTEM_CREDENTIALS) + .content(buff)) + .andExpect(status().is5xxServerError()) + .andExpect(content().string(CoreMatchers.containsString(" The certificate is not valid"))); + + } + @Test public void uploadCertificateIdWithEmailSerialNumberInSubjectCertIdTest() throws Exception { String subject = "CN=common name,emailAddress=CEF-EDELIVERY-SUPPORT@ec.europa.eu,serialNumber=1,O=org,ST=My town,postalCode=2151, L=GreatTown,street=My Street. 20, C=BE"; @@ -189,4 +322,38 @@ public class UserResourceTest { } + @Test + public void testValidateDeleteUserOK() throws Exception { + MvcResult result = mvc.perform(post(PATH+"/validateDelete") + .with(SYSTEM_CREDENTIALS) + .contentType(org.springframework.http.MediaType.APPLICATION_JSON) + .content("[5]")) + .andExpect(status().isOk()).andReturn(); + + ObjectMapper mapper = new ObjectMapper(); + DeleteEntityValidation res = mapper.readValue(result.getResponse().getContentAsString(), DeleteEntityValidation.class); + + assertFalse(res.getListIds().isEmpty()); + assertTrue(res.getListDeleteNotPermitedIds().isEmpty()); + assertEquals(5, res.getListIds().get(0).intValue()); + } + + @Test + public void testValidateDeleteUserNotOK() throws Exception { + // note system credential has id 3! + MvcResult result = mvc.perform(post(PATH+"/validateDelete") + .with(SYSTEM_CREDENTIALS) + .contentType(org.springframework.http.MediaType.APPLICATION_JSON) + .content("[3]")) + .andExpect(status().isOk()) + .andReturn(); + + ObjectMapper mapper = new ObjectMapper(); + DeleteEntityValidation res = mapper.readValue(result.getResponse().getContentAsString(), DeleteEntityValidation.class); + + assertTrue(res.getListIds().isEmpty()); + assertEquals("Could not delete logged user!",res.getStringMessage()); + + } + } \ No newline at end of file -- GitLab