Java tutorial
/* * R Service Bus * * Copyright (c) Copyright of Open Analytics NV, 2010-2015 * * =========================================================================== * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.openanalytics.rsb; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.io.StringReader; import java.util.List; import javax.xml.bind.JAXB; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import com.meterware.httpunit.GetMethodWebRequest; import com.meterware.httpunit.PostMethodWebRequest; import com.meterware.httpunit.PutMethodWebRequest; import com.meterware.httpunit.WebConversation; import com.meterware.httpunit.WebRequest; import com.meterware.httpunit.WebResponse; import eu.openanalytics.rsb.config.Configuration; import eu.openanalytics.rsb.config.Configuration.CatalogSection; import eu.openanalytics.rsb.config.PersistedConfiguration; import eu.openanalytics.rsb.rest.types.Catalog; import eu.openanalytics.rsb.rest.types.CatalogDirectory; import eu.openanalytics.rsb.rest.types.CatalogFileType; import eu.openanalytics.rsb.rest.types.RServiPools; /** * @author "OpenAnalytics <rsb.development@openanalytics.eu>" */ public class RestAdminITCase extends AbstractITCase { @Test public void getSystemConfiguration() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new GetMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/system/configuration"); final WebResponse response = wc.sendRequest(request); assertEquals(200, response.getResponseCode()); assertThat(Util.fromJson(response.getText(), PersistedConfiguration.class), is(instanceOf(PersistedConfiguration.class))); } @Test public void putSystemConfiguration() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new PutMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/system/configuration", Thread.currentThread().getContextClassLoader().getResourceAsStream("rsb-configuration.json"), "application/json"); final WebResponse response = wc.sendRequest(request); assertEquals(204, response.getResponseCode()); } @Test public void restart() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new PostMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/system/restart"); final WebResponse response = wc.sendRequest(request); assertEquals(200, response.getResponseCode()); assertEquals("RESTARTED", response.getText()); } @Test public void getRServiPools() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new GetMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/system/rservi_pools"); final WebResponse response = wc.sendRequest(request); assertEquals(200, response.getResponseCode()); final RServiPools rServiPools = JAXB.unmarshal(new StringReader(response.getText()), RServiPools.class); assertFalse(rServiPools.getContents().isEmpty()); } @Test public void getCatalog() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new GetMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/catalog"); final WebResponse response = wc.sendRequest(request); assertEquals(200, response.getResponseCode()); final Catalog catalog = JAXB.unmarshal(new StringReader(response.getText()), Catalog.class); final List<CatalogDirectory> directories1 = catalog.getDirectories(); final List<CatalogDirectory> directories = directories1; // check all catalog dirs assertEquals(4, directories.size()); for (final CatalogDirectory cd : directories) { assertEquals(cd.getType(), Configuration.CatalogSection.valueOf(cd.getType()).toString()); assertTrue(StringUtils.isNotBlank(cd.getPath())); } // check one catalog file final CatalogFileType catalogFile = directories.get(0).getFiles().get(0); assertTrue(StringUtils.isNotBlank(catalogFile.getName())); assertTrue(StringUtils.isNotBlank(catalogFile.getDataUri())); } @Test public void getCatalogFile() throws Exception { final WebConversation wc = new WebConversation(); final WebRequest request = new GetMethodWebRequest( RSB_BASE_URI + "/api/rest/admin/catalog/R_SCRIPTS/test.R"); final WebResponse response = wc.sendRequest(request); assertEquals(200, response.getResponseCode()); assertEquals("text/plain", response.getContentType()); assertEquals(IOUtils.toString(getTestData("test.R")), response.getText()); } @Test public void putCatalogFile() throws Exception { final String testFileName = "fake-" + RandomStringUtils.randomAlphanumeric(20) + ".R"; WebConversation wc = new WebConversation(); WebRequest request = new PutMethodWebRequest( RSB_BASE_URI + "/api/rest/admin/catalog/R_SCRIPTS/" + testFileName, IOUtils.toInputStream("fake R script content for " + testFileName), "text/plain"); WebResponse response = wc.sendRequest(request); assertEquals(201, response.getResponseCode()); assertTrue(StringUtils.isNotBlank(response.getHeaderField("Location"))); SuiteITCase.registerCreatedCatalogFile(CatalogSection.R_SCRIPTS, testFileName); wc = new WebConversation(); request = new PutMethodWebRequest(RSB_BASE_URI + "/api/rest/admin/catalog/R_SCRIPTS/" + testFileName, IOUtils.toInputStream("fake R script replacement content for " + testFileName), "text/plain"); response = wc.sendRequest(request); assertEquals(204, response.getResponseCode()); assertTrue(StringUtils.isBlank(response.getHeaderField("Location"))); } }