package org.openstack.atlas.adapter.itest; import junit.framework.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.openstack.atlas.adapter.exceptions.InsufficientRequestException; import org.openstack.atlas.adapter.exceptions.RollBackException; import org.openstack.atlas.adapter.helpers.ZxtmNameBuilder; import org.openstack.atlas.service.domain.entities.RateLimit; import org.rackspace.stingray.client.StingrayRestClient; import org.rackspace.stingray.client.bandwidth.Bandwidth; import org.rackspace.stingray.client.exception.StingrayRestClientException; import org.rackspace.stingray.client.exception.StingrayRestClientObjectNotFoundException; import java.rmi.RemoteException; public class RateLimitITest extends STMTestBase { @BeforeClass public static void setupClass() throws InterruptedException { Thread.sleep(SLEEP_TIME_BETWEEN_TESTS); setupIvars(); createSimpleLoadBalancer(); } @AfterClass public static void tearDownClass() { removeLoadBalancer(); stmClient.destroy(); } // Test everything together for completeness I guess? @Test(expected = StingrayRestClientObjectNotFoundException.class) public void testSimpleRateLimitOperations() throws StingrayRestClientObjectNotFoundException { String vsName; StingrayRestClient client; RateLimit rateLimit; Bandwidth bandwidth; try { vsName = ZxtmNameBuilder.genVSName(lb); client = new StingrayRestClient(); rateLimit = new RateLimit(); rateLimit.setMaxRequestsPerSecond(5); setRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); rateLimit = new RateLimit(); rateLimit.setMaxRequestsPerSecond(10); updateRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); deleteRateLimit(); bandwidth = getRateLimit(client, vsName); Assert.assertNull(bandwidth); } catch (StingrayRestClientObjectNotFoundException onfe) { throw (onfe); } catch (Exception e) { e.printStackTrace(); } } // Test Get (though we need Set to work for this to work) @Test public void testGetRateLimit() throws Exception { String vsName = ZxtmNameBuilder.genVSName(lb); StingrayRestClient client = new StingrayRestClient(); RateLimit rateLimit = new RateLimit(); Bandwidth bandwidth; rateLimit.setMaxRequestsPerSecond(5); setRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); } // Test Set (though we need Get to work for this to work) @Test public void testSetRateLimit() throws Exception { String vsName = ZxtmNameBuilder.genVSName(lb); StingrayRestClient client = new StingrayRestClient(); RateLimit rateLimit = new RateLimit(); Bandwidth bandwidth; rateLimit.setMaxRequestsPerSecond(10); setRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); rateLimit = new RateLimit(); rateLimit.setMaxRequestsPerSecond(15); updateRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); } // Test Delete (though we need Set and Get for this to work) @Test(expected = StingrayRestClientObjectNotFoundException.class) public void testDeleteRateLimit() throws Exception { String vsName = ZxtmNameBuilder.genVSName(lb); StingrayRestClient client = new StingrayRestClient(); RateLimit rateLimit = new RateLimit(); Bandwidth bandwidth; try { rateLimit.setMaxRequestsPerSecond(20); setRateLimit(rateLimit); bandwidth = getRateLimit(client, vsName); Assert.assertNotNull(bandwidth); Assert.assertEquals(bandwidth.getProperties().getBasic().getMaximum(), rateLimit.getMaxRequestsPerSecond()); } catch (Exception e) { e.printStackTrace(); Assert.fail(); } deleteRateLimit(); bandwidth = getRateLimit(client, vsName); //should throw an exception Assert.assertNull(bandwidth); } private void setRateLimit(RateLimit rateLimit) throws InsufficientRequestException, RollBackException, RemoteException { lb.setRateLimit(rateLimit); stmAdapter.setRateLimit(config, lb, rateLimit); } private void updateRateLimit(RateLimit rateLimit) throws InsufficientRequestException, RollBackException, RemoteException { lb.setRateLimit(rateLimit); stmAdapter.updateRateLimit(config, lb, rateLimit); } private Bandwidth getRateLimit(StingrayRestClient client, String vsName) throws StingrayRestClientObjectNotFoundException, StingrayRestClientException { Bandwidth b = client.getBandwidth(vsName); return b; } private void deleteRateLimit() throws InsufficientRequestException, RollBackException, RemoteException { stmAdapter.deleteRateLimit(config, lb); } }