// // Copyright 2010 Cinch Logic Pty Ltd. // // http://www.chililog.com // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package org.chililog.server.workbench; import static org.junit.Assert.*; import java.net.HttpURLConnection; import java.net.URLEncoder; import java.util.HashMap; import java.util.regex.Pattern; import junit.framework.Assert; import org.chililog.server.common.JsonTranslator; import org.chililog.server.data.MongoConnection; import org.chililog.server.data.RepositoryFieldConfigBO; import org.chililog.server.data.RepositoryConfigBO; import org.chililog.server.data.RepositoryConfigController; import org.chililog.server.data.RepositoryParserConfigBO; import org.chililog.server.data.UserBO; import org.chililog.server.data.UserController; import org.chililog.server.data.RepositoryConfigBO.MaxMemoryPolicy; import org.chililog.server.data.RepositoryConfigBO.Status; import org.chililog.server.data.RepositoryParserConfigBO.AppliesTo; import org.chililog.server.data.RepositoryParserConfigBO.ParseFieldErrorHandling; import org.chililog.server.engine.parsers.DelimitedEntryParser; import org.chililog.server.workbench.WorkbenchService; import org.chililog.server.workbench.workers.ErrorAO; import org.chililog.server.workbench.workers.RepositoryFieldConfigAO; import org.chililog.server.workbench.workers.RepositoryConfigAO; import org.chililog.server.workbench.workers.RepositoryParserConfigAO; import org.chililog.server.workbench.workers.RepositoryPropertyConfigAO; import org.chililog.server.workbench.workers.UserAO; import org.chililog.server.workbench.workers.Worker; import org.jboss.netty.handler.codec.http.HttpMethod; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; /** * Test the Repository Info API * * @author vibul * */ public class RepositoryConfigTest { private static DB _db; private static String _systemAdminAuthToken; private static String _repoAdminAuthToken; private static String _repoWorkbenchUserAuthToken; @BeforeClass public static void classSetup() throws Exception { _db = MongoConnection.getInstance().getConnection(); assertNotNull(_db); // Clean up old user test data if any exists DBCollection coll = _db.getCollection(UserController.MONGODB_COLLECTION_NAME); Pattern pattern = Pattern.compile("^TestRepoInfo[\\w]*$"); DBObject query = new BasicDBObject(); query.put("username", pattern); coll.remove(query); // Clean up old repository test data if any exists coll = _db.getCollection(RepositoryConfigController.MONGODB_COLLECTION_NAME); pattern = Pattern.compile("^test_repoinfo[\\w]*$"); query = new BasicDBObject(); query.put("name", pattern); coll.remove(query); // Create system admin user UserBO user = new UserBO(); user.setUsername("TestRepoInfo_SystemAdmin"); user.setEmailAddress("TestRepoInfo_SystemAdmin@chililog.com"); user.setPassword("hello", true); user.addRole(UserBO.SYSTEM_ADMINISTRATOR_ROLE_NAME); user.setStatus(org.chililog.server.data.UserBO.Status.ENABLED); UserController.getInstance().save(_db, user); // Create repository admin user user = new UserBO(); user.setUsername("TestRepoInfo_RepoAdmin"); user.setPassword("hello", true); user.setEmailAddress("TestRepoInfo_RepoAdmin@chililog.com"); user.addRole("repo.test_repoinfo_common.administrator"); user.setStatus(org.chililog.server.data.UserBO.Status.ENABLED); UserController.getInstance().save(_db, user); // Create repository workbench user user = new UserBO(); user.setUsername("TestRepoInfo_RepoWorkbench"); user.setPassword("hello", true); user.setEmailAddress("TestRepoInfo_RepoWorkbench@chililog.com"); user.addRole("repo.test_repoinfo_common.workbench"); user.setStatus(org.chililog.server.data.UserBO.Status.ENABLED); UserController.getInstance().save(_db, user); // Create test repo RepositoryConfigBO repoInfo = new RepositoryConfigBO(); repoInfo.setName("test_repoinfo_common"); repoInfo.setDisplayName("Test 1"); repoInfo.setDescription("description"); repoInfo.setStoreEntriesIndicator(true); repoInfo.setStorageQueueDurableIndicator(true); repoInfo.setStorageQueueWorkerCount(10); repoInfo.setStorageMaxKeywords(100); repoInfo.setMaxMemory(2); repoInfo.setMaxMemoryPolicy(MaxMemoryPolicy.BLOCK); repoInfo.setPageSize(1); RepositoryParserConfigBO repoParserInfo = new RepositoryParserConfigBO(); repoParserInfo.setName("parser1"); repoParserInfo.setAppliesTo(AppliesTo.All); repoParserInfo.setClassName(DelimitedEntryParser.class.getName()); repoParserInfo.setMaxKeywords(101); repoParserInfo.setParseFieldErrorHandling(ParseFieldErrorHandling.SkipEntry); repoParserInfo.getProperties().put(DelimitedEntryParser.DELIMITER_PROPERTY_NAME, "|"); repoInfo.getParsers().add(repoParserInfo); RepositoryFieldConfigBO repoFieldInfo = new RepositoryFieldConfigBO(); repoFieldInfo.setName("field1"); repoFieldInfo.setDataType(RepositoryFieldConfigBO.DataType.String); repoFieldInfo.getProperties().put(DelimitedEntryParser.POSITION_FIELD_PROPERTY_NAME, "1"); repoParserInfo.getFields().add(repoFieldInfo); RepositoryConfigController.getInstance().save(_db, repoInfo); // Start web server WorkbenchService.getInstance().start(); // Login _systemAdminAuthToken = ApiUtils.login("TestRepoInfo_SystemAdmin", "hello"); _repoAdminAuthToken = ApiUtils.login("TestRepoInfo_RepoAdmin", "hello"); _repoWorkbenchUserAuthToken = ApiUtils.login("TestRepoInfo_RepoWorkbench", "hello"); } @AfterClass public static void classTeardown() { // Clean up old user test data if any exists DBCollection coll = _db.getCollection(UserController.MONGODB_COLLECTION_NAME); Pattern pattern = Pattern.compile("^TestRepoInfo[\\w]*$"); DBObject query = new BasicDBObject(); query.put("username", pattern); coll.remove(query); // Clean up old repository test data if any exists coll = _db.getCollection(RepositoryConfigController.MONGODB_COLLECTION_NAME); pattern = Pattern.compile("^test_repoinfo[\\w]*$"); query = new BasicDBObject(); query.put("name", pattern); coll.remove(query); WorkbenchService.getInstance().stop(); } /** * Create, Get, Update, Delete * * @throws Exception */ @Test public void testCRUD() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Create httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _systemAdminAuthToken); RepositoryFieldConfigAO f1 = new RepositoryFieldConfigAO(); f1.setName("field1"); f1.setDataType(RepositoryFieldConfigBO.DataType.String); f1.setProperties(new RepositoryPropertyConfigAO[] { new RepositoryPropertyConfigAO("F1", "F2"), new RepositoryPropertyConfigAO("F3", "F4") }); RepositoryFieldConfigAO f2 = new RepositoryFieldConfigAO(); f2.setName("field2"); f2.setDataType(RepositoryFieldConfigBO.DataType.Integer); f2.setProperties(new RepositoryPropertyConfigAO[] { new RepositoryPropertyConfigAO("F5", "F6"), new RepositoryPropertyConfigAO("F7", "F8") }); RepositoryConfigAO createRepoInfoAO = new RepositoryConfigAO(); createRepoInfoAO.setName("test_repoinfo_1"); createRepoInfoAO.setDisplayName("Repository Test 1"); createRepoInfoAO.setDescription("description"); createRepoInfoAO.setStartupStatus(Status.ONLINE); createRepoInfoAO.setStoreEntriesIndicator(true); createRepoInfoAO.setStorageQueueDurableIndicator(true); createRepoInfoAO.setStorageQueueWorkerCount(2); createRepoInfoAO.setStorageMaxKeywords(100); createRepoInfoAO.setMaxMemory(10); createRepoInfoAO.setMaxMemoryPolicy(MaxMemoryPolicy.BLOCK); createRepoInfoAO.setPageSize(2); RepositoryParserConfigAO createRepoParserInfo = new RepositoryParserConfigAO(); createRepoParserInfo.setName("parser1"); createRepoParserInfo.setAppliesTo(AppliesTo.All); createRepoParserInfo.setAppliesToSourceFilter("sss"); createRepoParserInfo.setAppliesToHostFilter("hhh"); createRepoParserInfo.setClassName(DelimitedEntryParser.class.getName()); createRepoParserInfo.setMaxKeywords(101); createRepoParserInfo.setParseFieldErrorHandling(ParseFieldErrorHandling.SkipEntry); createRepoInfoAO.setParsers(new RepositoryParserConfigAO[] { createRepoParserInfo }); createRepoParserInfo.setFields(new RepositoryFieldConfigAO[] { f1, f2 }); createRepoParserInfo.setProperties(new RepositoryPropertyConfigAO[] { new RepositoryPropertyConfigAO("1", "2"), new RepositoryPropertyConfigAO("3", "4") }); ApiUtils.sendJSON(httpConn, createRepoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO createResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO.class); assertEquals("test_repoinfo_1", createResponseAO.getName()); assertEquals("Repository Test 1", createResponseAO.getDisplayName()); assertEquals("description", createResponseAO.getDescription()); assertEquals(Status.ONLINE, createResponseAO.getStartupStatus()); assertEquals(true, createResponseAO.getStoreEntriesIndicator()); assertEquals(true, createResponseAO.getStorageQueueDurableIndicator()); assertEquals(2, createResponseAO.getStorageQueueWorkerCount()); assertEquals(100L, createResponseAO.getStorageMaxKeywords()); assertEquals(10, createResponseAO.getMaxMemory()); assertEquals(MaxMemoryPolicy.BLOCK, createResponseAO.getMaxMemoryPolicy()); assertEquals(2, createResponseAO.getPageSize()); assertEquals(new Long(1), createResponseAO.getDocumentVersion()); RepositoryParserConfigAO createParserResponseAO = createResponseAO.getParsers()[0]; assertEquals("parser1", createParserResponseAO.getName()); assertEquals(AppliesTo.All, createParserResponseAO.getAppliesTo()); assertEquals("sss", createParserResponseAO.getAppliesToSourceFilter()); assertEquals("hhh", createParserResponseAO.getAppliesToHostFilter()); assertEquals(DelimitedEntryParser.class.getName(), createParserResponseAO.getClassName()); assertEquals(101L, createParserResponseAO.getMaxKeywords()); assertEquals(2, createParserResponseAO.getProperties().length); assertEquals(ParseFieldErrorHandling.SkipEntry, createParserResponseAO.getParseFieldErrorHandling()); assertEquals(2, createParserResponseAO.getProperties().length); assertEquals(2, createParserResponseAO.getFields().length); assertEquals("field1", createParserResponseAO.getFields()[0].getName()); assertEquals(RepositoryFieldConfigBO.DataType.String, createParserResponseAO.getFields()[0].getDataType()); assertEquals(2, createParserResponseAO.getFields()[0].getProperties().length); assertEquals("field2", createParserResponseAO.getFields()[1].getName()); assertEquals(RepositoryFieldConfigBO.DataType.Integer, createParserResponseAO.getFields()[1].getDataType()); assertEquals(2, createParserResponseAO.getFields()[1].getProperties().length); // Read one record httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + createResponseAO.getDocumentID(), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO readResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO.class); assertEquals("test_repoinfo_1", readResponseAO.getName()); assertEquals("Repository Test 1", readResponseAO.getDisplayName()); assertEquals("description", readResponseAO.getDescription()); assertEquals(Status.ONLINE, readResponseAO.getStartupStatus()); assertEquals(true, readResponseAO.getStoreEntriesIndicator()); assertEquals(true, readResponseAO.getStorageQueueDurableIndicator()); assertEquals(2, readResponseAO.getStorageQueueWorkerCount()); assertEquals(100L, createResponseAO.getStorageMaxKeywords()); assertEquals(10, readResponseAO.getMaxMemory()); assertEquals(MaxMemoryPolicy.BLOCK, readResponseAO.getMaxMemoryPolicy()); assertEquals(2, readResponseAO.getPageSize()); createParserResponseAO = createResponseAO.getParsers()[0]; assertEquals("parser1", createParserResponseAO.getName()); assertEquals(AppliesTo.All, createParserResponseAO.getAppliesTo()); assertEquals("sss", createParserResponseAO.getAppliesToSourceFilter()); assertEquals("hhh", createParserResponseAO.getAppliesToHostFilter()); assertEquals(DelimitedEntryParser.class.getName(), createParserResponseAO.getClassName()); assertEquals(101L, createParserResponseAO.getMaxKeywords()); assertEquals(2, createParserResponseAO.getProperties().length); assertEquals(ParseFieldErrorHandling.SkipEntry, createParserResponseAO.getParseFieldErrorHandling()); assertEquals(2, createParserResponseAO.getProperties().length); assertEquals(2, createParserResponseAO.getFields().length); assertEquals("field1", createParserResponseAO.getFields()[0].getName()); assertEquals(RepositoryFieldConfigBO.DataType.String, createParserResponseAO.getFields()[0].getDataType()); assertEquals(2, createParserResponseAO.getFields()[0].getProperties().length); assertEquals("field2", createParserResponseAO.getFields()[1].getName()); assertEquals(RepositoryFieldConfigBO.DataType.Integer, createParserResponseAO.getFields()[1].getDataType()); assertEquals(2, createParserResponseAO.getFields()[1].getProperties().length); // Update httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + createResponseAO.getDocumentID(), HttpMethod.PUT, _systemAdminAuthToken); readResponseAO.setName("test_repoinfo_1_update"); readResponseAO.setStorageMaxKeywords(200); readResponseAO.getParsers()[0].setMaxKeywords(201); readResponseAO.getParsers()[0].setFields(new RepositoryFieldConfigAO[] { f1 }); readResponseAO.getParsers()[0].setProperties(new RepositoryPropertyConfigAO[] { new RepositoryPropertyConfigAO( "1", "2") }); ApiUtils.sendJSON(httpConn, readResponseAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO updateResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO.class); assertEquals("test_repoinfo_1_update", updateResponseAO.getName()); assertEquals(200, updateResponseAO.getStorageMaxKeywords()); assertEquals(201, readResponseAO.getParsers()[0].getMaxKeywords()); assertEquals(1, readResponseAO.getParsers()[0].getProperties().length); assertEquals(1, readResponseAO.getParsers()[0].getFields().length); // Get list httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config?name=" + URLEncoder.encode("^test_repoinfo[\\w]*$", "UTF-8"), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO[] getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(2, getListResponseAO.length); // Delete httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + createResponseAO.getDocumentID(), HttpMethod.DELETE, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check204NoContentResponse(responseCode.toString(), headers); // Get record to check if it is gone httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + createResponseAO.getDocumentID(), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); ErrorAO errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Data.RepoInfo.NotFoundError", errorAO.getErrorCode()); } /** * Test access by repo admin users * * @throws Exception */ @Test public void testRepoAdminUser() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Get chililog repository httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config?name=chililog", HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO[] getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(1, getListResponseAO.length); RepositoryConfigAO chililogRepoInfoAO = getListResponseAO[0]; // Get list - should only get back repositories we can access httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config?", HttpMethod.GET, _repoAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(1, getListResponseAO.length); assertEquals("test_repoinfo_common", getListResponseAO[0].getName()); assertEquals(3, getListResponseAO[0].getUsers().length); for (String user : getListResponseAO[0].getUsers()) { if (!user.equals("admin=system.administrator") && !user.equals("TestRepoInfo_SystemAdmin=system.administrator") && !user.equals("TestRepoInfo_RepoWorkbench=repo.test_repoinfo_common.workbench")) { Assert.fail("Invalid users have access to this repository"); } } // Create - not authroized httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _repoAdminAuthToken); RepositoryConfigAO repoInfoAO = new RepositoryConfigAO(); repoInfoAO.setName("test_repoinfo_1"); repoInfoAO.setDisplayName("Repository Test 1"); repoInfoAO.setDescription("description"); ApiUtils.sendJSON(httpConn, repoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); ErrorAO errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); // Update - authorized for repo on which we have permission httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.PUT, _repoAdminAuthToken); ApiUtils.sendJSON(httpConn, getListResponseAO[0]); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); // Update - not authorized for repo with no permission httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + chililogRepoInfoAO.getDocumentID(), HttpMethod.PUT, _repoAdminAuthToken); ApiUtils.sendJSON(httpConn, chililogRepoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); // Delete - not authorized httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.DELETE, _repoAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); } /** * Test access by repo power users * * @throws Exception */ @Test public void testRepoWorkbenchUser() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Get chililog repository httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config?name=chililog", HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO[] getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(1, getListResponseAO.length); RepositoryConfigAO chililogRepoInfoAO = getListResponseAO[0]; // Get list - should only get back repositories we can access httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config?", HttpMethod.GET, _repoWorkbenchUserAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(1, getListResponseAO.length); assertEquals("test_repoinfo_common", getListResponseAO[0].getName()); // Create - not authroized httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _repoWorkbenchUserAuthToken); RepositoryConfigAO repoInfoAO = new RepositoryConfigAO(); repoInfoAO.setName("test_repoinfo_1"); repoInfoAO.setDisplayName("Repository Test 1"); repoInfoAO.setDescription("description"); ApiUtils.sendJSON(httpConn, repoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); ErrorAO errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); // Update - not authorized for repo on which we have permission httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.PUT, _repoWorkbenchUserAuthToken); ApiUtils.sendJSON(httpConn, getListResponseAO[0]); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); // Update - not authorized for repo with no permission httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + chililogRepoInfoAO.getDocumentID(), HttpMethod.PUT, _repoWorkbenchUserAuthToken); ApiUtils.sendJSON(httpConn, chililogRepoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); // Delete - not authorized httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.DELETE, _repoWorkbenchUserAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check401UnauthorizedResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.NotAuthorizedError", errorAO.getErrorCode()); } /** * Try put and delete without an ID in URI * * @throws Exception */ @Test public void testMissingID() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Update httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.PUT, _systemAdminAuthToken); RepositoryConfigAO repoInfoAO = new RepositoryConfigAO(); repoInfoAO.setName("test_repoinfo_3"); repoInfoAO.setDisplayName("Repository Test 3"); repoInfoAO.setDescription("description"); ApiUtils.sendJSON(httpConn, repoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); ErrorAO errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.UriPathParameterError", errorAO.getErrorCode()); // Delete httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.DELETE, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.UriPathParameterError", errorAO.getErrorCode()); } /** * Try put without an ID in URI * * @throws Exception */ @Test public void testListing() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Get list - no records httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config?name=" + URLEncoder.encode("^xxxxxxxxx[\\w]*$", "UTF-8"), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check204NoContentResponse(responseCode.toString(), headers); assertEquals("", responseContent.toString()); assertFalse(headers.containsKey(Worker.PAGE_COUNT_HEADER)); // Get list - page 1 httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config?records_per_page=1&start_page=1&do_page_count=true&name=" + URLEncoder.encode("^test_repoinfo[\\w]*$", "UTF-8"), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); UserAO[] getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), UserAO[].class); assertEquals(1, getListResponseAO.length); String pageCountHeader = headers.get(Worker.PAGE_COUNT_HEADER); assertEquals("1", pageCountHeader); // Get list - page 2 (no more records) httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config?records_per_page=1&start_page=2&name=" + URLEncoder.encode("^test_repoinfo[\\w]*$", "UTF-8"), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check204NoContentResponse(responseCode.toString(), headers); assertEquals("", responseContent.toString()); } /** * Bad content * * @throws Exception */ @Test public void testBadContent() throws Exception { HttpURLConnection httpConn; StringBuilder responseContent = new StringBuilder(); StringBuilder responseCode = new StringBuilder(); HashMap<String, String> headers = new HashMap<String, String>(); // Create no content httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); ErrorAO errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.RequiredContentError", errorAO.getErrorCode()); // Create no name httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _systemAdminAuthToken); RepositoryConfigAO createRepoInfoAO = new RepositoryConfigAO(); // createRepoInfoAO.setName("test_repoinfo_1"); createRepoInfoAO.setDisplayName("Repository Test 1"); createRepoInfoAO.setDescription("description"); createRepoInfoAO.setStartupStatus(Status.ONLINE); createRepoInfoAO.setStoreEntriesIndicator(true); createRepoInfoAO.setStorageQueueDurableIndicator(true); createRepoInfoAO.setStorageQueueWorkerCount(2); createRepoInfoAO.setMaxMemory(10); createRepoInfoAO.setMaxMemoryPolicy(MaxMemoryPolicy.BLOCK); createRepoInfoAO.setPageSize(2); ApiUtils.sendJSON(httpConn, createRepoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Data.MongoDB.MissingRequiredFieldError", errorAO.getErrorCode()); // Create no class name httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config", HttpMethod.POST, _systemAdminAuthToken); RepositoryParserConfigAO createRepoParserInfo = new RepositoryParserConfigAO(); createRepoParserInfo.setName("parser1"); createRepoParserInfo.setAppliesTo(AppliesTo.All); createRepoParserInfo.setClassName(""); createRepoInfoAO.setDisplayName("Repository Test 1"); createRepoInfoAO.setParsers(new RepositoryParserConfigAO[] { createRepoParserInfo }); ApiUtils.sendJSON(httpConn, createRepoInfoAO); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Data.MongoDB.MissingRequiredFieldError", errorAO.getErrorCode()); // Update no content httpConn = ApiUtils.getHttpURLConnection("http://localhost:8989/api/repository_config/12341234", HttpMethod.PUT, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.RequiredContentError", errorAO.getErrorCode()); // Update no name httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config?name=" + URLEncoder.encode("^test_repoinfo[\\w]*$", "UTF-8"), HttpMethod.GET, _systemAdminAuthToken); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check200OKResponse(responseCode.toString(), headers); RepositoryConfigAO[] getListResponseAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), RepositoryConfigAO[].class); assertEquals(1, getListResponseAO.length); httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.PUT, _systemAdminAuthToken); getListResponseAO[0].setName(null); ApiUtils.sendJSON(httpConn, getListResponseAO[0]); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Data.MongoDB.MissingRequiredFieldError", errorAO.getErrorCode()); // Update no doc version httpConn = ApiUtils.getHttpURLConnection( "http://localhost:8989/api/repository_config/" + getListResponseAO[0].getDocumentID(), HttpMethod.PUT, _systemAdminAuthToken); getListResponseAO[0].setName("abc"); getListResponseAO[0].setDocumentVersion(null); ApiUtils.sendJSON(httpConn, getListResponseAO[0]); ApiUtils.getResponse(httpConn, responseContent, responseCode, headers); ApiUtils.check400BadRequestResponse(responseCode.toString(), headers); errorAO = JsonTranslator.getInstance().fromJson(responseContent.toString(), ErrorAO.class); assertEquals("ChiliLogException:Workbench.RequiredFieldError", errorAO.getErrorCode()); } }