pulled latest from master

This commit is contained in:
unknown
2019-05-17 09:14:50 +01:00
28 changed files with 459 additions and 286 deletions

View File

@@ -12,7 +12,7 @@
<description>Test Project to test Search Service and Analytics Features on a complete setup of Alfresco, Share</description>
<properties>
<tas.rest.api.version>6.0.0.3</tas.rest.api.version>
<tas.cmis.api.version>6.0.0.1</tas.cmis.api.version>
<tas.cmis.api.version>6.0.0.0</tas.cmis.api.version>
<tas.utility.version>2.0.10</tas.utility.version>
<rm.version>2.6.0</rm.version>
<suiteXmlFile>src/test/resources/SearchSuite.xml</suiteXmlFile>
@@ -22,6 +22,7 @@
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
<jackson.databind.version>2.7.7</jackson.databind.version>
</properties>
<build>
<plugins>
@@ -54,24 +55,24 @@
<artifactId>restapi-test</artifactId>
<version>${tas.rest.api.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.alfresco.tas</groupId>
<artifactId>cmis-test</artifactId>
<version>${tas.cmis.api.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
@@ -79,18 +80,23 @@
<version>${rm.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.databind.version}</version>
</dependency>
<dependency>
<groupId>org.alfresco</groupId>
<artifactId>alfresco-rm-automation-community-rest-api</artifactId>
<version>${rm.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- alfresco tester settings -->
<dependency>

View File

@@ -0,0 +1,46 @@
package org.alfresco.search;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface TestGroup
{
public static final String SANITY = "sanity";
public static final String REGRESSION = "regression";
public static final String ENTERPRISE = "enterprise";
public static final String SEARCH = "search";
public static final String CMIS = "cmis";
public static final String REST_API = "rest-api";
public static final String PREUPGRADE = "pre-upgrade";
public static final String POSTUPGRADE = "post-upgrade";
// Search: Minimum Version Required
public static final String ASS_1 = "ASS_1.0.0"; // Alfresco Search Services 1.0. Does not work with Solr4
public static final String ASS_112 = "ASS_1.1.2"; // Alfresco Search Services 1.1.2
public static final String ASS_12 = "ASS_1.2.0"; // Alfresco Search Services 1.2
public static final String PreASS_121 = "PreASS_1.2.1"; // Alfresco Search Services Prior to ASS 1.2.1
public static final String ASS_121 = "ASS_1.2.1"; // Alfresco Search Services 1.2.1
public static final String ASS_13 = "ASS_1.3.0"; // Alfresco Search Services 1.3
public static final String ASS_1302 = "ASS_1.3.0.2"; // Alfresco Search Services 1.3.0.2 (Fingerprint MNT)
public static final String ASS_14 = "ASS_1.4.0"; // Alfresco Search Services 1.4
public static final String ASS_MASTER_SLAVE = "ASS_Master_Slave"; // Alfresco Search Services using master slave configurations
public static final String ASS_MASTER ="ASS_Master"; // Alfresco search services using master/stand alone mode
public static final String INSIGHT_10 = "InsightEngine_1.0.0"; // Alfresco Insight Engine 1.0
public static final String INSIGHT_11 = "InsightEngine_1.1.0"; // Alfresco Insight Engine 1.1
public static final String INSIGHT_12 = "InsightEngine_1.2.0"; // Alfresco Insight Engine 1.2
public static final String NOT_INSIGHT_ENGINE = "Not_InsightEngine"; // When Alfresco Insight Engine 1.0 isn't running
public static final String SOLR = "SOLR"; //To be used for tests for /solr/alfresco/* end-points
public static final String ACS_52n = "ACS_52n"; // Alfresco Content Services 5.2.n
public static final String ACS_60n = "ACS_60n"; // Alfresco Content Services 6.0 or above
public static final String ACS_61n = "ACS_61n"; // Alfresco Content Services 6.1 or above
}

View File

@@ -10,14 +10,12 @@ import org.alfresco.cmis.CmisWrapper;
import org.alfresco.dataprep.ContentService;
import org.alfresco.dataprep.SiteService.Visibility;
import org.alfresco.rest.core.RestProperties;
import org.alfresco.rest.core.RestResponse;
import org.alfresco.rest.core.RestWrapper;
import org.alfresco.rest.search.RestRequestHighlightModel;
import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.SearchNodeModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.rest.search.SearchSqlRequest;
import org.alfresco.utility.LogFactory;
import org.alfresco.utility.TasProperties;
import org.alfresco.utility.Utility;
@@ -32,7 +30,6 @@ import org.alfresco.utility.model.UserModel;
import org.alfresco.utility.network.ServerHealth;
import org.apache.chemistry.opencmis.client.api.CmisObject;
import org.apache.chemistry.opencmis.client.api.Session;
import org.hamcrest.Matchers;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -83,10 +80,10 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
@Autowired
@Getter(value = PROTECTED)
private ContentService contentService;
protected UserModel testUser, adminUserModel;
protected SiteModel testSite;
protected static String unique_searchString;
public static final String NODE_PREFIX = "workspace/SpacesStore/";
@@ -99,7 +96,7 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
deployCustomModel("model/music-model.xml");
deployCustomModel("model/finance-model.xml");
}
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception
{
@@ -107,12 +104,12 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
adminUserModel = dataUser.getAdminUser();
testUser = dataUser.createRandomTestUser("UserSearch");
testSite = new SiteModel(RandomData.getRandomName("SiteSearch"));
testSite.setVisibility(Visibility.PRIVATE);
testSite = dataSite.usingUser(testUser).createSite(testSite);
unique_searchString = testSite.getTitle().replace("SiteSearch", "Unique");
dataUser.addUserToSite(testUser, testSite, UserRole.SiteContributor);
@@ -136,7 +133,7 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
}
return modelDeployed;
}
public boolean deactivateCustomModel(String fileName)
{
Boolean modelDeactivated = false;
@@ -227,7 +224,6 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
}
/**
*
* Helper method which create an http post request to Search API end point.
* Executes the given search request without throwing checked exceptions (a {@link RuntimeException} will be thrown in case).
*
@@ -250,16 +246,18 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
* Wait for Solr to finish indexing and search to return appropriate results
*
* @param userQuery: Search Query
* @param contentName that's expected to be included / excluded from the results
* @param contentToFind that's expected to be included / excluded from the results
* @param expectedInResults
* @return true if search returns expected results, i.e. is given content is found or excluded from the results
* @throws Exception
*/
public boolean waitForContent(String userQuery, String contentName, boolean expectedInResults) throws Exception
public boolean isContentInSearchResults(String userQuery, String contentToFind, boolean expectedInResults)
throws Exception
{
boolean resultAsExpected = false;
boolean found = !expectedInResults;
String expectedStatusCode = HttpStatus.OK.toString();
String contentName = (contentToFind == null) ? "" : contentToFind;
// Repeat search until the query results are as expected or Search Retry count is hit
for (int searchCount = 1; searchCount <= 6; searchCount++)
@@ -272,11 +270,23 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
List<SearchNodeModel> entries = response.getEntries();
if (!entries.isEmpty())
{
for (SearchNodeModel entry : entries)
if (contentName.isEmpty())
{
found = (contentName.equalsIgnoreCase(entry.getModel().getName()));
found = true;
}
else
{
for (SearchNodeModel entry : entries)
{
found = (contentName.equalsIgnoreCase(entry.getModel().getName()));
}
}
}
else
{
found = false;
}
// Loop again if result is not as expected: To cater for solr lag: eventual consistency
resultAsExpected = (expectedInResults == found);
if (resultAsExpected)
@@ -311,9 +321,10 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
// Use the search query as is: fieldname(s) may or may not be specified within the userQuery
return waitForIndexing(null, userQuery, expectedInResults);
}
/**
* waitForIndexing method that matches / waits for filename, metadata to be indexed.
*
* @param userQuery
* @param expectedInResults
* @return
@@ -323,10 +334,11 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
{
return waitForIndexing("name", userQuery, expectedInResults);
}
/**
* waitForIndexing method that matches / waits for content to be indexed, this can take longer than metadata indexing.
* Since Metadata is indexed first, use this method where tests, queries need content to be indexed too.
*
* @param userQuery
* @param expectedInResults
* @return
@@ -348,39 +360,9 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
*/
private boolean waitForIndexing(String fieldName, String userQuery, boolean expectedInResults) throws Exception
{
boolean resultAsExpected = false;
String expectedStatusCode = HttpStatus.OK.toString();
String query = (fieldName == null)? userQuery: String.format("%s:'%s'", fieldName, userQuery);
String query = (fieldName == null) ? userQuery : String.format("%s:'%s'", fieldName, userQuery);
// Repeat search until the query results are as expected or Search Retry count is hit
for (int searchCount = 1; searchCount <= 3; searchCount++)
{
SearchRequest searchRequest = createQuery(query);
SearchResponse response = query(searchRequest);
if (restClient.getStatusCode().matches(expectedStatusCode))
{
boolean found = !response.getEntries().isEmpty();
// Loop again if result is not as expected: To cater for solr lag: eventual consistency
resultAsExpected = (expectedInResults == found);
if (resultAsExpected)
{
break;
}
else
{
// Wait for the solr indexing.
Utility.waitToLoopTime(properties.getSolrWaitTimeInSeconds(), "Wait For Indexing. Retry Attempt: " + searchCount);
}
}
else
{
throw new RuntimeException("API returned status code:" + restClient.getStatusCode() + " Expected: " + expectedStatusCode);
}
}
return resultAsExpected;
return isContentInSearchResults(query, null, expectedInResults);
}
/**
@@ -435,7 +417,6 @@ public abstract class AbstractE2EFunctionalTest extends AbstractTestNGSpringCont
*
* @return {@link SearchResponse} response.
* @throws Exception if error
*
*/
protected SearchResponse query(RestRequestQueryModel queryReq, RestRequestHighlightModel highlight) throws Exception
{

View File

@@ -6,7 +6,7 @@ import org.alfresco.utility.data.provider.XMLTestData;
import org.alfresco.utility.data.provider.XMLTestDataProvider;
import org.alfresco.utility.exception.TestConfigurationException;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
@@ -50,7 +50,7 @@ public class SolrSearchByAspectTests extends AbstractCmisE2ETest
Utility.waitToLoopTime(getSolrWaitTimeInSeconds());
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData", dependsOnMethods = "prepareDataForAspectSearch")
@XMLDataConfig(file = "src/test/resources/testdata/search-by-aspect.xml")
public void executeSearchByAspect(QueryModel query) throws Exception

View File

@@ -6,7 +6,7 @@ import org.alfresco.utility.data.provider.XMLTestData;
import org.alfresco.utility.data.provider.XMLTestDataProvider;
import org.alfresco.utility.exception.TestConfigurationException;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
@@ -50,7 +50,7 @@ public class SolrSearchByIdTests extends AbstractCmisE2ETest
Utility.waitToLoopTime(getSolrWaitTimeInSeconds());
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData", dependsOnMethods = "prepareDataForSearchById")
@XMLDataConfig(file = "src/test/resources/testdata/search-by-id.xml")
public void executeSortedSearchByID(QueryModel query) throws Exception

View File

@@ -5,7 +5,7 @@ import org.alfresco.utility.data.provider.XMLDataConfig;
import org.alfresco.utility.data.provider.XMLTestData;
import org.alfresco.utility.data.provider.XMLTestDataProvider;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
@@ -48,7 +48,7 @@ public class SolrSearchByPathTests extends AbstractCmisE2ETest
Utility.waitToLoopTime(getSolrWaitTimeInSeconds());
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dependsOnMethods = "prepareDataForSearchByPath", dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
@XMLDataConfig(file = "src/test/resources/testdata/search-by-path.xml")
public void executeSearchByPathQueries(QueryModel query) throws Exception

View File

@@ -6,7 +6,7 @@ import org.alfresco.utility.data.provider.XMLTestData;
import org.alfresco.utility.data.provider.XMLTestDataProvider;
import org.alfresco.utility.exception.TestConfigurationException;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
@@ -50,7 +50,7 @@ public class SolrSearchByPropertyTests extends AbstractCmisE2ETest
Utility.waitToLoopTime(getSolrWaitTimeInSeconds());
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData", dependsOnMethods = "prepareDataForSearchWithProperty")
@XMLDataConfig(file = "src/test/resources/testdata/search-by-property.xml")
public void executeSortedSearchByID(QueryModel query) throws Exception

View File

@@ -7,7 +7,7 @@ import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -51,7 +51,7 @@ public class SolrSearchInFolderTests extends AbstractCmisE2ETest
dataContent.deleteSite(testSite);
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
@XMLDataConfig(file = "src/test/resources/testdata/search-in-folder.xml")
public void executeCMISQuery(QueryModel query) throws Exception

View File

@@ -7,7 +7,7 @@ import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.QueryModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -55,7 +55,7 @@ public class SolrSearchInTreeTests extends AbstractCmisE2ETest
dataContent.deleteSite(testSite);
}
@Test(groups = { TestGroup.CMIS, TestGroup.QUERIES },
@Test(groups = { TestGroup.CMIS },
dataProviderClass = XMLTestDataProvider.class, dataProvider = "getQueriesData")
@XMLDataConfig(file = "src/test/resources/testdata/search-in-tree.xml")
public void executeCMISQuery(QueryModel query) throws Exception

View File

@@ -17,7 +17,7 @@ import org.alfresco.utility.data.DataSite;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,45 +1,34 @@
/*
* Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.test.search.functional.searchServices.search;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.test.search.functional.AbstractE2EFunctionalTest;
import org.alfresco.utility.Utility;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
import javax.naming.AuthenticationException;
/**
* Abstract Search test class that contains useful methods
* such as:
* <ul>
* <li>Preparing the data to index.
* <li>Preparing search requests.
* <ul>
* <li>Preparing the data to index.
* <li>Preparing search requests.
*
* @author Michael Suzuki
* @author Meenal Bhave
*
*/
public abstract class AbstractSearchServicesE2ETest extends AbstractE2EFunctionalTest
{
@@ -51,29 +40,33 @@ public abstract class AbstractSearchServicesE2ETest extends AbstractE2EFunctiona
public void searchServicesDataPreparation() throws Exception
{
/*
* Create the following file structure for preconditions :
* |- folder
* |-- pangram.txt
* |-- cars.txt
* |-- alfresco.txt
* |-- <uniqueFileName>
* Create the following file structure for preconditions :
* |- folder
* |-- pangram.txt
* |-- cars.txt
* |-- alfresco.txt
* |-- <uniqueFileName>
*/
FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER);
dataContent.usingUser(testUser).usingSite(testSite).createFolder(folder);
//Create files
// Create files
String title = "Title: " + unique_searchString;
String description = "Description: File is created for search tests by Author: " + unique_searchString + " . ";
file = new FileModel("pangram.txt", "pangram" + title, description, FileType.TEXT_PLAIN, description + " The quick brown fox jumps over the lazy dog");
file = new FileModel("pangram.txt", "pangram" + title, description, FileType.TEXT_PLAIN,
description + " The quick brown fox jumps over the lazy dog");
file2 = new FileModel("cars.txt", "cars" + title, description, FileType.TEXT_PLAIN, "The landrover discovery is not a sports car ");
file2 = new FileModel("cars.txt", "cars" + title, description, FileType.TEXT_PLAIN,
"The landrover discovery is not a sports car ");
FileModel file3 = new FileModel("alfresco.txt", "alfresco", "alfresco", FileType.TEXT_PLAIN,
"Alfresco text file for search ");
file4 = new FileModel(unique_searchString + ".txt", "uniquee" + title, description, FileType.TEXT_PLAIN,
"Unique text file for search ");
FileModel file3 = new FileModel("alfresco.txt", "alfresco", "alfresco", FileType.TEXT_PLAIN, "Alfresco text file for search ");
file4 = new FileModel(unique_searchString + ".txt", "uniquee" + title, description, FileType.TEXT_PLAIN, "Unique text file for search ");
dataContent.usingUser(testUser).usingSite(testSite).usingResource(folder).createContent(file);
dataContent.usingUser(testUser).usingSite(testSite).usingResource(folder).createContent(file2);
dataContent.usingUser(testUser).usingSite(testSite).usingResource(folder).createContent(file3);
@@ -81,110 +74,4 @@ public abstract class AbstractSearchServicesE2ETest extends AbstractE2EFunctiona
waitForMetadataIndexing(file4.getName(), true);
}
// /**
// * Helper method which create an http post request to Search API end point.
// * @param term String search term
// * @return {@link SearchResponse} response.
// * @throws Exception if error
// *
// */
// protected SearchResponse query(String term) throws Exception
// {
// RestRequestQueryModel queryReq = new RestRequestQueryModel();
// queryReq.setLanguage("afts");
// queryReq.setQuery(term);
// SearchRequest query = new SearchRequest(queryReq);
// return restClient.authenticateUser(testUser).withSearchAPI().search(query);
// }
protected SearchRequest carsQuery()
{
return createQuery("cars");
}
/**
* Wait for Solr to finish indexing: Indexing has caught up = true if search returns appropriate results
*
* @param userQuery: search query, this can include the fieldname, unique search string will guarantee accurate results
* @param expectedInResults, true if entry is expected in the results set
* @return true (indexing is finished) if search returns appropriate results
* @throws Exception
*/
public boolean waitForIndexing(String userQuery, boolean expectedInResults) throws Exception
{
// Use the search query as is: fieldname(s) may or may not be specified within the userQuery
return waitForIndexing(null, userQuery, expectedInResults);
}
/**
* waitForIndexing method that matches / waits for filename, metadata to be indexed.
* @param userQuery
* @param expectedInResults
* @return
* @throws Exception
*/
public boolean waitForMetadataIndexing(String userQuery, boolean expectedInResults) throws Exception
{
return waitForIndexing("name", userQuery, expectedInResults);
}
/**
* waitForIndexing method that matches / waits for content to be indexed, this can take longer than metadata indexing.
* Since Metadata is indexed first, use this method where tests, queries need content to be indexed too.
* @param userQuery
* @param expectedInResults
* @return
* @throws Exception
*/
public boolean waitForContentIndexing(String userQuery, boolean expectedInResults) throws Exception
{
return waitForIndexing("cm:content", userQuery, expectedInResults);
}
/**
* Wait for Solr to finish indexing: Indexing has caught up = true if search returns appropriate results
*
* @param fieldName: specific field to search for, e.g. name. When specified, the query will become: name:'userQuery'
* @param userQuery: search string, unique search string will guarantee accurate results
* @param expectedInResults, true if entry is expected in the results set
* @return true (indexing is finished) if search returns appropriate results
* @throws Exception
*/
private boolean waitForIndexing(String fieldName, String userQuery, boolean expectedInResults) throws Exception
{
boolean resultAsExpected = false;
String expectedStatusCode = HttpStatus.OK.toString();
String query = (fieldName == null)? userQuery: String.format("%s:'%s'", fieldName, userQuery);
// Repeat search until the query results are as expected or Search Retry count is hit
for (int searchCount = 1; searchCount <= 3; searchCount++)
{
SearchRequest searchRequest = createQuery(query);
SearchResponse response = query(searchRequest);
if (restClient.getStatusCode().matches(expectedStatusCode))
{
boolean found = !response.getEntries().isEmpty();
// Loop again if result is not as expected: To cater for solr lag: eventual consistency
resultAsExpected = (expectedInResults == found);
if (resultAsExpected)
{
break;
}
else
{
// Wait for the solr indexing.
Utility.waitToLoopTime(properties.getSolrWaitTimeInSeconds(), "Wait For Indexing");
}
}
else
{
throw new AuthenticationException("API returned status code:" + restClient.getStatusCode() + " Expected: " + expectedStatusCode);
}
}
return resultAsExpected;
}
}
}

View File

@@ -32,12 +32,12 @@ import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.RestResultBucketsModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.data.RandomData;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.SiteModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.utility.model.UserModel;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;

View File

@@ -26,7 +26,7 @@ import org.alfresco.rest.search.RestRequestFacetIntervalsModel;
import org.alfresco.rest.search.RestRequestFacetSetModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.springframework.http.HttpStatus;
@@ -54,7 +54,7 @@ public class FacetIntervalSearchTest extends AbstractSearchServicesE2ETest
description = "Check facet intervals mandatory fields")
public void checkingFacetsMandatoryErrorMessages()throws Exception
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetIntervalsModel facetIntervalsModel = new RestRequestFacetIntervalsModel();
FacetInterval facetInterval = new FacetInterval(null, null, null);
@@ -108,7 +108,7 @@ public class FacetIntervalSearchTest extends AbstractSearchServicesE2ETest
description = "Check basic facet intervals search api")
public void searchWithBasicInterval()throws Exception
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetIntervalsModel facetIntervalsModel = new RestRequestFacetIntervalsModel();
RestRequestFacetSetModel restRequestFacetSetModel = new RestRequestFacetSetModel();
@@ -151,7 +151,7 @@ public class FacetIntervalSearchTest extends AbstractSearchServicesE2ETest
description = "Check date facet intervals search api")
public void searchWithDates() throws Exception
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetIntervalsModel facetIntervalsModel = new RestRequestFacetIntervalsModel();
RestRequestFacetSetModel restRequestFacetSetModel = new RestRequestFacetSetModel();

View File

@@ -21,6 +21,8 @@ package org.alfresco.test.search.functional.searchServices.search;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
@@ -32,11 +34,10 @@ import org.alfresco.rest.search.RestGenericBucketModel;
import org.alfresco.rest.search.RestGenericFacetResponseModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.springframework.http.HttpStatus;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
@@ -74,7 +75,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
description = "Check facet intervals mandatory fields")
public void checkingFacetsMandatoryErrorMessages()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
List<RestRequestRangesModel> ranges = new ArrayList<>();
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
ranges.add(facetRangeModel);
@@ -114,6 +115,227 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
facetRangeModel.setGap("100");
}
@SuppressWarnings("unchecked")
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check basic facet range search api")
public void searchWithRangePreASS121()throws Exception
{
SearchRequest query = createQuery("* AND SITE:'" + testSite.getId() + "'");
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
facetRangeModel.setField("content.size");
facetRangeModel.setStart("0");
facetRangeModel.setEnd("200");
facetRangeModel.setGap("20");
List<RestRequestRangesModel> ranges = new ArrayList<>();
ranges.add(facetRangeModel);
query.setRanges(ranges);
SearchResponse response = query(query);
response.assertThat().entriesListIsNotEmpty();
response.getContext().assertThat().field("facets").isNotEmpty();
RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
RestGenericBucketModel bucket = facetResponseModel.getBuckets().get(0);
bucket.assertThat().field("label").is("[0 - 20)");
bucket.assertThat().field("filterQuery").is("content.size:[\"0\" TO \"20\">");
Map<String,String> metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertEquals(Integer.valueOf(metric.get("count")).intValue(), 0, "Unexpected count for first bucket.");
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"0");
assertEquals(info.get("end"),"20");
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
bucket = facetResponseModel.getBuckets().get(1);
bucket.assertThat().field("label").is("[20 - 40)");
bucket.assertThat().field("filterQuery").is("content.size:[\"20\" TO \"40\">");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertEquals(Integer.valueOf(metric.get("count")).intValue(), 2, "Unexpected count for second bucket.");
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"20");
assertEquals(info.get("end"),"40");
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
}
@SuppressWarnings("unchecked")
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check date facet intervals search api")
public void searchWithRangeHardendPreASS121()throws Exception
{
SearchRequest query = createQuery("A*");
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
facetRangeModel.setField("content.size");
facetRangeModel.setStart("0");
facetRangeModel.setEnd("500");
facetRangeModel.setGap("200");
facetRangeModel.setHardend(true);
List<RestRequestRangesModel> ranges = new ArrayList<RestRequestRangesModel>();
ranges.add(facetRangeModel);
query.setRanges(ranges);
SearchResponse response = query(query);
response.assertThat().entriesListIsNotEmpty();
response.getContext().assertThat().field("facets").isNotEmpty();
RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
RestGenericBucketModel bucket = facetResponseModel.getBuckets().get(0);
bucket.assertThat().field("label").is("[0 - 200)");
bucket.assertThat().field("filterQuery").is("content.size:[\"0\" TO \"200\">");
Map<String,String> metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertTrue(Integer.valueOf(metric.get("count")) >= 4);
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"0");
assertEquals(info.get("end"),"200");
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
assertNull(info.get("count"));
bucket = facetResponseModel.getBuckets().get(1);
bucket.assertThat().field("label").is("[200 - 400)");
bucket.assertThat().field("filterQuery").is("content.size:[\"200\" TO \"400\">");
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"200");
assertEquals(info.get("end"),"400");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertTrue(Integer.valueOf(metric.get("count")) == 4);
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
bucket = facetResponseModel.getBuckets().get(2);
bucket.assertThat().field("label").is("[400 - 500]");
bucket.assertThat().field("filterQuery").is("content.size:[\"400\" TO \"500\"]");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertTrue(Integer.valueOf(metric.get("count")) >= 2);
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"400");
assertEquals(info.get("end"),"500");
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"true");
}
@SuppressWarnings("unchecked")
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check date facet intervals search api")
public void searchDateRangePreASS121()throws Exception
{
SearchRequest query = createQuery("name:A*");
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
facetRangeModel.setField("created");
facetRangeModel.setStart("2015-09-29T10:45:15.729Z");
facetRangeModel.setEnd("2016-09-29T10:45:15.729Z");
facetRangeModel.setGap("+280DAY");
List<RestRequestRangesModel> ranges = new ArrayList<RestRequestRangesModel>();
ranges.add(facetRangeModel);
query.setRanges(ranges);
SearchResponse response = query(query);
response.assertThat().entriesListIsNotEmpty();
response.getContext().assertThat().field("facets").isNotEmpty();
RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
List<RestGenericBucketModel> buckets = facetResponseModel.getBuckets();
assertThat(buckets.size(),is(2));
RestGenericBucketModel bucket = buckets.get(0);
bucket.assertThat().field("label").is("[2015-09-29T10:45:15.729Z - 2016-07-05T10:45:15.729Z)");
bucket.assertThat().field("filterQuery").is("created:[\"2015-09-29T10:45:15.729Z\" TO \"2016-07-05T10:45:15.729Z\">");
bucket.getMetrics().get(0).assertThat().field("value").is("{count=1}");
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"2015-09-29T10:45:15.729Z");
assertEquals(info.get("end"),"2016-07-05T10:45:15.729Z");
assertNull(info.get("count"),"Expecting count to be null");
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
}
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check date facet intervals search api")
public void searchDateAndSizeRangesPreASS121()throws Exception
{
SearchRequest query = createQuery("name:A*");
List<RestRequestRangesModel> ranges = new ArrayList<RestRequestRangesModel>();
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
facetRangeModel.setField("created");
facetRangeModel.setStart("2015-09-29T10:45:15.729Z");
facetRangeModel.setEnd("2016-09-29T10:45:15.729Z");
facetRangeModel.setGap("+280DAY");
ranges.add(facetRangeModel);
RestRequestRangesModel facetCountRangeModel = new RestRequestRangesModel();
facetCountRangeModel.setField("content.size");
facetCountRangeModel.setStart("0");
facetCountRangeModel.setEnd("500");
facetCountRangeModel.setGap("200");
ranges.add(facetCountRangeModel);
query.setRanges(ranges);
}
@SuppressWarnings("unchecked")
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.PreASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check basic facet range search api")
public void searchWithRangeAndIncludeUpperBoundPreASS121()throws Exception
{
SearchRequest query = createQuery("A*");
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
facetRangeModel.setField("content.size");
facetRangeModel.setStart("0");
facetRangeModel.setEnd("500");
facetRangeModel.setGap("200");
List<String> include = new ArrayList<String>();
include.add("upper");
facetRangeModel.setInclude(include);
List<RestRequestRangesModel> ranges = new ArrayList<RestRequestRangesModel>();
ranges.add(facetRangeModel);
query.setRanges(ranges);
SearchResponse response = query(query);
response.assertThat().entriesListIsNotEmpty();
response.getContext().assertThat().field("facets").isNotEmpty();
RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
RestGenericBucketModel bucket = facetResponseModel.getBuckets().get(0);
bucket.assertThat().field("label").is("(0 - 200]");
bucket.assertThat().field("filterQuery").is("content.size:<\"0\" TO \"200\"]");
Map<String,String> metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertTrue(Integer.valueOf(metric.get("count")) >= 4);
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"0");
assertEquals(info.get("end"),"200");
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"false");
assertEquals(info.get("endInclusive"),"true");
bucket = facetResponseModel.getBuckets().get(1);
bucket.assertThat().field("label").is("(200 - 400]");
bucket.assertThat().field("filterQuery").is("content.size:<\"200\" TO \"400\"]");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
Integer count = Integer.valueOf(metric.get("count"));
assertTrue(count == 4);
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"200");
assertEquals(info.get("end"),"400");
assertEquals(info.get("startInclusive"),"false");
assertEquals(info.get("endInclusive"),"true");
bucket = facetResponseModel.getBuckets().get(2);
bucket.assertThat().field("label").is("(400 - 600]");
bucket.assertThat().field("filterQuery").is("content.size:<\"400\" TO \"600\"]");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertTrue(Integer.valueOf(metric.get("count")) >= 5);
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"400");
assertEquals(info.get("end"),"600");
assertEquals(info.get("startInclusive"),"false");
assertEquals(info.get("endInclusive"),"true");
}
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_121 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_121 }, executionType = ExecutionType.REGRESSION,
description = "Check basic facet range search api")
@@ -143,7 +365,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"20");
assertEquals(info.get("end"),"40");
Assert.assertNull(info.get("count"));
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
@@ -201,7 +423,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
assertEquals(info.get("end"),"40");
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
Assert.assertNull(info.get("count"));
assertNull(info.get("count"));
bucket = facetResponseModel.getBuckets().get(1);
bucket.assertThat().field("label").is("[40 - 120)");
@@ -211,7 +433,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
assertEquals(info.get("end"),"120");
metric = (Map<String, String>) bucket.getMetrics().get(0).getValue();
assertEquals(Integer.valueOf(metric.get("count")).intValue(), 1, "Unexpected count for second bucket.");
Assert.assertNull(info.get("count"));
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"false");
@@ -223,7 +445,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"120");
assertEquals(info.get("end"),"200");
Assert.assertNull(info.get("count"));
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"true");
}
@@ -260,7 +482,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"2015-09-29T10:45:15.729Z");
assertEquals(info.get("end"),"2017-04-11T10:45:15.729Z");
Assert.assertNull(info.get("count"),"1");
assertNull(info.get("count"),"1");
assertEquals(info.get("startInclusive"),"true");
assertEquals(info.get("endInclusive"),"true");
}
@@ -319,7 +541,7 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
Map<String, String> info = (Map<String, String>) bucket.getBucketInfo();
assertEquals(info.get("start"),"20");
assertEquals(info.get("end"),"40");
Assert.assertNull(info.get("count"));
assertNull(info.get("count"));
assertEquals(info.get("startInclusive"),"false");
assertEquals(info.get("endInclusive"),"true");
@@ -344,5 +566,5 @@ public class FacetRangeSearchTest extends AbstractSearchServicesE2ETest
assertEquals(info.get("end"),"200");
assertEquals(info.get("startInclusive"),"false");
assertEquals(info.get("endInclusive"),"true");
}
}
}

View File

@@ -31,7 +31,7 @@ import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.RestResultBucketsModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.testng.Assert;

View File

@@ -23,7 +23,7 @@ import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.report.Bug;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;

View File

@@ -35,7 +35,7 @@ import org.alfresco.rest.search.RestRequestFacetFieldsModel;
import org.alfresco.rest.search.RestRequestPivotModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.springframework.http.HttpStatus;
@@ -62,7 +62,7 @@ public class PivotFacetedSearchTest extends AbstractSearchServicesE2ETest
description = "Checks errors with pivot using Search api")
public void searchWithPivotingErrors()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
List<RestRequestFacetFieldModel> list = new ArrayList<>();
@@ -95,7 +95,7 @@ public class PivotFacetedSearchTest extends AbstractSearchServicesE2ETest
description = "Checks with pivot using Search api")
public void searchWithPivoting()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
List<RestRequestFacetFieldModel> list = new ArrayList<>();
@@ -124,7 +124,7 @@ public class PivotFacetedSearchTest extends AbstractSearchServicesE2ETest
description = "Checks nested pivot using Search api")
public void searchWithNestedPivoting()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
List<RestRequestFacetFieldModel> list = new ArrayList<>();
@@ -181,7 +181,7 @@ public class PivotFacetedSearchTest extends AbstractSearchServicesE2ETest
description = "Checks range pivots using Search api")
public void searchWithRangePivoting()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
String endDate = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")); //the car document is created at runtime, so to include it in range facets end date must be now
@@ -245,7 +245,7 @@ public class PivotFacetedSearchTest extends AbstractSearchServicesE2ETest
description = "Checks with pivot using Search api and a label as a key")
public void searchWithPivotingUsingLabel()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
List<RestRequestFacetFieldModel> list = new ArrayList<>();
RestRequestFacetFieldModel creatorFacetFieldModel = new RestRequestFacetFieldModel("creator");

View File

@@ -29,7 +29,7 @@ import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.RestResultBucketsModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.testng.Assert;
import org.testng.annotations.Test;

View File

@@ -1,18 +1,14 @@
/*
* Copyright (C) 2017 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
@@ -26,27 +22,27 @@ import org.alfresco.rest.search.RestRequestFieldsModel;
import org.alfresco.rest.search.RestRequestHighlightModel;
import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.report.Bug;
import org.testng.annotations.Test;
/**
* Search high lighting test.
*
* @author Michael Suzuki
*
*/
public class SearchHighLightTest extends AbstractSearchServicesE2ETest
{
@Test(groups={TestGroup.SEARCH,TestGroup.REST_API})
@Test(groups = { TestGroup.SEARCH, TestGroup.REST_API })
@Bug(id = "TAS-3220")
public void searchWithHighLight() throws Exception
{
{
waitForContentIndexing(file2.getContent(), true);
RestRequestQueryModel queryReq = new RestRequestQueryModel();
RestRequestQueryModel queryReq = new RestRequestQueryModel();
queryReq.setQuery("cm:content:cars");
queryReq.setUserQuery("cars");
RestRequestHighlightModel highlight = new RestRequestHighlightModel();
highlight.setPrefix("¿");
highlight.setPostfix("?");
@@ -54,19 +50,19 @@ public class SearchHighLightTest extends AbstractSearchServicesE2ETest
List<RestRequestFieldsModel> fields = new ArrayList<>();
fields.add(new RestRequestFieldsModel("cm:content"));
highlight.setFields(fields);
SearchResponse nodes = query(queryReq, highlight);
SearchResponse nodes = query(queryReq, highlight);
nodes.assertThat().entriesListIsNotEmpty();
ResponseHighLightModel hl = nodes.getEntryByIndex(0).getSearch().getHighlight().get(0);
hl.assertThat().field("snippets").contains( "The landrover discovery is not a sports ¿car?");
hl.assertThat().field("snippets").contains("The landrover discovery is not a sports ¿car?");
}
@Test(groups={TestGroup.SEARCH,TestGroup.REST_API})
@Test(groups = { TestGroup.SEARCH, TestGroup.REST_API })
public void searchNonIndexedData() throws Exception
{
RestRequestQueryModel queryReq = new RestRequestQueryModel();
{
RestRequestQueryModel queryReq = new RestRequestQueryModel();
queryReq.setQuery("cm:title");
queryReq.setUserQuery("zoro");
RestRequestHighlightModel highlight = new RestRequestHighlightModel();
highlight.setPrefix("¿");
highlight.setPostfix("?");
@@ -74,7 +70,7 @@ public class SearchHighLightTest extends AbstractSearchServicesE2ETest
List<RestRequestFieldsModel> fields = new ArrayList<>();
fields.add(new RestRequestFieldsModel("cm:title"));
highlight.setFields(fields);
SearchResponse nodes = query(queryReq, highlight);
SearchResponse nodes = query(queryReq, highlight);
nodes.assertThat().entriesListDoesNotContain("highlight");
}
}

View File

@@ -24,7 +24,7 @@ import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.testng.Assert;
import org.testng.annotations.Test;

View File

@@ -40,7 +40,7 @@ import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.hamcrest.Matchers;

View File

@@ -18,7 +18,7 @@ import org.alfresco.utility.data.DataSite;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,23 +1,20 @@
/*
* Copyright (C) 2005-2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.test.search.functional.searchServices.search;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
@@ -31,9 +28,8 @@ import org.alfresco.rest.search.RestInstanceModel;
import org.alfresco.rest.search.RestShardInfoModel;
import org.alfresco.rest.search.RestShardInfoModelCollection;
import org.alfresco.rest.search.RestShardModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.springframework.http.HttpStatus;
import org.testng.annotations.Test;
/**
* Shard info end point REST API test.
@@ -42,13 +38,15 @@ import org.testng.annotations.Test;
*/
public class ShardInfoTest extends AbstractSearchServicesE2ETest
{
@Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n})
/* The test that will be excluded when running master slave setup, excluding the ASS_MASTER test group. */
@Test(groups = { TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n, TestGroup.ASS_MASTER })
public void getShardInfoWithAdminAuthority() throws JsonProcessingException
{
RestShardInfoModelCollection info = restClient.authenticateUser(dataUser.getAdminUser()).withShardInfoAPI().getInfo();
RestShardInfoModelCollection info = restClient.authenticateUser(dataUser.getAdminUser()).withShardInfoAPI()
.getInfo();
restClient.assertStatusCodeIs(HttpStatus.OK);
info.assertThat().entriesListIsNotEmpty();
assertEquals(info.getPagination().getTotalItems().intValue(), 2);
assertEquals(info.getPagination().getTotalItems().intValue(), 2);
List<String> stores = Arrays.asList("workspace://SpacesStore", "archive://SpacesStore");
List<String> baseUrls = Arrays.asList("/solr/alfresco", "/solr/archive");
@@ -83,7 +81,45 @@ public class ShardInfoTest extends AbstractSearchServicesE2ETest
}
}
@Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n})
/* The test that will be run when in master slave setup by including the ASS_MASTER_SLAVE test group. */
@Test(groups = { TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n, TestGroup.ASS_MASTER_SLAVE })
public void getShardInfoWithAdminAuthorityMasterSlaveConfig() throws JsonProcessingException
{
RestShardInfoModelCollection info = restClient.authenticateUser(dataUser.getAdminUser()).withShardInfoAPI()
.getInfo();
restClient.assertStatusCodeIs(HttpStatus.OK);
info.assertThat().entriesListIsNotEmpty();
assertEquals(info.getPagination().getTotalItems().intValue(), 2);
List<String> stores = Arrays.asList("workspace://SpacesStore", "archive://SpacesStore");
List<String> baseUrls = Arrays.asList("/solr/alfresco", "/solr/archive");
List<RestShardInfoModel> entries = info.getEntries();
for (RestShardInfoModel shardInfoModel : entries)
{
RestShardInfoModel model = shardInfoModel.getModel();
assertEquals(model.getTemplate(), "rerank");
assertEquals(model.getShardMethod(), "DB_ID");
assertTrue(model.getHasContent());
assertTrue(stores.contains(model.getStores()));
List<RestShardModel> shards = model.getShards();
assertNotNull(shards);
RestShardModel shard = shards.iterator().next();
assertNotNull(shard);
List<RestInstanceModel> instances = shard.getInstances();
assertNotNull(instances);
RestInstanceModel instance = instances.iterator().next();
assertNotNull(instance);
assertTrue(baseUrls.contains(instance.getBaseUrl()));
assertEquals(instance.getState(), "ACTIVE");
}
}
@Test(groups = { TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n })
public void getShardInfoWithoutAdminAuthority() throws Exception
{
restClient.authenticateUser(dataUser.createRandomTestUser()).withShardInfoAPI().getInfo();

View File

@@ -43,7 +43,7 @@ import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.RestRequestStatsModel;
import org.alfresco.rest.search.SearchRequest;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.alfresco.utility.testrail.ExecutionType;
import org.alfresco.utility.testrail.annotation.TestRail;
import org.springframework.http.HttpStatus;
@@ -69,7 +69,7 @@ public class StatsSearchTest extends AbstractSearchServicesE2ETest
description = "Checks errors with stats using Search api")
public void searchWithBasicStats()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
Pagination pagination = new Pagination();
pagination.setMaxItems(2);
List<RestRequestStatsModel> statsModels = new ArrayList<>();
@@ -153,7 +153,7 @@ public class StatsSearchTest extends AbstractSearchServicesE2ETest
description = "Checks errors with stats labels using Search api")
public void searchWithStatsLabel()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
Pagination pagination = new Pagination();
pagination.setMaxItems(2);
List<RestRequestStatsModel> statsModels = new ArrayList<>();
@@ -208,7 +208,7 @@ public class StatsSearchTest extends AbstractSearchServicesE2ETest
description = "Checks errors with stats with Pivot using Search api")
public void searchWithStatsAndMutlilevelPivot()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
Pagination pagination = new Pagination();
pagination.setMaxItems(1);
@@ -271,7 +271,7 @@ public class StatsSearchTest extends AbstractSearchServicesE2ETest
description = "Checks errors with stats with Pivot using Search api")
public void searchWithStatsAndPivot()
{
SearchRequest query = carsQuery();
SearchRequest query = createQuery("cars");
Pagination pagination = new Pagination();
pagination.setMaxItems(2);

View File

@@ -9,7 +9,7 @@ package org.alfresco.test.search.functional.searchServices.search.rm;
import org.alfresco.rest.search.RestRequestQueryModel;
import org.alfresco.rest.search.SearchResponse;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.springframework.http.HttpStatus;
import org.testng.Assert;
import org.testng.annotations.Test;

View File

@@ -15,7 +15,7 @@ import org.alfresco.utility.model.ContentModel;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,7 +63,7 @@ public class CascadingTrackerIntegrationTest extends AbstractE2EFunctionalTest
// Find nodes where Path with new folder name matches
String parentQueryAfterRename = "NPATH:\"4/Company Home/Sites/" + testSite.getTitle() + "/documentLibrary/" + parentNewName + "\"";
boolean indexingInProgress = !waitForContent(parentQueryAfterRename, childFile.getName(), true);
boolean indexingInProgress = !isContentInSearchResults(parentQueryAfterRename, childFile.getName(), true);
// Query using new parent name: Expect parent folder and child file
int descendantCountOfNewName = query(parentQueryAfterRename).getPagination().getCount();
@@ -107,7 +107,7 @@ public class CascadingTrackerIntegrationTest extends AbstractE2EFunctionalTest
// Find nodes where Path with new folder name matches
String parentQueryAfterRename = "NPATH:\"4/Company Home/Sites/" + testSite.getTitle() + "/documentLibrary/" + grandParentNewName + "\"";
boolean indexingInProgress = !waitForContent(parentQueryAfterRename, grandChildFile.getName(), true);
boolean indexingInProgress = !isContentInSearchResults(parentQueryAfterRename, grandChildFile.getName(), true);
// Query using new parent name: Expect grand parent, child folder, grand child file
int descendantCountOfNewName = query(parentQueryAfterRename).getPagination().getCount();

View File

@@ -21,7 +21,7 @@ import javax.json.JsonArrayBuilder;
import org.alfresco.rest.core.JsonBodyGenerator;
import org.alfresco.rest.model.RestTextResponse;
import org.alfresco.test.search.functional.searchServices.search.AbstractSearchServicesE2ETest;
import org.alfresco.utility.model.TestGroup;
import org.alfresco.search.TestGroup;
import org.hamcrest.Matchers;
import org.springframework.http.HttpStatus;
import org.testng.Assert;

View File

@@ -13,7 +13,6 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%t] %d{HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.stdout.layout.ConversionPattern=[%t] %d{HH:mm:ss} %-5p %c{1}:%L - %m%n
# TestRail particular log file
# Direct log messages to a log file