package de.hsadmin.remote; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.junit.After; import org.junit.Before; import org.junit.Test; import de.hsadmin.core.util.Config; import de.hsadmin.core.util.TextUtil; import de.hsadmin.hostsharing.BasePacType; public class PacMigrationTest { private static final String MODULE = "pac"; private XmlRpcClient client; private RemoteCASHelper cas; private Config config; @Before public void setUp() throws Exception { client = RemoteTestHelper.getClient(); cas = new RemoteCASHelper(); config = Config.getInstance(); } @After public void tearDown() throws Exception { client = null; cas = null; } @Test public void testSW() { testCreateSW(); testUpdateSW(); testDeleteSW(); } @Test public void testDW() { testCreateDW(); testUpdateDW(); } public void testCreateDW() { int count = getPacsCount(); String user = "ad"; try { String grantingTicketURL = cas.getGrantingTicketURL(user); Object execute = addPac(user, grantingTicketURL, "aaa04", BasePacType.PAC_DW, "176.9.242.77", 640, 4, 1); assertEquals(count + 1, getPacsCount()); validateAddedPac(execute, BasePacType.PAC_DW, 640, 4, 1); setPacAdminPassword(user, grantingTicketURL, "aaa04", "test123"); } catch (XmlRpcException e) { fail(e.getMessage()); } } public void testCreateSW() { int count = getPacsCount(); String user = "ad"; try { String grantingTicketURL = cas.getGrantingTicketURL(user); Object execute = addPac(user, grantingTicketURL, "aaa05", BasePacType.PAC_SW, "176.9.242.77", 1024, 8, -1); assertEquals(count + 1, getPacsCount()); validateAddedPac(execute, BasePacType.PAC_SW, 1024, 8, -1); setPacAdminPassword(user, grantingTicketURL, "aaa05", "test123"); } catch (XmlRpcException e) { fail(e.getMessage()); } } public void testUpdateDW() { String user = "ad"; try { String grantingTicketURL = cas.getGrantingTicketURL(user); Map setParams = new HashMap(); Map components = new HashMap(); setParams.put("basepac", BasePacType.PAC_WEB); setParams.put("components", components); // components.put("QUOTA", "2048"); // does not yet work Map whereParams = new HashMap(); whereParams.put("name", "aaa04"); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams, whereParams }; Object execute = client.execute(MODULE + ".update", params); assertNotNull(execute); params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), whereParams }; execute = client.execute(MODULE + ".search", params); assertNotNull(execute); assertTrue(execute instanceof Object[]); Object[] untypedResultArray = (Object[]) execute; assertEquals(1, untypedResultArray.length); assertTrue(untypedResultArray[0] instanceof Map); @SuppressWarnings("unchecked") Map pacResultMap = (Map) untypedResultArray[0]; assertEquals(BasePacType.PAC_WEB, pacResultMap.get("basepac")); Object compMapObj = pacResultMap.get("components"); assertTrue(compMapObj instanceof Map); @SuppressWarnings("unchecked") Map compMap = (Map) compMapObj; assertEquals("1024", compMap.get("QUOTA")); // assertEquals("2048", compMap.get("QUOTA")); // does not yet work assertEquals("5", compMap.get("TRAFFIC")); } catch (XmlRpcException e) { fail(e.getMessage()); } } public void testUpdateSW() { String user = "ad"; try { String grantingTicketURL = cas.getGrantingTicketURL(user); Map setParams = new HashMap(); Map components = new HashMap(); setParams.put("basepac", BasePacType.PAC_WEB); setParams.put("components", components); // components.put("QUOTA", "2048"); // does not yet work Map whereParams = new HashMap(); whereParams.put("name", "aaa05"); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams, whereParams }; Object execute = client.execute(MODULE + ".update", params); assertNotNull(execute); params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), whereParams }; execute = client.execute(MODULE + ".search", params); assertNotNull(execute); assertTrue(execute instanceof Object[]); Object[] untypedResultArray = (Object[]) execute; assertEquals(1, untypedResultArray.length); assertTrue(untypedResultArray[0] instanceof Map); @SuppressWarnings("unchecked") Map pacResultMap = (Map) untypedResultArray[0]; assertEquals(BasePacType.PAC_WEB, pacResultMap.get("basepac")); Object compMapObj = pacResultMap.get("components"); assertTrue(compMapObj instanceof Map); @SuppressWarnings("unchecked") Map compMap = (Map) compMapObj; assertEquals("1024", compMap.get("QUOTA")); // assertEquals("2048", compMap.get("QUOTA")); // does not yet work assertEquals("10", compMap.get("TRAFFIC")); } catch (XmlRpcException e) { fail(e.getMessage()); } } public void testDeleteSW() { String user = "ad"; try { int count = getPacsCount(); String grantingTicketURL = cas.getGrantingTicketURL(user); Map setParams = new HashMap(); setParams.put("created", TextUtil.format(daysBack(10))); Map whereParams = new HashMap(); whereParams.put("name", "aaa05"); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams, whereParams }; Object execute = client.execute(MODULE + ".update", params); assertNotNull(execute); setParams = new HashMap(); setParams.put("cancelled", TextUtil.format(daysBack(1))); whereParams = new HashMap(); whereParams.put("name", "aaa05"); params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams, whereParams }; execute = client.execute(MODULE + ".update", params); assertNotNull(execute); whereParams.put("name", "aaa05"); params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), whereParams }; execute = client.execute(MODULE + ".delete", params); assertEquals(count - 1, getPacsCount()); } catch (XmlRpcException e) { fail(e.getMessage()); } } private Date daysBack(int days) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_YEAR, -days); return calendar.getTime(); } private int getPacsCount() { int count = 0; String user = "hsh00-aaa"; String grantingTicketURL = cas.getGrantingTicketURL(user); Map whereParams = new HashMap(); whereParams.put("customer", config.getProperty("accountprefix.customer") + "-aaa"); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), whereParams }; try { Object execute = client.execute(MODULE + ".search", params); Object[] result = (Object[]) execute; count = result.length; } catch (XmlRpcException e) { fail(e.getMessage()); } return count; } private Object addPac(String user, String grantingTicketURL, String pacName, String basepacName, String inetAddr, int quota, int traffic, int daemons) throws XmlRpcException { Map setParams = new HashMap(); setParams.put("name", pacName); setParams.put("hive", "h99"); setParams.put("customer", config.getProperty("accountprefix.customer") + "-aaa"); setParams.put("basepac", basepacName); setParams.put("curinetaddr", inetAddr); HashMap components = new HashMap(); components.put("QUOTA", Integer.toString(quota)); components.put("TRAFFIC", Integer.toString(traffic)); if (daemons >= 0) { components.put("DAEMON", Integer.toString(daemons)); } setParams.put("components", components); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams }; Object execute = client.execute(MODULE + ".add", params); assertTrue(execute instanceof Map); Map whereParams = new HashMap(); whereParams.put("name", pacName); params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), whereParams }; execute = client.execute(MODULE + ".search", params); return execute; } private void validateAddedPac(Object execute, String basepacName, int quota, int traffic, int daemons) { assertNotNull(execute); assertTrue(execute instanceof Object[]); Object[] untypedResultArray = (Object[]) execute; assertEquals(1, untypedResultArray.length); assertTrue(untypedResultArray[0] instanceof Map); @SuppressWarnings("unchecked") Map pacResultMap = (Map) untypedResultArray[0]; assertEquals(basepacName, pacResultMap.get("basepac")); Object compMapObj = pacResultMap.get("components"); assertTrue(compMapObj instanceof Map); @SuppressWarnings("unchecked") Map compMap = (Map) compMapObj; assertEquals(Integer.toString(quota), compMap.get("QUOTA")); assertEquals(Integer.toString(traffic), compMap.get("TRAFFIC")); if (daemons >= 0) { assertEquals(Integer.toString(daemons), compMap.get("DAEMON")); } else { assertTrue(compMap.get("DAEMON") == null); } } private void setPacAdminPassword(String user, String grantingTicketURL, String pacName, String password) throws XmlRpcException { HashMap whereParams = new HashMap(); HashMap setParams = new HashMap(); whereParams.put("name", pacName); setParams.put("password", password); Object[] params = new Object[] { user, cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), setParams, whereParams }; client.execute("user.update", params); } }