Code format hawkbit-mgmt-resource (#1943)
Signed-off-by: Marinov Avgustin <Avgustin.Marinov@bosch.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
# Eclipse.IoT hawkBit - Mgmt Resource
|
# Eclipse.IoT hawkBit - Mgmt Resource
|
||||||
|
|
||||||
This is the server-side implementation of the hawkBit Mgmt API that is used to manage and monitor the HawkBit Update Server via HTTP.
|
This is the server-side implementation of the hawkBit Mgmt API that is used to manage and monitor the HawkBit Update
|
||||||
|
Server via HTTP.
|
||||||
|
|
||||||
# Compile
|
# Compile
|
||||||
|
|
||||||
|
|||||||
@@ -9,108 +9,108 @@
|
|||||||
SPDX-License-Identifier: EPL-2.0
|
SPDX-License-Identifier: EPL-2.0
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-rest-parent</artifactId>
|
<artifactId>hawkbit-rest-parent</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>hawkbit-mgmt-resource</artifactId>
|
<artifactId>hawkbit-mgmt-resource</artifactId>
|
||||||
<name>hawkBit :: REST :: Management Resources</name>
|
<name>hawkBit :: REST :: Management Resources</name>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-repository-api</artifactId>
|
<artifactId>hawkbit-repository-api</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-mgmt-api</artifactId>
|
<artifactId>hawkbit-mgmt-api</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-rest-core</artifactId>
|
<artifactId>hawkbit-rest-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.plugin</groupId>
|
<groupId>org.springframework.plugin</groupId>
|
||||||
<artifactId>spring-plugin-core</artifactId>
|
<artifactId>spring-plugin-core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-context</artifactId>
|
<artifactId>spring-context</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>jakarta.servlet</groupId>
|
<groupId>jakarta.servlet</groupId>
|
||||||
<artifactId>jakarta.servlet-api</artifactId>
|
<artifactId>jakarta.servlet-api</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- Test -->
|
<!-- Test -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-repository-test</artifactId>
|
<artifactId>hawkbit-repository-test</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-repository-jpa</artifactId>
|
<artifactId>hawkbit-repository-jpa</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-rest-core</artifactId>
|
<artifactId>hawkbit-rest-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<classifier>tests</classifier>
|
<classifier>tests</classifier>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.el</groupId>
|
<groupId>javax.el</groupId>
|
||||||
<artifactId>javax.el-api</artifactId>
|
<artifactId>javax.el-api</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.security</groupId>
|
<groupId>org.springframework.security</groupId>
|
||||||
<artifactId>spring-security-config</artifactId>
|
<artifactId>spring-security-config</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.hawkbit</groupId>
|
<groupId>org.eclipse.hawkbit</groupId>
|
||||||
<artifactId>hawkbit-http-security</artifactId>
|
<artifactId>hawkbit-http-security</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-json</artifactId>
|
<artifactId>spring-boot-starter-json</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.security</groupId>
|
<groupId>org.springframework.security</groupId>
|
||||||
<artifactId>spring-security-aspects</artifactId>
|
<artifactId>spring-security-aspects</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.qameta.allure</groupId>
|
<groupId>io.qameta.allure</groupId>
|
||||||
<artifactId>allure-junit5</artifactId>
|
<artifactId>allure-junit5</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework</groupId>
|
<groupId>org.springframework</groupId>
|
||||||
<artifactId>spring-context-support</artifactId>
|
<artifactId>spring-context-support</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
@@ -31,11 +31,8 @@ public final class MgmtActionMapper {
|
|||||||
/**
|
/**
|
||||||
* Create a response for actions.
|
* Create a response for actions.
|
||||||
*
|
*
|
||||||
* @param actions
|
* @param actions list of actions
|
||||||
* list of actions
|
* @param repMode the representation mode
|
||||||
* @param repMode
|
|
||||||
* the representation mode
|
|
||||||
*
|
|
||||||
* @return the response
|
* @return the response
|
||||||
*/
|
*/
|
||||||
public static List<MgmtAction> toResponse(final Collection<Action> actions, final MgmtRepresentationMode repMode) {
|
public static List<MgmtAction> toResponse(final Collection<Action> actions, final MgmtRepresentationMode repMode) {
|
||||||
|
|||||||
@@ -65,19 +65,19 @@ public class MgmtActionResource implements MgmtActionRestApi {
|
|||||||
@Override
|
@Override
|
||||||
public ResponseEntity<MgmtAction> getAction(final Long actionId) {
|
public ResponseEntity<MgmtAction> getAction(final Long actionId) {
|
||||||
|
|
||||||
final Action action = deploymentManagement.findAction(actionId)
|
final Action action = deploymentManagement.findAction(actionId)
|
||||||
.orElseThrow(() -> new EntityNotFoundException(Action.class, actionId));
|
.orElseThrow(() -> new EntityNotFoundException(Action.class, actionId));
|
||||||
|
|
||||||
return ResponseEntity.ok(MgmtActionMapper.toResponse(action, MgmtRepresentationMode.FULL));
|
return ResponseEntity.ok(MgmtActionMapper.toResponse(action, MgmtRepresentationMode.FULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
private MgmtRepresentationMode getRepresentationModeFromString(final String representationModeParam) {
|
private MgmtRepresentationMode getRepresentationModeFromString(final String representationModeParam) {
|
||||||
return MgmtRepresentationMode.fromValue(representationModeParam)
|
return MgmtRepresentationMode.fromValue(representationModeParam)
|
||||||
.orElseGet(() -> {
|
.orElseGet(() -> {
|
||||||
// no need for a 400, just apply a safe fallback
|
// no need for a 400, just apply a safe fallback
|
||||||
log.warn("Received an invalid representation mode: {}", representationModeParam);
|
log.warn("Received an invalid representation mode: {}", representationModeParam);
|
||||||
return MgmtRepresentationMode.COMPACT;
|
return MgmtRepresentationMode.COMPACT;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import org.springframework.stereotype.Controller;
|
|||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ComponentScan
|
@ComponentScan
|
||||||
@Import({RestConfiguration.class, OpenApiConfiguration.class})
|
@Import({ RestConfiguration.class, OpenApiConfiguration.class })
|
||||||
@PropertySource("classpath:/hawkbit-mgmt-api-defaults.properties")
|
@PropertySource("classpath:/hawkbit-mgmt-api-defaults.properties")
|
||||||
public class MgmtApiConfiguration {
|
public class MgmtApiConfiguration {
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ public class MgmtBasicAuthResource implements MgmtBasicAuthRestApi {
|
|||||||
/**
|
/**
|
||||||
* Default constructor
|
* Default constructor
|
||||||
*
|
*
|
||||||
* @param tenantAware
|
* @param tenantAware tenantAware
|
||||||
* tenantAware
|
|
||||||
*/
|
*/
|
||||||
public MgmtBasicAuthResource(TenantAware tenantAware) {
|
public MgmtBasicAuthResource(TenantAware tenantAware) {
|
||||||
this.tenantAware = tenantAware;
|
this.tenantAware = tenantAware;
|
||||||
|
|||||||
@@ -21,17 +21,16 @@ import org.eclipse.hawkbit.repository.model.DeploymentRequestBuilder;
|
|||||||
* A mapper for assignment requests
|
* A mapper for assignment requests
|
||||||
*/
|
*/
|
||||||
public final class MgmtDeploymentRequestMapper {
|
public final class MgmtDeploymentRequestMapper {
|
||||||
|
|
||||||
private MgmtDeploymentRequestMapper() {
|
private MgmtDeploymentRequestMapper() {
|
||||||
// Utility class
|
// Utility class
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert assignment information to an {@link DeploymentRequestBuilder}
|
* Convert assignment information to an {@link DeploymentRequestBuilder}
|
||||||
*
|
*
|
||||||
* @param dsAssignment
|
* @param dsAssignment DS assignment information
|
||||||
* DS assignment information
|
* @param targetId target to assign the DS to
|
||||||
* @param targetId
|
|
||||||
* target to assign the DS to
|
|
||||||
* @return resulting {@link DeploymentRequestBuilder}
|
* @return resulting {@link DeploymentRequestBuilder}
|
||||||
*/
|
*/
|
||||||
public static DeploymentRequestBuilder createAssignmentRequestBuilder(
|
public static DeploymentRequestBuilder createAssignmentRequestBuilder(
|
||||||
@@ -43,11 +42,9 @@ public final class MgmtDeploymentRequestMapper {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert assignment information to an {@link DeploymentRequestBuilder}
|
* Convert assignment information to an {@link DeploymentRequestBuilder}
|
||||||
*
|
*
|
||||||
* @param targetAssignment
|
* @param targetAssignment target assignment information
|
||||||
* target assignment information
|
* @param dsId DS to assign the target to
|
||||||
* @param dsId
|
|
||||||
* DS to assign the target to
|
|
||||||
* @return resulting {@link DeploymentRequestBuilder}
|
* @return resulting {@link DeploymentRequestBuilder}
|
||||||
*/
|
*/
|
||||||
public static DeploymentRequestBuilder createAssignmentRequestBuilder(
|
public static DeploymentRequestBuilder createAssignmentRequestBuilder(
|
||||||
|
|||||||
@@ -54,32 +54,6 @@ public final class MgmtDistributionSetMapper {
|
|||||||
return sets.stream().map(dsRest -> fromRequest(dsRest, entityFactory)).collect(Collectors.toList());
|
return sets.stream().map(dsRest -> fromRequest(dsRest, entityFactory)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link MgmtDistributionSetRequestBodyPost} to {@link DistributionSet}.
|
|
||||||
*
|
|
||||||
* @param dsRest to convert
|
|
||||||
* @return converted {@link DistributionSet}
|
|
||||||
*/
|
|
||||||
private static DistributionSetCreate fromRequest(final MgmtDistributionSetRequestBodyPost dsRest,
|
|
||||||
final EntityFactory entityFactory) {
|
|
||||||
final List<Long> modules = new ArrayList<>();
|
|
||||||
if (dsRest.getOs() != null) {
|
|
||||||
modules.add(dsRest.getOs().getId());
|
|
||||||
}
|
|
||||||
if (dsRest.getApplication() != null) {
|
|
||||||
modules.add(dsRest.getApplication().getId());
|
|
||||||
}
|
|
||||||
if (dsRest.getRuntime() != null) {
|
|
||||||
modules.add(dsRest.getRuntime().getId());
|
|
||||||
}
|
|
||||||
if (dsRest.getModules() != null) {
|
|
||||||
dsRest.getModules().forEach(module -> modules.add(module.getId()));
|
|
||||||
}
|
|
||||||
return entityFactory.distributionSet().create().name(dsRest.getName()).version(dsRest.getVersion())
|
|
||||||
.description(dsRest.getDescription()).type(dsRest.getType()).modules(modules)
|
|
||||||
.requiredMigrationStep(dsRest.getRequiredMigrationStep());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MetaData> fromRequestDsMetadata(final List<MgmtMetadata> metadata, final EntityFactory entityFactory) {
|
static List<MetaData> fromRequestDsMetadata(final List<MgmtMetadata> metadata, final EntityFactory entityFactory) {
|
||||||
if (metadata == null) {
|
if (metadata == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -122,7 +96,7 @@ public final class MgmtDistributionSetMapper {
|
|||||||
response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getAssignedSoftwareModules(response.getDsId(),
|
response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getAssignedSoftwareModules(response.getDsId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null))
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null))
|
||||||
.withRel(MgmtRestConstants.DISTRIBUTIONSET_V1_MODULE).expand());
|
.withRel(MgmtRestConstants.DISTRIBUTIONSET_V1_MODULE).expand());
|
||||||
|
|
||||||
response.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class)
|
response.add(linkTo(methodOn(MgmtDistributionSetTypeRestApi.class)
|
||||||
.getDistributionSetType(distributionSet.getType().getId())).withRel("type").expand());
|
.getDistributionSetType(distributionSet.getType().getId())).withRel("type").expand());
|
||||||
@@ -130,7 +104,7 @@ public final class MgmtDistributionSetMapper {
|
|||||||
response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getMetadata(response.getDsId(),
|
response.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getMetadata(response.getDsId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
||||||
.expand());
|
.expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static MgmtTargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) {
|
static MgmtTargetAssignmentResponseBody toResponse(final DistributionSetAssignmentResult dsAssignmentResult) {
|
||||||
@@ -186,4 +160,30 @@ public final class MgmtDistributionSetMapper {
|
|||||||
|
|
||||||
return sets.stream().map(MgmtDistributionSetMapper::toResponse).collect(Collectors.toList());
|
return sets.stream().map(MgmtDistributionSetMapper::toResponse).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link MgmtDistributionSetRequestBodyPost} to {@link DistributionSet}.
|
||||||
|
*
|
||||||
|
* @param dsRest to convert
|
||||||
|
* @return converted {@link DistributionSet}
|
||||||
|
*/
|
||||||
|
private static DistributionSetCreate fromRequest(final MgmtDistributionSetRequestBodyPost dsRest,
|
||||||
|
final EntityFactory entityFactory) {
|
||||||
|
final List<Long> modules = new ArrayList<>();
|
||||||
|
if (dsRest.getOs() != null) {
|
||||||
|
modules.add(dsRest.getOs().getId());
|
||||||
|
}
|
||||||
|
if (dsRest.getApplication() != null) {
|
||||||
|
modules.add(dsRest.getApplication().getId());
|
||||||
|
}
|
||||||
|
if (dsRest.getRuntime() != null) {
|
||||||
|
modules.add(dsRest.getRuntime().getId());
|
||||||
|
}
|
||||||
|
if (dsRest.getModules() != null) {
|
||||||
|
dsRest.getModules().forEach(module -> modules.add(module.getId()));
|
||||||
|
}
|
||||||
|
return entityFactory.distributionSet().create().name(dsRest.getName()).version(dsRest.getVersion())
|
||||||
|
.description(dsRest.getDescription()).type(dsRest.getType()).modules(modules)
|
||||||
|
.requiredMigrationStep(dsRest.getRequiredMigrationStep());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -52,10 +52,10 @@ import org.eclipse.hawkbit.repository.TenantConfigurationManagement;
|
|||||||
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
||||||
import org.eclipse.hawkbit.repository.model.DeploymentRequest;
|
import org.eclipse.hawkbit.repository.model.DeploymentRequest;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetType;
|
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult;
|
import org.eclipse.hawkbit.repository.model.DistributionSetAssignmentResult;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetInvalidation;
|
import org.eclipse.hawkbit.repository.model.DistributionSetInvalidation;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
import org.eclipse.hawkbit.repository.model.DistributionSetMetadata;
|
||||||
|
import org.eclipse.hawkbit.repository.model.DistributionSetType;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
||||||
import org.eclipse.hawkbit.repository.model.Target;
|
import org.eclipse.hawkbit.repository.model.Target;
|
||||||
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
|
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
|
||||||
@@ -98,7 +98,7 @@ public class MgmtDistributionSetResource implements MgmtDistributionSetRestApi {
|
|||||||
private final SystemSecurityContext systemSecurityContext;
|
private final SystemSecurityContext systemSecurityContext;
|
||||||
|
|
||||||
private final DistributionSetInvalidationManagement distributionSetInvalidationManagement;
|
private final DistributionSetInvalidationManagement distributionSetInvalidationManagement;
|
||||||
|
|
||||||
private final TenantConfigHelper tenantConfigHelper;
|
private final TenantConfigHelper tenantConfigHelper;
|
||||||
|
|
||||||
MgmtDistributionSetResource(final SoftwareModuleManagement softwareModuleManagement,
|
MgmtDistributionSetResource(final SoftwareModuleManagement softwareModuleManagement,
|
||||||
|
|||||||
@@ -202,17 +202,6 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes
|
|||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private DistributionSetTag findDistributionTagById(final Long distributionsetTagId) {
|
|
||||||
return distributionSetTagManagement.get(distributionsetTagId)
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(DistributionSetTag.class, distributionsetTagId));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Long> findDistributionSetIds(
|
|
||||||
final List<MgmtAssignedDistributionSetRequestBody> assignedDistributionSetRequestBodies) {
|
|
||||||
return assignedDistributionSetRequestBodies.stream()
|
|
||||||
.map(MgmtAssignedDistributionSetRequestBody::getDistributionSetId).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<MgmtDistributionSetTagAssigmentResult> toggleTagAssignment(
|
public ResponseEntity<MgmtDistributionSetTagAssigmentResult> toggleTagAssignment(
|
||||||
@PathVariable("distributionsetTagId") final Long distributionsetTagId,
|
@PathVariable("distributionsetTagId") final Long distributionsetTagId,
|
||||||
@@ -247,4 +236,15 @@ public class MgmtDistributionSetTagResource implements MgmtDistributionSetTagRes
|
|||||||
log.debug("Assigned DistributionSet {}", assignedDs.size());
|
log.debug("Assigned DistributionSet {}", assignedDs.size());
|
||||||
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDistributionSets(assignedDs));
|
return ResponseEntity.ok(MgmtDistributionSetMapper.toResponseDistributionSets(assignedDs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<Long> findDistributionSetIds(
|
||||||
|
final List<MgmtAssignedDistributionSetRequestBody> assignedDistributionSetRequestBodies) {
|
||||||
|
return assignedDistributionSetRequestBodies.stream()
|
||||||
|
.map(MgmtAssignedDistributionSetRequestBody::getDistributionSetId).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private DistributionSetTag findDistributionTagById(final Long distributionsetTagId) {
|
||||||
|
return distributionSetTagManagement.get(distributionsetTagId)
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(DistributionSetTag.class, distributionsetTagId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ import org.eclipse.hawkbit.rest.data.ResponseList;
|
|||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
final class MgmtDistributionSetTypeMapper {
|
final class MgmtDistributionSetTypeMapper {
|
||||||
|
|
||||||
@@ -49,25 +48,6 @@ final class MgmtDistributionSetTypeMapper {
|
|||||||
return smTypesRest.stream().map(smRest -> fromRequest(entityFactory, smRest)).collect(Collectors.toList());
|
return smTypesRest.stream().map(smRest -> fromRequest(entityFactory, smRest)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DistributionSetTypeCreate fromRequest(final EntityFactory entityFactory,
|
|
||||||
final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
|
||||||
return entityFactory.distributionSetType().create().key(smsRest.getKey()).name(smsRest.getName())
|
|
||||||
.description(smsRest.getDescription()).colour(smsRest.getColour())
|
|
||||||
.mandatory(getMandatoryModules(smsRest)).optional(getOptionalmodules(smsRest));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Collection<Long> getMandatoryModules(final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
|
||||||
return Optional.ofNullable(smsRest.getMandatorymodules()).map(
|
|
||||||
modules -> modules.stream().map(MgmtSoftwareModuleTypeAssigment::getId).collect(Collectors.toList()))
|
|
||||||
.orElse(Collections.emptyList());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Collection<Long> getOptionalmodules(final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
|
||||||
return Optional.ofNullable(smsRest.getOptionalmodules()).map(
|
|
||||||
modules -> modules.stream().map(MgmtSoftwareModuleTypeAssigment::getId).collect(Collectors.toList()))
|
|
||||||
.orElse(Collections.emptyList());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MgmtDistributionSetType> toListResponse(final Collection<DistributionSetType> types) {
|
static List<MgmtDistributionSetType> toListResponse(final Collection<DistributionSetType> types) {
|
||||||
if (types == null) {
|
if (types == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -98,4 +78,23 @@ final class MgmtDistributionSetTypeMapper {
|
|||||||
.withRel(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULES).expand());
|
.withRel(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_OPTIONAL_MODULES).expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static DistributionSetTypeCreate fromRequest(final EntityFactory entityFactory,
|
||||||
|
final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
||||||
|
return entityFactory.distributionSetType().create().key(smsRest.getKey()).name(smsRest.getName())
|
||||||
|
.description(smsRest.getDescription()).colour(smsRest.getColour())
|
||||||
|
.mandatory(getMandatoryModules(smsRest)).optional(getOptionalmodules(smsRest));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Collection<Long> getMandatoryModules(final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
||||||
|
return Optional.ofNullable(smsRest.getMandatorymodules()).map(
|
||||||
|
modules -> modules.stream().map(MgmtSoftwareModuleTypeAssigment::getId).collect(Collectors.toList()))
|
||||||
|
.orElse(Collections.emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Collection<Long> getOptionalmodules(final MgmtDistributionSetTypeRequestBodyPost smsRest) {
|
||||||
|
return Optional.ofNullable(smsRest.getOptionalmodules()).map(
|
||||||
|
modules -> modules.stream().map(MgmtSoftwareModuleTypeAssigment::getId).collect(Collectors.toList()))
|
||||||
|
.orElse(Collections.emptyList());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,11 +131,6 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR
|
|||||||
.body(MgmtDistributionSetTypeMapper.toListResponse(createdSoftwareModules));
|
.body(MgmtDistributionSetTypeMapper.toListResponse(createdSoftwareModules));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DistributionSetType findDistributionSetTypeWithExceptionIfNotFound(final Long distributionSetTypeId) {
|
|
||||||
return distributionSetTypeManagement.get(distributionSetTypeId)
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(DistributionSetType.class, distributionSetTypeId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<List<MgmtSoftwareModuleType>> getMandatoryModules(
|
public ResponseEntity<List<MgmtSoftwareModuleType>> getMandatoryModules(
|
||||||
@PathVariable("distributionSetTypeId") final Long distributionSetTypeId) {
|
@PathVariable("distributionSetTypeId") final Long distributionSetTypeId) {
|
||||||
@@ -219,6 +214,11 @@ public class MgmtDistributionSetTypeResource implements MgmtDistributionSetTypeR
|
|||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DistributionSetType findDistributionSetTypeWithExceptionIfNotFound(final Long distributionSetTypeId) {
|
||||||
|
return distributionSetTypeManagement.get(distributionSetTypeId)
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(DistributionSetType.class, distributionSetTypeId));
|
||||||
|
}
|
||||||
|
|
||||||
private SoftwareModuleType findSoftwareModuleTypeWithExceptionIfNotFound(final Long softwareModuleTypeId) {
|
private SoftwareModuleType findSoftwareModuleTypeWithExceptionIfNotFound(final Long softwareModuleTypeId) {
|
||||||
|
|
||||||
return softwareModuleTypeManagement.get(softwareModuleTypeId)
|
return softwareModuleTypeManagement.get(softwareModuleTypeId)
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import org.springframework.web.context.WebApplicationContext;
|
|||||||
@RestController
|
@RestController
|
||||||
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
|
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
|
||||||
public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi {
|
public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SoftwareModuleManagement softwareModuleManagement;
|
private SoftwareModuleManagement softwareModuleManagement;
|
||||||
|
|
||||||
@@ -49,11 +50,8 @@ public class MgmtDownloadArtifactResource implements MgmtDownloadArtifactRestApi
|
|||||||
/**
|
/**
|
||||||
* Handles the GET request for downloading an artifact.
|
* Handles the GET request for downloading an artifact.
|
||||||
*
|
*
|
||||||
* @param softwareModuleId
|
* @param softwareModuleId of the parent SoftwareModule
|
||||||
* of the parent SoftwareModule
|
* @param artifactId of the related Artifact
|
||||||
* @param artifactId
|
|
||||||
* of the related Artifact
|
|
||||||
*
|
|
||||||
* @return responseEntity with status ok if successful
|
* @return responseEntity with status ok if successful
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import org.eclipse.hawkbit.repository.model.Type;
|
|||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class MgmtRestModelMapper {
|
public final class MgmtRestModelMapper {
|
||||||
|
|
||||||
@@ -32,6 +31,82 @@ public final class MgmtRestModelMapper {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the given {@link MgmtActionType} into a corresponding repository
|
||||||
|
* {@link ActionType}.
|
||||||
|
*
|
||||||
|
* @param actionTypeRest the REST representation of the action type
|
||||||
|
* @return <null> or the repository action type
|
||||||
|
*/
|
||||||
|
public static ActionType convertActionType(final MgmtActionType actionTypeRest) {
|
||||||
|
if (actionTypeRest == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (actionTypeRest) {
|
||||||
|
case SOFT:
|
||||||
|
return ActionType.SOFT;
|
||||||
|
case FORCED:
|
||||||
|
return ActionType.FORCED;
|
||||||
|
case TIMEFORCED:
|
||||||
|
return ActionType.TIMEFORCED;
|
||||||
|
case DOWNLOAD_ONLY:
|
||||||
|
return ActionType.DOWNLOAD_ONLY;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Action Type is not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the given repository {@link ActionType} into a corresponding
|
||||||
|
* {@link MgmtActionType}.
|
||||||
|
*
|
||||||
|
* @param actionType the repository representation of the action type
|
||||||
|
* @return <null> or the REST action type
|
||||||
|
*/
|
||||||
|
public static MgmtActionType convertActionType(final ActionType actionType) {
|
||||||
|
if (actionType == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (actionType) {
|
||||||
|
case SOFT:
|
||||||
|
return MgmtActionType.SOFT;
|
||||||
|
case FORCED:
|
||||||
|
return MgmtActionType.FORCED;
|
||||||
|
case TIMEFORCED:
|
||||||
|
return MgmtActionType.TIMEFORCED;
|
||||||
|
case DOWNLOAD_ONLY:
|
||||||
|
return MgmtActionType.DOWNLOAD_ONLY;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Action Type is not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the given repository {@link CancelationType} into a
|
||||||
|
* corresponding {@link MgmtCancelationType}.
|
||||||
|
*
|
||||||
|
* @param cancelationType the repository representation of the cancellation type
|
||||||
|
* @return <null> or the REST cancellation type
|
||||||
|
*/
|
||||||
|
public static CancelationType convertCancelationType(final MgmtCancelationType cancelationType) {
|
||||||
|
if (cancelationType == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (cancelationType) {
|
||||||
|
case SOFT:
|
||||||
|
return CancelationType.SOFT;
|
||||||
|
case FORCE:
|
||||||
|
return CancelationType.FORCE;
|
||||||
|
case NONE:
|
||||||
|
return CancelationType.NONE;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Action Cancelation Type is not supported");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void mapBaseToBase(final MgmtBaseEntity response, final TenantAwareBaseEntity base) {
|
static void mapBaseToBase(final MgmtBaseEntity response, final TenantAwareBaseEntity base) {
|
||||||
response.setCreatedBy(base.getCreatedBy());
|
response.setCreatedBy(base.getCreatedBy());
|
||||||
response.setLastModifiedBy(base.getLastModifiedBy());
|
response.setLastModifiedBy(base.getLastModifiedBy());
|
||||||
@@ -57,86 +132,4 @@ public final class MgmtRestModelMapper {
|
|||||||
response.setColour(base.getColour());
|
response.setColour(base.getColour());
|
||||||
response.setDeleted(base.isDeleted());
|
response.setDeleted(base.isDeleted());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert the given {@link MgmtActionType} into a corresponding repository
|
|
||||||
* {@link ActionType}.
|
|
||||||
*
|
|
||||||
* @param actionTypeRest
|
|
||||||
* the REST representation of the action type
|
|
||||||
*
|
|
||||||
* @return <null> or the repository action type
|
|
||||||
*/
|
|
||||||
public static ActionType convertActionType(final MgmtActionType actionTypeRest) {
|
|
||||||
if (actionTypeRest == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (actionTypeRest) {
|
|
||||||
case SOFT:
|
|
||||||
return ActionType.SOFT;
|
|
||||||
case FORCED:
|
|
||||||
return ActionType.FORCED;
|
|
||||||
case TIMEFORCED:
|
|
||||||
return ActionType.TIMEFORCED;
|
|
||||||
case DOWNLOAD_ONLY:
|
|
||||||
return ActionType.DOWNLOAD_ONLY;
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException("Action Type is not supported");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the given repository {@link ActionType} into a corresponding
|
|
||||||
* {@link MgmtActionType}.
|
|
||||||
*
|
|
||||||
* @param actionType
|
|
||||||
* the repository representation of the action type
|
|
||||||
*
|
|
||||||
* @return <null> or the REST action type
|
|
||||||
*/
|
|
||||||
public static MgmtActionType convertActionType(final ActionType actionType) {
|
|
||||||
if (actionType == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (actionType) {
|
|
||||||
case SOFT:
|
|
||||||
return MgmtActionType.SOFT;
|
|
||||||
case FORCED:
|
|
||||||
return MgmtActionType.FORCED;
|
|
||||||
case TIMEFORCED:
|
|
||||||
return MgmtActionType.TIMEFORCED;
|
|
||||||
case DOWNLOAD_ONLY:
|
|
||||||
return MgmtActionType.DOWNLOAD_ONLY;
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException("Action Type is not supported");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts the given repository {@link CancelationType} into a
|
|
||||||
* corresponding {@link MgmtCancelationType}.
|
|
||||||
*
|
|
||||||
* @param cancelationType
|
|
||||||
* the repository representation of the cancellation type
|
|
||||||
*
|
|
||||||
* @return <null> or the REST cancellation type
|
|
||||||
*/
|
|
||||||
public static CancelationType convertCancelationType(final MgmtCancelationType cancelationType) {
|
|
||||||
if (cancelationType == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (cancelationType) {
|
|
||||||
case SOFT:
|
|
||||||
return CancelationType.SOFT;
|
|
||||||
case FORCE:
|
|
||||||
return CancelationType.FORCE;
|
|
||||||
case NONE:
|
|
||||||
return CancelationType.NONE;
|
|
||||||
default:
|
|
||||||
throw new IllegalStateException("Action Cancelation Type is not supported");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,8 +52,6 @@ import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus;
|
|||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
final class MgmtRolloutMapper {
|
final class MgmtRolloutMapper {
|
||||||
|
|
||||||
@@ -116,7 +114,7 @@ final class MgmtRolloutMapper {
|
|||||||
body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRolloutGroups(rollout.getId(),
|
body.add(linkTo(methodOn(MgmtRolloutRestApi.class).getRolloutGroups(rollout.getId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null, null)).withRel("groups")
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null, null)).withRel("groups")
|
||||||
.expand());
|
.expand());
|
||||||
|
|
||||||
final DistributionSet distributionSet = rollout.getDistributionSet();
|
final DistributionSet distributionSet = rollout.getDistributionSet();
|
||||||
body.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(distributionSet.getId()))
|
body.add(linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSet(distributionSet.getId()))
|
||||||
|
|||||||
@@ -174,15 +174,6 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi {
|
|||||||
|
|
||||||
return ResponseEntity.status(HttpStatus.CREATED).body(MgmtRolloutMapper.toResponseRollout(rollout, true));
|
return ResponseEntity.status(HttpStatus.CREATED).body(MgmtRolloutMapper.toResponseRollout(rollout, true));
|
||||||
}
|
}
|
||||||
private Optional<Boolean> isConfirmationRequiredForGroup(final MgmtRolloutGroup group,
|
|
||||||
final MgmtRolloutRestRequestBodyPost request) {
|
|
||||||
if (group.getConfirmationRequired() != null) {
|
|
||||||
return Optional.of(group.getConfirmationRequired());
|
|
||||||
} else if (request.getConfirmationRequired() != null) {
|
|
||||||
return Optional.of(request.getConfirmationRequired());
|
|
||||||
}
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<MgmtRolloutResponseBody> update(
|
public ResponseEntity<MgmtRolloutResponseBody> update(
|
||||||
@@ -282,12 +273,6 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi {
|
|||||||
tenantConfigHelper.isConfirmationFlowEnabled()));
|
tenantConfigHelper.isConfirmationFlowEnabled()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findRolloutOrThrowException(final Long rolloutId) {
|
|
||||||
if (!rolloutManagement.exists(rolloutId)) {
|
|
||||||
throw new EntityNotFoundException(Rollout.class, rolloutId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<PagedList<MgmtTarget>> getRolloutGroupTargets(@PathVariable("rolloutId") final Long rolloutId,
|
public ResponseEntity<PagedList<MgmtTarget>> getRolloutGroupTargets(@PathVariable("rolloutId") final Long rolloutId,
|
||||||
@PathVariable("groupId") final Long groupId,
|
@PathVariable("groupId") final Long groupId,
|
||||||
@@ -349,4 +334,20 @@ public class MgmtRolloutResource implements MgmtRolloutRestApi {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Optional<Boolean> isConfirmationRequiredForGroup(final MgmtRolloutGroup group,
|
||||||
|
final MgmtRolloutRestRequestBodyPost request) {
|
||||||
|
if (group.getConfirmationRequired() != null) {
|
||||||
|
return Optional.of(group.getConfirmationRequired());
|
||||||
|
} else if (request.getConfirmationRequired() != null) {
|
||||||
|
return Optional.of(request.getConfirmationRequired());
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void findRolloutOrThrowException(final Long rolloutId) {
|
||||||
|
if (!rolloutManagement.exists(rolloutId)) {
|
||||||
|
throw new EntityNotFoundException(Rollout.class, rolloutId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,13 +48,6 @@ import org.springframework.hateoas.Link;
|
|||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public final class MgmtSoftwareModuleMapper {
|
public final class MgmtSoftwareModuleMapper {
|
||||||
|
|
||||||
private static SoftwareModuleCreate fromRequest(final EntityFactory entityFactory,
|
|
||||||
final MgmtSoftwareModuleRequestBodyPost smsRest) {
|
|
||||||
return entityFactory.softwareModule().create().type(smsRest.getType()).name(smsRest.getName())
|
|
||||||
.version(smsRest.getVersion()).description(smsRest.getDescription()).vendor(smsRest.getVendor())
|
|
||||||
.encrypted(smsRest.isEncrypted());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<SoftwareModuleMetadataCreate> fromRequestSwMetadata(final EntityFactory entityFactory,
|
static List<SoftwareModuleMetadataCreate> fromRequestSwMetadata(final EntityFactory entityFactory,
|
||||||
final Long softwareModuleId, final Collection<MgmtSoftwareModuleMetadata> metadata) {
|
final Long softwareModuleId, final Collection<MgmtSoftwareModuleMetadata> metadata) {
|
||||||
if (metadata == null) {
|
if (metadata == null) {
|
||||||
@@ -130,12 +123,12 @@ public final class MgmtSoftwareModuleMapper {
|
|||||||
|
|
||||||
response.add(linkTo(
|
response.add(linkTo(
|
||||||
methodOn(MgmtSoftwareModuleTypeRestApi.class).getSoftwareModuleType(softwareModule.getType().getId()))
|
methodOn(MgmtSoftwareModuleTypeRestApi.class).getSoftwareModuleType(softwareModule.getType().getId()))
|
||||||
.withRel(MgmtRestConstants.SOFTWAREMODULE_V1_TYPE).expand());
|
.withRel(MgmtRestConstants.SOFTWAREMODULE_V1_TYPE).expand());
|
||||||
|
|
||||||
response.add(linkTo(methodOn(MgmtSoftwareModuleResource.class).getMetadata(response.getModuleId(),
|
response.add(linkTo(methodOn(MgmtSoftwareModuleResource.class).getMetadata(response.getModuleId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
||||||
.expand().expand());
|
.expand().expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static MgmtArtifact toResponse(final Artifact artifact) {
|
static MgmtArtifact toResponse(final Artifact artifact) {
|
||||||
@@ -158,7 +151,7 @@ public final class MgmtSoftwareModuleMapper {
|
|||||||
static void addLinks(final Artifact artifact, final MgmtArtifact response) {
|
static void addLinks(final Artifact artifact, final MgmtArtifact response) {
|
||||||
response.add(linkTo(methodOn(MgmtDownloadArtifactResource.class)
|
response.add(linkTo(methodOn(MgmtDownloadArtifactResource.class)
|
||||||
.downloadArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("download")
|
.downloadArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withRel("download")
|
||||||
.expand());
|
.expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void addLinks(final Artifact artifact, final MgmtArtifact response,
|
static void addLinks(final Artifact artifact, final MgmtArtifact response,
|
||||||
@@ -170,4 +163,11 @@ public final class MgmtSoftwareModuleMapper {
|
|||||||
artifact.getId(), artifact.getSha1Hash())), ApiType.MGMT, null);
|
artifact.getId(), artifact.getSha1Hash())), ApiType.MGMT, null);
|
||||||
urls.forEach(entry -> response.add(Link.of(entry.getRef()).withRel(entry.getRel()).expand()));
|
urls.forEach(entry -> response.add(Link.of(entry.getRef()).withRel(entry.getRel()).expand()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SoftwareModuleCreate fromRequest(final EntityFactory entityFactory,
|
||||||
|
final MgmtSoftwareModuleRequestBodyPost smsRest) {
|
||||||
|
return entityFactory.softwareModule().create().type(smsRest.getType()).name(smsRest.getName())
|
||||||
|
.version(smsRest.getVersion()).description(smsRest.getDescription()).vendor(smsRest.getVendor())
|
||||||
|
.encrypted(smsRest.isEncrypted());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -136,14 +136,6 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi {
|
|||||||
return ResponseEntity.ok(new ResponseList<>(response));
|
return ResponseEntity.ok(new ResponseList<>(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MgmtRepresentationMode parseRepresentationMode(final String representationModeParam) {
|
|
||||||
return MgmtRepresentationMode.fromValue(representationModeParam).orElseGet(() -> {
|
|
||||||
// no need for a 400, just apply a safe fallback
|
|
||||||
log.warn("Received an invalid representation mode: {}", representationModeParam);
|
|
||||||
return MgmtRepresentationMode.COMPACT;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
// Exception squid:S3655 - Optional access is checked in
|
// Exception squid:S3655 - Optional access is checked in
|
||||||
@@ -339,6 +331,14 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi {
|
|||||||
return ResponseEntity.status(HttpStatus.CREATED).body(MgmtSoftwareModuleMapper.toResponseSwMetadata(created));
|
return ResponseEntity.status(HttpStatus.CREATED).body(MgmtSoftwareModuleMapper.toResponseSwMetadata(created));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static MgmtRepresentationMode parseRepresentationMode(final String representationModeParam) {
|
||||||
|
return MgmtRepresentationMode.fromValue(representationModeParam).orElseGet(() -> {
|
||||||
|
// no need for a 400, just apply a safe fallback
|
||||||
|
log.warn("Received an invalid representation mode: {}", representationModeParam);
|
||||||
|
return MgmtRepresentationMode.COMPACT;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private SoftwareModule findSoftwareModuleWithExceptionIfNotFound(final Long softwareModuleId,
|
private SoftwareModule findSoftwareModuleWithExceptionIfNotFound(final Long softwareModuleId,
|
||||||
final Long artifactId) {
|
final Long artifactId) {
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import org.eclipse.hawkbit.rest.data.ResponseList;
|
|||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
final class MgmtSoftwareModuleTypeMapper {
|
final class MgmtSoftwareModuleTypeMapper {
|
||||||
|
|
||||||
@@ -46,13 +45,6 @@ final class MgmtSoftwareModuleTypeMapper {
|
|||||||
return smTypesRest.stream().map(smRest -> fromRequest(entityFactory, smRest)).collect(Collectors.toList());
|
return smTypesRest.stream().map(smRest -> fromRequest(entityFactory, smRest)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SoftwareModuleTypeCreate fromRequest(final EntityFactory entityFactory,
|
|
||||||
final MgmtSoftwareModuleTypeRequestBodyPost smsRest) {
|
|
||||||
return entityFactory.softwareModuleType().create().key(smsRest.getKey()).name(smsRest.getName())
|
|
||||||
.description(smsRest.getDescription()).colour(smsRest.getColour())
|
|
||||||
.maxAssignments(smsRest.getMaxAssignments());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MgmtSoftwareModuleType> toTypesResponse(final Collection<SoftwareModuleType> types) {
|
static List<MgmtSoftwareModuleType> toTypesResponse(final Collection<SoftwareModuleType> types) {
|
||||||
if (types == null) {
|
if (types == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -75,4 +67,11 @@ final class MgmtSoftwareModuleTypeMapper {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SoftwareModuleTypeCreate fromRequest(final EntityFactory entityFactory,
|
||||||
|
final MgmtSoftwareModuleTypeRequestBodyPost smsRest) {
|
||||||
|
return entityFactory.softwareModuleType().create().key(smsRest.getKey()).name(smsRest.getName())
|
||||||
|
.description(smsRest.getDescription()).colour(smsRest.getColour())
|
||||||
|
.maxAssignments(smsRest.getMaxAssignments());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ import org.eclipse.hawkbit.repository.EntityFactory;
|
|||||||
import org.eclipse.hawkbit.repository.OffsetBasedPageRequest;
|
import org.eclipse.hawkbit.repository.OffsetBasedPageRequest;
|
||||||
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
|
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
|
||||||
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
||||||
import org.eclipse.hawkbit.repository.model.Artifact;
|
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
|
import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.domain.Pageable;
|
||||||
@@ -37,7 +35,6 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* REST Resource handling for {@link SoftwareModuleType} CRUD operations.
|
* REST Resource handling for {@link SoftwareModuleType} CRUD operations.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRestApi {
|
public class MgmtSoftwareModuleTypeResource implements MgmtSoftwareModuleTypeRestApi {
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi
|
|||||||
/**
|
/**
|
||||||
* Deletes the tenant data of a given tenant. USE WITH CARE!
|
* Deletes the tenant data of a given tenant. USE WITH CARE!
|
||||||
*
|
*
|
||||||
* @param tenant
|
* @param tenant to delete
|
||||||
* to delete
|
|
||||||
* @return HttpStatus.OK
|
* @return HttpStatus.OK
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -79,19 +78,6 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi
|
|||||||
return ResponseEntity.ok(result);
|
return ResponseEntity.ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MgmtSystemTenantServiceUsage convertTenant(final TenantUsage tenant) {
|
|
||||||
final MgmtSystemTenantServiceUsage result = new MgmtSystemTenantServiceUsage();
|
|
||||||
result.setTenantName(tenant.getTenantName());
|
|
||||||
result.setActions(tenant.getActions());
|
|
||||||
result.setArtifacts(tenant.getArtifacts());
|
|
||||||
result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes());
|
|
||||||
result.setTargets(tenant.getTargets());
|
|
||||||
if (!tenant.getUsageData().isEmpty()) {
|
|
||||||
result.setUsageData(tenant.getUsageData());
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a list of all caches.
|
* Returns a list of all caches.
|
||||||
*
|
*
|
||||||
@@ -121,4 +107,17 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi
|
|||||||
cacheNames.forEach(cacheName -> cacheManager.getCache(cacheName).clear());
|
cacheNames.forEach(cacheName -> cacheManager.getCache(cacheName).clear());
|
||||||
return ResponseEntity.ok(cacheNames);
|
return ResponseEntity.ok(cacheNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static MgmtSystemTenantServiceUsage convertTenant(final TenantUsage tenant) {
|
||||||
|
final MgmtSystemTenantServiceUsage result = new MgmtSystemTenantServiceUsage();
|
||||||
|
result.setTenantName(tenant.getTenantName());
|
||||||
|
result.setActions(tenant.getActions());
|
||||||
|
result.setArtifacts(tenant.getArtifacts());
|
||||||
|
result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes());
|
||||||
|
result.setTargets(tenant.getTargets());
|
||||||
|
if (!tenant.getUsageData().isEmpty()) {
|
||||||
|
result.setUsageData(tenant.getUsageData());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ final class MgmtTagMapper {
|
|||||||
response.add(linkTo(methodOn(MgmtTargetTagRestApi.class).getAssignedTargets(targetTag.getId(),
|
response.add(linkTo(methodOn(MgmtTargetTagRestApi.class).getAssignedTargets(targetTag.getId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("assignedTargets")
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("assignedTargets")
|
||||||
.expand());
|
.expand());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ final class MgmtTagMapper {
|
|||||||
response.add(linkTo(methodOn(MgmtDistributionSetTagRestApi.class).getAssignedDistributionSets(
|
response.add(linkTo(methodOn(MgmtDistributionSetTagRestApi.class).getAssignedDistributionSets(
|
||||||
distributionSetTag.getId(), MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
distributionSetTag.getId(), MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null))
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null))
|
||||||
.withRel("assignedDistributionSets").expand());
|
.withRel("assignedDistributionSets").expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
static List<TagCreate> mapTagFromRequest(final EntityFactory entityFactory,
|
static List<TagCreate> mapTagFromRequest(final EntityFactory entityFactory,
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ import org.eclipse.hawkbit.mgmt.json.model.targetfilter.MgmtDistributionSetAutoA
|
|||||||
import org.eclipse.hawkbit.mgmt.json.model.targetfilter.MgmtTargetFilterQuery;
|
import org.eclipse.hawkbit.mgmt.json.model.targetfilter.MgmtTargetFilterQuery;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.targetfilter.MgmtTargetFilterQueryRequestBody;
|
import org.eclipse.hawkbit.mgmt.json.model.targetfilter.MgmtTargetFilterQueryRequestBody;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtDistributionSetRestApi;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRepresentationMode;
|
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetFilterQueryRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetFilterQueryRestApi;
|
||||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
import org.eclipse.hawkbit.repository.EntityFactory;
|
||||||
@@ -29,13 +28,11 @@ import org.eclipse.hawkbit.repository.builder.TargetFilterQueryCreate;
|
|||||||
import org.eclipse.hawkbit.repository.model.Action.ActionType;
|
import org.eclipse.hawkbit.repository.model.Action.ActionType;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
|
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
|
||||||
import org.springframework.hateoas.Link;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class MgmtTargetFilterQueryMapper {
|
public final class MgmtTargetFilterQueryMapper {
|
||||||
|
|
||||||
@@ -52,7 +49,7 @@ public final class MgmtTargetFilterQueryMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static MgmtTargetFilterQuery toResponse(final TargetFilterQuery filter, final boolean confirmationFlowEnabled,
|
static MgmtTargetFilterQuery toResponse(final TargetFilterQuery filter, final boolean confirmationFlowEnabled,
|
||||||
final boolean isReprentationFull) {
|
final boolean isReprentationFull) {
|
||||||
final MgmtTargetFilterQuery targetRest = new MgmtTargetFilterQuery();
|
final MgmtTargetFilterQuery targetRest = new MgmtTargetFilterQuery();
|
||||||
targetRest.setFilterId(filter.getId());
|
targetRest.setFilterId(filter.getId());
|
||||||
targetRest.setName(filter.getName());
|
targetRest.setName(filter.getName());
|
||||||
@@ -78,9 +75,10 @@ public final class MgmtTargetFilterQueryMapper {
|
|||||||
linkTo(methodOn(MgmtTargetFilterQueryRestApi.class).getFilter(filter.getId())).withSelfRel().expand());
|
linkTo(methodOn(MgmtTargetFilterQueryRestApi.class).getFilter(filter.getId())).withSelfRel().expand());
|
||||||
if (isReprentationFull && distributionSet != null) {
|
if (isReprentationFull && distributionSet != null) {
|
||||||
targetRest.add(
|
targetRest.add(
|
||||||
linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSets(Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET),
|
linkTo(methodOn(MgmtDistributionSetRestApi.class).getDistributionSets(
|
||||||
Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null,
|
Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET),
|
||||||
"name==" + distributionSet.getName() + ";version==" + distributionSet.getVersion())).withRel("DS").expand());
|
Integer.parseInt(MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT), null,
|
||||||
|
"name==" + distributionSet.getName() + ";version==" + distributionSet.getVersion())).withRel("DS").expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
return targetRest;
|
return targetRest;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
private final TargetFilterQueryManagement filterManagement;
|
private final TargetFilterQueryManagement filterManagement;
|
||||||
|
|
||||||
private final EntityFactory entityFactory;
|
private final EntityFactory entityFactory;
|
||||||
|
|
||||||
private final TenantConfigHelper tenantConfigHelper;
|
private final TenantConfigHelper tenantConfigHelper;
|
||||||
|
|
||||||
MgmtTargetFilterQueryResource(final TargetFilterQueryManagement filterManagement, final EntityFactory entityFactory,
|
MgmtTargetFilterQueryResource(final TargetFilterQueryManagement filterManagement, final EntityFactory entityFactory,
|
||||||
@@ -81,7 +81,6 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
@RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam,
|
@RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_SEARCH, required = false) final String rsqlParam,
|
||||||
@RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE_DEFAULT) String representationModeParam) {
|
@RequestParam(value = MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, defaultValue = MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE_DEFAULT) String representationModeParam) {
|
||||||
|
|
||||||
|
|
||||||
final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam);
|
final int sanitizedOffsetParam = PagingUtility.sanitizeOffsetParam(pagingOffsetParam);
|
||||||
final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam);
|
final int sanitizedLimitParam = PagingUtility.sanitizePageLimitParam(pagingLimitParam);
|
||||||
final Sort sorting = PagingUtility.sanitizeTargetFilterQuerySortParam(sortParam);
|
final Sort sorting = PagingUtility.sanitizeTargetFilterQuerySortParam(sortParam);
|
||||||
@@ -141,6 +140,22 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<MgmtDistributionSet> getAssignedDistributionSet(
|
||||||
|
@PathVariable("filterId") final Long filterId) {
|
||||||
|
final TargetFilterQuery filter = findFilterWithExceptionIfNotFound(filterId);
|
||||||
|
final DistributionSet autoAssignDistributionSet = filter.getAutoAssignDistributionSet();
|
||||||
|
|
||||||
|
if (autoAssignDistributionSet == null) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
final MgmtDistributionSet response = MgmtDistributionSetMapper.toResponse(autoAssignDistributionSet);
|
||||||
|
MgmtDistributionSetMapper.addLinks(autoAssignDistributionSet, response);
|
||||||
|
|
||||||
|
return ResponseEntity.ok(response);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<MgmtTargetFilterQuery> postAssignedDistributionSet(
|
public ResponseEntity<MgmtTargetFilterQuery> postAssignedDistributionSet(
|
||||||
@PathVariable("filterId") final Long filterId,
|
@PathVariable("filterId") final Long filterId,
|
||||||
@@ -162,22 +177,6 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
return ResponseEntity.ok(response);
|
return ResponseEntity.ok(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResponseEntity<MgmtDistributionSet> getAssignedDistributionSet(
|
|
||||||
@PathVariable("filterId") final Long filterId) {
|
|
||||||
final TargetFilterQuery filter = findFilterWithExceptionIfNotFound(filterId);
|
|
||||||
final DistributionSet autoAssignDistributionSet = filter.getAutoAssignDistributionSet();
|
|
||||||
|
|
||||||
if (autoAssignDistributionSet == null) {
|
|
||||||
return ResponseEntity.noContent().build();
|
|
||||||
}
|
|
||||||
|
|
||||||
final MgmtDistributionSet response = MgmtDistributionSetMapper.toResponse(autoAssignDistributionSet);
|
|
||||||
MgmtDistributionSetMapper.addLinks(autoAssignDistributionSet, response);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(response);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> deleteAssignedDistributionSet(@PathVariable("filterId") final Long filterId) {
|
public ResponseEntity<Void> deleteAssignedDistributionSet(@PathVariable("filterId") final Long filterId) {
|
||||||
filterManagement.updateAutoAssignDS(entityFactory.targetFilterQuery().updateAutoAssign(filterId).ds(null));
|
filterManagement.updateAutoAssignDS(entityFactory.targetFilterQuery().updateAutoAssign(filterId).ds(null));
|
||||||
@@ -185,11 +184,6 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
return ResponseEntity.noContent().build();
|
return ResponseEntity.noContent().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private TargetFilterQuery findFilterWithExceptionIfNotFound(final Long filterId) {
|
|
||||||
return filterManagement.get(filterId)
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(TargetFilterQuery.class, filterId));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static MgmtRepresentationMode parseRepresentationMode(final String representationModeParam) {
|
private static MgmtRepresentationMode parseRepresentationMode(final String representationModeParam) {
|
||||||
return MgmtRepresentationMode.fromValue(representationModeParam).orElseGet(() -> {
|
return MgmtRepresentationMode.fromValue(representationModeParam).orElseGet(() -> {
|
||||||
// no need for a 400, just apply a safe fallback
|
// no need for a 400, just apply a safe fallback
|
||||||
@@ -198,4 +192,9 @@ public class MgmtTargetFilterQueryResource implements MgmtTargetFilterQueryRestA
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TargetFilterQuery findFilterWithExceptionIfNotFound(final Long filterId) {
|
||||||
|
return filterManagement.get(filterId)
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(TargetFilterQuery.class, filterId));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ import org.springframework.util.ObjectUtils;
|
|||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
* back.
|
* back.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class MgmtTargetMapper {
|
public final class MgmtTargetMapper {
|
||||||
|
|
||||||
@@ -70,8 +69,7 @@ public final class MgmtTargetMapper {
|
|||||||
/**
|
/**
|
||||||
* Add links to a target response.
|
* Add links to a target response.
|
||||||
*
|
*
|
||||||
* @param response
|
* @param response the target response
|
||||||
* the target response
|
|
||||||
*/
|
*/
|
||||||
public static void addTargetLinks(final MgmtTarget response) {
|
public static void addTargetLinks(final MgmtTarget response) {
|
||||||
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getAssignedDistributionSet(response.getControllerId()))
|
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getAssignedDistributionSet(response.getControllerId()))
|
||||||
@@ -83,11 +81,11 @@ public final class MgmtTargetMapper {
|
|||||||
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionHistory(response.getControllerId(), 0,
|
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionHistory(response.getControllerId(), 0,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE,
|
||||||
ActionFields.ID.getJpaEntityFieldName() + ":" + SortDirection.DESC, null))
|
ActionFields.ID.getJpaEntityFieldName() + ":" + SortDirection.DESC, null))
|
||||||
.withRel(MgmtRestConstants.TARGET_V1_ACTIONS).expand());
|
.withRel(MgmtRestConstants.TARGET_V1_ACTIONS).expand());
|
||||||
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getMetadata(response.getControllerId(),
|
response.add(linkTo(methodOn(MgmtTargetRestApi.class).getMetadata(response.getControllerId(),
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_OFFSET_VALUE,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE, null, null)).withRel("metadata")
|
||||||
.expand());
|
.expand());
|
||||||
if (response.getTargetType() != null) {
|
if (response.getTargetType() != null) {
|
||||||
response.add(linkTo(methodOn(MgmtTargetTypeRestApi.class).getTargetType(response.getTargetType()))
|
response.add(linkTo(methodOn(MgmtTargetTypeRestApi.class).getTargetType(response.getTargetType()))
|
||||||
.withRel(MgmtRestConstants.TARGET_V1_ASSIGNED_TARGET_TYPE).expand());
|
.withRel(MgmtRestConstants.TARGET_V1_ASSIGNED_TARGET_TYPE).expand());
|
||||||
@@ -115,24 +113,10 @@ public final class MgmtTargetMapper {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addPollStatus(final Target target, final MgmtTarget targetRest, final Function<Target, PollStatus> pollStatusResolver) {
|
|
||||||
final PollStatus pollStatus = pollStatusResolver == null ? target.getPollStatus() : pollStatusResolver.apply(target);
|
|
||||||
if (pollStatus != null) {
|
|
||||||
final MgmtPollStatus pollStatusRest = new MgmtPollStatus();
|
|
||||||
pollStatusRest.setLastRequestAt(
|
|
||||||
Date.from(pollStatus.getLastPollDate().atZone(ZoneId.systemDefault()).toInstant()).getTime());
|
|
||||||
pollStatusRest.setNextExpectedRequestAt(
|
|
||||||
Date.from(pollStatus.getNextPollDate().atZone(ZoneId.systemDefault()).toInstant()).getTime());
|
|
||||||
pollStatusRest.setOverdue(pollStatus.isOverdue());
|
|
||||||
targetRest.setPollStatus(pollStatusRest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a response for targets.
|
* Create a response for targets.
|
||||||
*
|
*
|
||||||
* @param targets
|
* @param targets list of targets
|
||||||
* list of targets
|
|
||||||
* @return the response
|
* @return the response
|
||||||
*/
|
*/
|
||||||
public static List<MgmtTarget> toResponse(final Collection<Target> targets, final TenantConfigHelper configHelper) {
|
public static List<MgmtTarget> toResponse(final Collection<Target> targets, final TenantConfigHelper configHelper) {
|
||||||
@@ -148,11 +132,11 @@ public final class MgmtTargetMapper {
|
|||||||
/**
|
/**
|
||||||
* Create a response for target.
|
* Create a response for target.
|
||||||
*
|
*
|
||||||
* @param target
|
* @param target the target
|
||||||
* the target
|
|
||||||
* @return the response
|
* @return the response
|
||||||
*/
|
*/
|
||||||
public static MgmtTarget toResponse(final Target target, final TenantConfigHelper configHelper, final Function<Target, PollStatus> pollStatusResolver) {
|
public static MgmtTarget toResponse(final Target target, final TenantConfigHelper configHelper,
|
||||||
|
final Function<Target, PollStatus> pollStatusResolver) {
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -215,12 +199,6 @@ public final class MgmtTargetMapper {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TargetCreate fromRequest(final EntityFactory entityFactory, final MgmtTargetRequestBody targetRest) {
|
|
||||||
return entityFactory.target().create().controllerId(targetRest.getControllerId()).name(targetRest.getName())
|
|
||||||
.description(targetRest.getDescription()).securityToken(targetRest.getSecurityToken())
|
|
||||||
.address(targetRest.getAddress()).targetType(targetRest.getTargetType());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MetaData> fromRequestTargetMetadata(final List<MgmtMetadata> metadata,
|
static List<MetaData> fromRequestTargetMetadata(final List<MgmtMetadata> metadata,
|
||||||
final EntityFactory entityFactory) {
|
final EntityFactory entityFactory) {
|
||||||
if (metadata == null) {
|
if (metadata == null) {
|
||||||
@@ -228,7 +206,7 @@ public final class MgmtTargetMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return metadata.stream().map(
|
return metadata.stream().map(
|
||||||
metadataRest -> entityFactory.generateTargetMetadata(metadataRest.getKey(), metadataRest.getValue()))
|
metadataRest -> entityFactory.generateTargetMetadata(metadataRest.getKey(), metadataRest.getValue()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,7 +219,7 @@ public final class MgmtTargetMapper {
|
|||||||
return actionStatus.stream()
|
return actionStatus.stream()
|
||||||
.map(status -> toResponse(status,
|
.map(status -> toResponse(status,
|
||||||
deploymentManagement.findMessagesByActionStatusId(
|
deploymentManagement.findMessagesByActionStatusId(
|
||||||
PageRequest.of(0, MgmtRestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT), status.getId())
|
PageRequest.of(0, MgmtRestConstants.REQUEST_PARAMETER_PAGING_MAX_LIMIT), status.getId())
|
||||||
.getContent()))
|
.getContent()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@@ -317,7 +295,7 @@ public final class MgmtTargetMapper {
|
|||||||
result.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionStatusList(controllerId, action.getId(), 0,
|
result.add(linkTo(methodOn(MgmtTargetRestApi.class).getActionStatusList(controllerId, action.getId(), 0,
|
||||||
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE,
|
MgmtRestConstants.REQUEST_PARAMETER_PAGING_DEFAULT_LIMIT_VALUE,
|
||||||
ActionStatusFields.ID.getJpaEntityFieldName() + ":" + SortDirection.DESC))
|
ActionStatusFields.ID.getJpaEntityFieldName() + ":" + SortDirection.DESC))
|
||||||
.withRel(MgmtRestConstants.TARGET_V1_ACTION_STATUS).expand());
|
.withRel(MgmtRestConstants.TARGET_V1_ACTION_STATUS).expand());
|
||||||
|
|
||||||
final Rollout rollout = action.getRollout();
|
final Rollout rollout = action.getRollout();
|
||||||
if (rollout != null) {
|
if (rollout != null) {
|
||||||
@@ -336,6 +314,36 @@ public final class MgmtTargetMapper {
|
|||||||
return actions.stream().map(action -> toResponse(targetId, action)).collect(Collectors.toList());
|
return actions.stream().map(action -> toResponse(targetId, action)).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MgmtMetadata toResponseTargetMetadata(final TargetMetadata metadata) {
|
||||||
|
final MgmtMetadata metadataRest = new MgmtMetadata();
|
||||||
|
metadataRest.setKey(metadata.getKey());
|
||||||
|
metadataRest.setValue(metadata.getValue());
|
||||||
|
return metadataRest;
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<MgmtMetadata> toResponseTargetMetadata(final List<TargetMetadata> metadata) {
|
||||||
|
return metadata.stream().map(MgmtTargetMapper::toResponseTargetMetadata).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void addPollStatus(final Target target, final MgmtTarget targetRest, final Function<Target, PollStatus> pollStatusResolver) {
|
||||||
|
final PollStatus pollStatus = pollStatusResolver == null ? target.getPollStatus() : pollStatusResolver.apply(target);
|
||||||
|
if (pollStatus != null) {
|
||||||
|
final MgmtPollStatus pollStatusRest = new MgmtPollStatus();
|
||||||
|
pollStatusRest.setLastRequestAt(
|
||||||
|
Date.from(pollStatus.getLastPollDate().atZone(ZoneId.systemDefault()).toInstant()).getTime());
|
||||||
|
pollStatusRest.setNextExpectedRequestAt(
|
||||||
|
Date.from(pollStatus.getNextPollDate().atZone(ZoneId.systemDefault()).toInstant()).getTime());
|
||||||
|
pollStatusRest.setOverdue(pollStatus.isOverdue());
|
||||||
|
targetRest.setPollStatus(pollStatusRest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TargetCreate fromRequest(final EntityFactory entityFactory, final MgmtTargetRequestBody targetRest) {
|
||||||
|
return entityFactory.target().create().controllerId(targetRest.getControllerId()).name(targetRest.getName())
|
||||||
|
.description(targetRest.getDescription()).securityToken(targetRest.getSecurityToken())
|
||||||
|
.address(targetRest.getAddress()).targetType(targetRest.getTargetType());
|
||||||
|
}
|
||||||
|
|
||||||
private static String getType(final Action action) {
|
private static String getType(final Action action) {
|
||||||
if (!action.isCancelingOrCanceled()) {
|
if (!action.isCancelingOrCanceled()) {
|
||||||
return MgmtAction.ACTION_UPDATE;
|
return MgmtAction.ACTION_UPDATE;
|
||||||
@@ -357,15 +365,4 @@ public final class MgmtTargetMapper {
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MgmtMetadata toResponseTargetMetadata(final TargetMetadata metadata) {
|
|
||||||
final MgmtMetadata metadataRest = new MgmtMetadata();
|
|
||||||
metadataRest.setKey(metadata.getKey());
|
|
||||||
metadataRest.setValue(metadata.getValue());
|
|
||||||
return metadataRest;
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MgmtMetadata> toResponseTargetMetadata(final List<TargetMetadata> metadata) {
|
|
||||||
return metadata.stream().map(MgmtTargetMapper::toResponseTargetMetadata).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
public class MgmtTargetResource implements MgmtTargetRestApi {
|
public class MgmtTargetResource implements MgmtTargetRestApi {
|
||||||
|
|
||||||
private static final String ACTION_TARGET_MISSING_ASSIGN_WARN = "given action ({}) is not assigned to given target ({}).";
|
private static final String ACTION_TARGET_MISSING_ASSIGN_WARN = "given action ({}) is not assigned to given target ({}).";
|
||||||
|
|
||||||
private final TargetManagement targetManagement;
|
private final TargetManagement targetManagement;
|
||||||
@@ -163,14 +163,15 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
this.targetManagement.unassignType(targetId);
|
this.targetManagement.unassignType(targetId);
|
||||||
// update target without targetType here ...
|
// update target without targetType here ...
|
||||||
updateTarget = this.targetManagement.update(entityFactory.target().update(targetId)
|
updateTarget = this.targetManagement.update(entityFactory.target().update(targetId)
|
||||||
.name(targetRest.getName()).description(targetRest.getDescription()).address(targetRest.getAddress())
|
.name(targetRest.getName()).description(targetRest.getDescription()).address(targetRest.getAddress())
|
||||||
.securityToken(targetRest.getSecurityToken()).requestAttributes(targetRest.getRequestAttributes()));
|
.securityToken(targetRest.getSecurityToken()).requestAttributes(targetRest.getRequestAttributes()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
updateTarget = this.targetManagement.update(
|
updateTarget = this.targetManagement.update(
|
||||||
entityFactory.target().update(targetId).name(targetRest.getName()).description(targetRest.getDescription())
|
entityFactory.target().update(targetId).name(targetRest.getName()).description(targetRest.getDescription())
|
||||||
.address(targetRest.getAddress()).targetType(targetRest.getTargetType()).securityToken(targetRest.getSecurityToken())
|
.address(targetRest.getAddress()).targetType(targetRest.getTargetType())
|
||||||
.requestAttributes(targetRest.getRequestAttributes()));
|
.securityToken(targetRest.getSecurityToken())
|
||||||
|
.requestAttributes(targetRest.getRequestAttributes()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,6 +279,26 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
return ResponseEntity.noContent().build();
|
return ResponseEntity.noContent().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<MgmtAction> updateAction(@PathVariable("targetId") final String targetId,
|
||||||
|
@PathVariable("actionId") final Long actionId, @RequestBody final MgmtActionRequestBodyPut actionUpdate) {
|
||||||
|
|
||||||
|
Action action = deploymentManagement.findAction(actionId)
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(Action.class, actionId));
|
||||||
|
if (!action.getTarget().getControllerId().equals(targetId)) {
|
||||||
|
log.warn(ACTION_TARGET_MISSING_ASSIGN_WARN, action.getId(), targetId);
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MgmtActionType.FORCED != actionUpdate.getActionType()) {
|
||||||
|
throw new ValidationException("Resource supports only switch to FORCED.");
|
||||||
|
}
|
||||||
|
|
||||||
|
action = deploymentManagement.forceTargetAction(actionId);
|
||||||
|
|
||||||
|
return ResponseEntity.ok(MgmtTargetMapper.toResponseWithLinks(targetId, action));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<PagedList<MgmtActionStatus>> getActionStatusList(
|
public ResponseEntity<PagedList<MgmtActionStatus>> getActionStatusList(
|
||||||
@PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId,
|
@PathVariable("targetId") final String targetId, @PathVariable("actionId") final Long actionId,
|
||||||
@@ -370,31 +391,6 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
return ResponseEntity.ok(distributionSetRest);
|
return ResponseEntity.ok(distributionSetRest);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Target findTargetWithExceptionIfNotFound(final String targetId) {
|
|
||||||
return targetManagement.getByControllerID(targetId)
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(Target.class, targetId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResponseEntity<MgmtAction> updateAction(@PathVariable("targetId") final String targetId,
|
|
||||||
@PathVariable("actionId") final Long actionId, @RequestBody final MgmtActionRequestBodyPut actionUpdate) {
|
|
||||||
|
|
||||||
Action action = deploymentManagement.findAction(actionId)
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(Action.class, actionId));
|
|
||||||
if (!action.getTarget().getControllerId().equals(targetId)) {
|
|
||||||
log.warn(ACTION_TARGET_MISSING_ASSIGN_WARN, action.getId(), targetId);
|
|
||||||
return ResponseEntity.notFound().build();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MgmtActionType.FORCED != actionUpdate.getActionType()) {
|
|
||||||
throw new ValidationException("Resource supports only switch to FORCED.");
|
|
||||||
}
|
|
||||||
|
|
||||||
action = deploymentManagement.forceTargetAction(actionId);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(MgmtTargetMapper.toResponseWithLinks(targetId, action));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<List<MgmtTag>> getTags(@PathVariable("targetId") String targetId) {
|
public ResponseEntity<List<MgmtTag>> getTags(@PathVariable("targetId") String targetId) {
|
||||||
final Set<TargetTag> tags = targetManagement.getTagsByControllerId(targetId);
|
final Set<TargetTag> tags = targetManagement.getTagsByControllerId(targetId);
|
||||||
@@ -473,14 +469,19 @@ public class MgmtTargetResource implements MgmtTargetRestApi {
|
|||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T, R> R getNullIfEmpty(final T object, final Function<T, R> extractMethod) {
|
|
||||||
return object == null ? null : extractMethod.apply(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> deactivateAutoConfirm(@PathVariable("targetId") final String targetId) {
|
public ResponseEntity<Void> deactivateAutoConfirm(@PathVariable("targetId") final String targetId) {
|
||||||
confirmationManagement.deactivateAutoConfirmation(targetId);
|
confirmationManagement.deactivateAutoConfirmation(targetId);
|
||||||
return new ResponseEntity<>(HttpStatus.OK);
|
return new ResponseEntity<>(HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Target findTargetWithExceptionIfNotFound(final String targetId) {
|
||||||
|
return targetManagement.getByControllerID(targetId)
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(Target.class, targetId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private <T, R> R getNullIfEmpty(final T object, final Function<T, R> extractMethod) {
|
||||||
|
return object == null ? null : extractMethod.apply(object);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,24 +161,6 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi {
|
|||||||
return ResponseEntity.ok(new PagedList<>(rest, findTargetsAll.getTotalElements()));
|
return ResponseEntity.ok(new PagedList<>(rest, findTargetsAll.getTotalElements()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResponseEntity<MgmtTargetTagAssigmentResult> toggleTagAssignment(
|
|
||||||
@PathVariable("targetTagId") final Long targetTagId,
|
|
||||||
@RequestBody final List<MgmtAssignedTargetRequestBody> assignedTargetRequestBodies) {
|
|
||||||
log.debug("Toggle Target assignment {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId);
|
|
||||||
|
|
||||||
final TargetTag targetTag = findTargetTagById(targetTagId);
|
|
||||||
final TargetTagAssignmentResult assigmentResult = this.targetManagement
|
|
||||||
.toggleTagAssignment(findTargetControllerIds(assignedTargetRequestBodies), targetTag.getName());
|
|
||||||
|
|
||||||
final MgmtTargetTagAssigmentResult tagAssigmentResultRest = new MgmtTargetTagAssigmentResult();
|
|
||||||
tagAssigmentResultRest.setAssignedTargets(
|
|
||||||
MgmtTargetMapper.toResponse(assigmentResult.getAssignedEntity(), tenantConfigHelper));
|
|
||||||
tagAssigmentResultRest.setUnassignedTargets(
|
|
||||||
MgmtTargetMapper.toResponse(assigmentResult.getUnassignedEntity(), tenantConfigHelper));
|
|
||||||
return ResponseEntity.ok(tagAssigmentResultRest);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> assignTarget(final Long targetTagId, final String controllerId) {
|
public ResponseEntity<Void> assignTarget(final Long targetTagId, final String controllerId) {
|
||||||
log.debug("Assign target {} for target tag {}", controllerId, targetTagId);
|
log.debug("Assign target {} for target tag {}", controllerId, targetTagId);
|
||||||
@@ -187,7 +169,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> assignTargets(final Long targetTagId, final OnNotFoundPolicy onNotFoundPolicy, final List<String> controllerIds) {
|
public ResponseEntity<Void> assignTargets(final Long targetTagId, final OnNotFoundPolicy onNotFoundPolicy,
|
||||||
|
final List<String> controllerIds) {
|
||||||
log.debug("Assign {} targets for target tag {}", controllerIds.size(), targetTagId);
|
log.debug("Assign {} targets for target tag {}", controllerIds.size(), targetTagId);
|
||||||
if (onNotFoundPolicy == OnNotFoundPolicy.FAIL) {
|
if (onNotFoundPolicy == OnNotFoundPolicy.FAIL) {
|
||||||
this.targetManagement.assignTag(controllerIds, targetTagId);
|
this.targetManagement.assignTag(controllerIds, targetTagId);
|
||||||
@@ -213,7 +196,8 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> unassignTargets(final Long targetTagId, final OnNotFoundPolicy onNotFoundPolicy, final List<String> controllerIds) {
|
public ResponseEntity<Void> unassignTargets(final Long targetTagId, final OnNotFoundPolicy onNotFoundPolicy,
|
||||||
|
final List<String> controllerIds) {
|
||||||
log.debug("Unassign {} targets for target tag {}", controllerIds.size(), targetTagId);
|
log.debug("Unassign {} targets for target tag {}", controllerIds.size(), targetTagId);
|
||||||
if (onNotFoundPolicy == OnNotFoundPolicy.FAIL) {
|
if (onNotFoundPolicy == OnNotFoundPolicy.FAIL) {
|
||||||
this.targetManagement.unassignTag(controllerIds, targetTagId);
|
this.targetManagement.unassignTag(controllerIds, targetTagId);
|
||||||
@@ -230,6 +214,24 @@ public class MgmtTargetTagResource implements MgmtTargetTagRestApi {
|
|||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<MgmtTargetTagAssigmentResult> toggleTagAssignment(
|
||||||
|
@PathVariable("targetTagId") final Long targetTagId,
|
||||||
|
@RequestBody final List<MgmtAssignedTargetRequestBody> assignedTargetRequestBodies) {
|
||||||
|
log.debug("Toggle Target assignment {} for target tag {}", assignedTargetRequestBodies.size(), targetTagId);
|
||||||
|
|
||||||
|
final TargetTag targetTag = findTargetTagById(targetTagId);
|
||||||
|
final TargetTagAssignmentResult assigmentResult = this.targetManagement
|
||||||
|
.toggleTagAssignment(findTargetControllerIds(assignedTargetRequestBodies), targetTag.getName());
|
||||||
|
|
||||||
|
final MgmtTargetTagAssigmentResult tagAssigmentResultRest = new MgmtTargetTagAssigmentResult();
|
||||||
|
tagAssigmentResultRest.setAssignedTargets(
|
||||||
|
MgmtTargetMapper.toResponse(assigmentResult.getAssignedEntity(), tenantConfigHelper));
|
||||||
|
tagAssigmentResultRest.setUnassignedTargets(
|
||||||
|
MgmtTargetMapper.toResponse(assigmentResult.getUnassignedEntity(), tenantConfigHelper));
|
||||||
|
return ResponseEntity.ok(tagAssigmentResultRest);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<List<MgmtTarget>> assignTargetsByRequestBody(@PathVariable("targetTagId") final Long targetTagId,
|
public ResponseEntity<List<MgmtTarget>> assignTargetsByRequestBody(@PathVariable("targetTagId") final Long targetTagId,
|
||||||
@RequestBody final List<MgmtAssignedTargetRequestBody> assignedTargetRequestBodies) {
|
@RequestBody final List<MgmtAssignedTargetRequestBody> assignedTargetRequestBodies) {
|
||||||
|
|||||||
@@ -46,20 +46,6 @@ public final class MgmtTargetTypeMapper {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TargetTypeCreate fromRequest(final EntityFactory entityFactory,
|
|
||||||
final MgmtTargetTypeRequestBodyPost targetTypesRest) {
|
|
||||||
return entityFactory.targetType().create()
|
|
||||||
.name(targetTypesRest.getName()).description(targetTypesRest.getDescription())
|
|
||||||
.key(targetTypesRest.getKey()).colour(targetTypesRest.getColour())
|
|
||||||
.compatible(getDistributionSets(targetTypesRest));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Collection<Long> getDistributionSets(final MgmtTargetTypeRequestBodyPost targetTypesRest) {
|
|
||||||
return Optional.ofNullable(targetTypesRest.getCompatibledistributionsettypes())
|
|
||||||
.map(ds -> ds.stream().map(MgmtDistributionSetTypeAssignment::getId).collect(Collectors.toList()))
|
|
||||||
.orElse(Collections.emptyList());
|
|
||||||
}
|
|
||||||
|
|
||||||
static List<MgmtTargetType> toListResponse(final List<TargetType> types) {
|
static List<MgmtTargetType> toListResponse(final List<TargetType> types) {
|
||||||
if (types == null) {
|
if (types == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
@@ -81,4 +67,18 @@ public final class MgmtTargetTypeMapper {
|
|||||||
result.add(linkTo(methodOn(MgmtTargetTypeRestApi.class).getCompatibleDistributionSets(result.getTypeId()))
|
result.add(linkTo(methodOn(MgmtTargetTypeRestApi.class).getCompatibleDistributionSets(result.getTypeId()))
|
||||||
.withRel(MgmtRestConstants.TARGETTYPE_V1_DS_TYPES).expand());
|
.withRel(MgmtRestConstants.TARGETTYPE_V1_DS_TYPES).expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static TargetTypeCreate fromRequest(final EntityFactory entityFactory,
|
||||||
|
final MgmtTargetTypeRequestBodyPost targetTypesRest) {
|
||||||
|
return entityFactory.targetType().create()
|
||||||
|
.name(targetTypesRest.getName()).description(targetTypesRest.getDescription())
|
||||||
|
.key(targetTypesRest.getKey()).colour(targetTypesRest.getColour())
|
||||||
|
.compatible(getDistributionSets(targetTypesRest));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Collection<Long> getDistributionSets(final MgmtTargetTypeRequestBodyPost targetTypesRest) {
|
||||||
|
return Optional.ofNullable(targetTypesRest.getCompatibledistributionsettypes())
|
||||||
|
.map(ds -> ds.stream().map(MgmtDistributionSetTypeAssignment::getId).collect(Collectors.toList()))
|
||||||
|
.orElse(Collections.emptyList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ package org.eclipse.hawkbit.mgmt.rest.resource;
|
|||||||
|
|
||||||
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
|
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
|
||||||
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
|
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue;
|
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue;
|
||||||
import org.eclipse.hawkbit.repository.model.TenantConfigurationValue;
|
import org.eclipse.hawkbit.repository.model.TenantConfigurationValue;
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ import org.eclipse.hawkbit.repository.model.TenantConfigurationValue;
|
|||||||
* back.
|
* back.
|
||||||
*/
|
*/
|
||||||
public final class MgmtTenantManagementMapper {
|
public final class MgmtTenantManagementMapper {
|
||||||
|
|
||||||
public static String DEFAULT_DISTRIBUTION_SET_TYPE_KEY = "default.ds.type";
|
public static String DEFAULT_DISTRIBUTION_SET_TYPE_KEY = "default.ds.type";
|
||||||
|
|
||||||
private MgmtTenantManagementMapper() {
|
private MgmtTenantManagementMapper() {
|
||||||
@@ -43,7 +45,7 @@ public final class MgmtTenantManagementMapper {
|
|||||||
restConfValue.setValue(defaultDistributionSetType);
|
restConfValue.setValue(defaultDistributionSetType);
|
||||||
restConfValue.setGlobal(Boolean.FALSE);
|
restConfValue.setGlobal(Boolean.FALSE);
|
||||||
restConfValue.add(linkTo(methodOn(MgmtTenantManagementResource.class).getTenantConfigurationValue(DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
restConfValue.add(linkTo(methodOn(MgmtTenantManagementResource.class).getTenantConfigurationValue(DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
||||||
.withSelfRel().expand());
|
.withSelfRel().expand());
|
||||||
return restConfValue;
|
return restConfValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,6 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue;
|
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValue;
|
||||||
@@ -45,7 +44,7 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
|
|
||||||
MgmtTenantManagementResource(final TenantConfigurationManagement tenantConfigurationManagement,
|
MgmtTenantManagementResource(final TenantConfigurationManagement tenantConfigurationManagement,
|
||||||
final TenantConfigurationProperties tenantConfigurationProperties,
|
final TenantConfigurationProperties tenantConfigurationProperties,
|
||||||
final SystemManagement systemManagement) {
|
final SystemManagement systemManagement) {
|
||||||
this.tenantConfigurationManagement = tenantConfigurationManagement;
|
this.tenantConfigurationManagement = tenantConfigurationManagement;
|
||||||
this.tenantConfigurationProperties = tenantConfigurationProperties;
|
this.tenantConfigurationProperties = tenantConfigurationProperties;
|
||||||
this.systemManagement = systemManagement;
|
this.systemManagement = systemManagement;
|
||||||
@@ -64,7 +63,8 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Load and Add Default DistributionSetType
|
// Load and Add Default DistributionSetType
|
||||||
final MgmtSystemTenantConfigurationValue defaultDsTypeId = loadTenantConfigurationValueBy(MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY);
|
final MgmtSystemTenantConfigurationValue defaultDsTypeId = loadTenantConfigurationValueBy(
|
||||||
|
MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY);
|
||||||
tenantConfigurationValueMap.put(MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY, defaultDsTypeId);
|
tenantConfigurationValueMap.put(MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY, defaultDsTypeId);
|
||||||
|
|
||||||
// return combined TenantConfiguration and TenantMetadata
|
// return combined TenantConfiguration and TenantMetadata
|
||||||
@@ -72,24 +72,6 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
return ResponseEntity.ok(tenantConfigurationValueMap);
|
return ResponseEntity.ok(tenantConfigurationValueMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ResponseEntity<MgmtSystemTenantConfigurationValue> getTenantConfigurationValue(
|
|
||||||
@PathVariable("keyName") final String keyName) {
|
|
||||||
return ResponseEntity.ok(loadTenantConfigurationValueBy(keyName));
|
|
||||||
}
|
|
||||||
|
|
||||||
private MgmtSystemTenantConfigurationValue loadTenantConfigurationValueBy(String keyName) {
|
|
||||||
|
|
||||||
//Check if requested key is TenantConfiguration or TenantMetadata, load it and return it as rest response
|
|
||||||
MgmtSystemTenantConfigurationValue response;
|
|
||||||
if (isDefaultDistributionSetTypeKey(keyName)) {
|
|
||||||
response = MgmtTenantManagementMapper.toResponseDefaultDsType(systemManagement.getTenantMetadata().getDefaultDsType().getId());
|
|
||||||
} else {
|
|
||||||
response = MgmtTenantManagementMapper.toResponseTenantConfigurationValue(keyName, tenantConfigurationManagement.getConfigurationValue(keyName));
|
|
||||||
}
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<Void> deleteTenantConfigurationValue(@PathVariable("keyName") final String keyName) {
|
public ResponseEntity<Void> deleteTenantConfigurationValue(@PathVariable("keyName") final String keyName) {
|
||||||
|
|
||||||
@@ -104,17 +86,23 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseEntity<MgmtSystemTenantConfigurationValue> getTenantConfigurationValue(
|
||||||
|
@PathVariable("keyName") final String keyName) {
|
||||||
|
return ResponseEntity.ok(loadTenantConfigurationValueBy(keyName));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseEntity<MgmtSystemTenantConfigurationValue> updateTenantConfigurationValue(
|
public ResponseEntity<MgmtSystemTenantConfigurationValue> updateTenantConfigurationValue(
|
||||||
@PathVariable("keyName") final String keyName,
|
@PathVariable("keyName") final String keyName,
|
||||||
@RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest) {
|
@RequestBody final MgmtSystemTenantConfigurationValueRequest configurationValueRest) {
|
||||||
Serializable configurationValue = configurationValueRest.getValue();
|
Serializable configurationValue = configurationValueRest.getValue();
|
||||||
final MgmtSystemTenantConfigurationValue responseUpdatedValue;
|
final MgmtSystemTenantConfigurationValue responseUpdatedValue;
|
||||||
if (isDefaultDistributionSetTypeKey(keyName)) {
|
if (isDefaultDistributionSetTypeKey(keyName)) {
|
||||||
responseUpdatedValue = updateDefaultDsType(configurationValue);
|
responseUpdatedValue = updateDefaultDsType(configurationValue);
|
||||||
} else {
|
} else {
|
||||||
final TenantConfigurationValue<? extends Serializable> updatedTenantConfigurationValue = tenantConfigurationManagement
|
final TenantConfigurationValue<? extends Serializable> updatedTenantConfigurationValue = tenantConfigurationManagement
|
||||||
.addOrUpdateConfiguration(keyName, configurationValueRest.getValue());
|
.addOrUpdateConfiguration(keyName, configurationValueRest.getValue());
|
||||||
responseUpdatedValue = MgmtTenantManagementMapper.toResponseTenantConfigurationValue(keyName, updatedTenantConfigurationValue);
|
responseUpdatedValue = MgmtTenantManagementMapper.toResponseTenantConfigurationValue(keyName, updatedTenantConfigurationValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +114,7 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
Map<String, Serializable> configurationValueMap) {
|
Map<String, Serializable> configurationValueMap) {
|
||||||
|
|
||||||
boolean containsNull = configurationValueMap.keySet().stream()
|
boolean containsNull = configurationValueMap.keySet().stream()
|
||||||
.anyMatch(Objects::isNull);
|
.anyMatch(Objects::isNull);
|
||||||
|
|
||||||
if (containsNull) {
|
if (containsNull) {
|
||||||
return ResponseEntity.badRequest().build();
|
return ResponseEntity.badRequest().build();
|
||||||
@@ -152,30 +140,44 @@ public class MgmtTenantManagementResource implements MgmtTenantManagementRestApi
|
|||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<MgmtSystemTenantConfigurationValue> tenantConfigurationListUpdated = new java.util.ArrayList<>(tenantConfigurationValues.entrySet().stream()
|
List<MgmtSystemTenantConfigurationValue> tenantConfigurationListUpdated = new java.util.ArrayList<>(
|
||||||
.map(entry -> MgmtTenantManagementMapper.toResponseTenantConfigurationValue(entry.getKey(), entry.getValue())).toList());
|
tenantConfigurationValues.entrySet().stream()
|
||||||
|
.map(entry -> MgmtTenantManagementMapper.toResponseTenantConfigurationValue(entry.getKey(), entry.getValue()))
|
||||||
|
.toList());
|
||||||
if (updatedDefaultDsType != null) {
|
if (updatedDefaultDsType != null) {
|
||||||
tenantConfigurationListUpdated.add(updatedDefaultDsType);
|
tenantConfigurationListUpdated.add(updatedDefaultDsType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ResponseEntity.ok(tenantConfigurationListUpdated);
|
return ResponseEntity.ok(tenantConfigurationListUpdated);
|
||||||
}
|
}
|
||||||
private MgmtSystemTenantConfigurationValue updateDefaultDsType(Serializable defaultDsType) {
|
|
||||||
long updateDefaultDsType;
|
|
||||||
try {
|
|
||||||
updateDefaultDsType = ((Number) defaultDsType).longValue();
|
|
||||||
} catch (ClassCastException cce) {
|
|
||||||
throw new TenantConfigurationValidatorException(String.format(
|
|
||||||
"Default DistributionSetType Value Type is incorrect. Expected Long, received %s", defaultDsType.getClass().getName()));
|
|
||||||
}
|
|
||||||
systemManagement.updateTenantMetadata(updateDefaultDsType);
|
|
||||||
return MgmtTenantManagementMapper.toResponseDefaultDsType(updateDefaultDsType);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isDefaultDistributionSetTypeKey(String keyName) {
|
private static boolean isDefaultDistributionSetTypeKey(String keyName) {
|
||||||
return MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY.equals(keyName);
|
return MgmtTenantManagementMapper.DEFAULT_DISTRIBUTION_SET_TYPE_KEY.equals(keyName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MgmtSystemTenantConfigurationValue loadTenantConfigurationValueBy(String keyName) {
|
||||||
|
|
||||||
|
//Check if requested key is TenantConfiguration or TenantMetadata, load it and return it as rest response
|
||||||
|
MgmtSystemTenantConfigurationValue response;
|
||||||
|
if (isDefaultDistributionSetTypeKey(keyName)) {
|
||||||
|
response = MgmtTenantManagementMapper.toResponseDefaultDsType(systemManagement.getTenantMetadata().getDefaultDsType().getId());
|
||||||
|
} else {
|
||||||
|
response = MgmtTenantManagementMapper.toResponseTenantConfigurationValue(keyName,
|
||||||
|
tenantConfigurationManagement.getConfigurationValue(keyName));
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MgmtSystemTenantConfigurationValue updateDefaultDsType(Serializable defaultDsType) {
|
||||||
|
long updateDefaultDsType;
|
||||||
|
try {
|
||||||
|
updateDefaultDsType = ((Number) defaultDsType).longValue();
|
||||||
|
} catch (ClassCastException cce) {
|
||||||
|
throw new TenantConfigurationValidatorException(String.format(
|
||||||
|
"Default DistributionSetType Value Type is incorrect. Expected Long, received %s", defaultDsType.getClass().getName()));
|
||||||
|
}
|
||||||
|
systemManagement.updateTenantMetadata(updateDefaultDsType);
|
||||||
|
return MgmtTenantManagementMapper.toResponseDefaultDsType(updateDefaultDsType);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ import org.springframework.data.domain.Sort.Direction;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class for for paged body generation.
|
* Utility class for for paged body generation.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public final class PagingUtility {
|
public final class PagingUtility {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* utility constructor private.
|
* utility constructor private.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ import java.util.List;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Step;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.awaitility.Awaitility;
|
import org.awaitility.Awaitility;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtActionRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtActionRestApi;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRepresentationMode;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRepresentationMode;
|
||||||
@@ -39,11 +43,6 @@ import org.eclipse.hawkbit.repository.model.Rollout;
|
|||||||
import org.eclipse.hawkbit.repository.model.Target;
|
import org.eclipse.hawkbit.repository.model.Target;
|
||||||
import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter;
|
import org.eclipse.hawkbit.rest.util.MockMvcResultPrinter;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Step;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
import org.springframework.test.web.servlet.ResultActions;
|
import org.springframework.test.web.servlet.ResultActions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,6 +65,18 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
private static final String JSON_PATH_ACTION_ID = JSON_PATH_ROOT + JSON_PATH_FIELD_ID;
|
private static final String JSON_PATH_ACTION_ID = JSON_PATH_ROOT + JSON_PATH_FIELD_ID;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Handles the GET request of retrieving a specific action.")
|
||||||
|
public void getAction() throws Exception {
|
||||||
|
getAction(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Handles the GET request of retrieving a specific action with external reference.")
|
||||||
|
public void getActionExtRef() throws Exception {
|
||||||
|
getAction(true);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that actions can be filtered based on action status.")
|
@Description("Verifies that actions can be filtered based on action status.")
|
||||||
void filterActionsByStatus() throws Exception {
|
void filterActionsByStatus() throws Exception {
|
||||||
@@ -214,7 +225,7 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
final String rsqlDsId = "distributionSet.id==" + ds.getId();
|
final String rsqlDsId = "distributionSet.id==" + ds.getId();
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlDsName)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlDsName)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
||||||
.andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content.[0]._links.distributionset.name",
|
.andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content.[0]._links.distributionset.name",
|
||||||
equalTo(ds.getName() + ":" + ds.getVersion())));
|
equalTo(ds.getName() + ":" + ds.getVersion())));
|
||||||
@@ -258,14 +269,14 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
final String rsqlRolloutId = "rollout.id==" + rollout.getId();
|
final String rsqlRolloutId = "rollout.id==" + rollout.getId();
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlRolloutName)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlRolloutName)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
||||||
.andExpect(jsonPath("size", equalTo(1)))
|
.andExpect(jsonPath("size", equalTo(1)))
|
||||||
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target1.getName()))).andExpect(jsonPath(
|
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target1.getName()))).andExpect(jsonPath(
|
||||||
"content.[0]._links.distributionset.name", equalTo(ds.getName() + ":" + ds.getVersion())));
|
"content.[0]._links.distributionset.name", equalTo(ds.getName() + ":" + ds.getVersion())));
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlRolloutId)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlRolloutId)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
||||||
.andExpect(jsonPath("size", equalTo(1)))
|
.andExpect(jsonPath("size", equalTo(1)))
|
||||||
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target1.getName()))).andExpect(jsonPath(
|
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target1.getName()))).andExpect(jsonPath(
|
||||||
@@ -292,18 +303,6 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
verifyResultsByTargetPropertyFilter(target, ds, rsqlTargetAddress);
|
verifyResultsByTargetPropertyFilter(target, ds, rsqlTargetAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyResultsByTargetPropertyFilter(final Target target, final DistributionSet ds,
|
|
||||||
final String rsqlTargetFilter) throws Exception {
|
|
||||||
// pending status one result
|
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlTargetFilter)
|
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
|
||||||
.andExpect(jsonPath("size", equalTo(1)))
|
|
||||||
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target.getName()))).andExpect(jsonPath(
|
|
||||||
"content.[0]._links.distributionset.name", equalTo(ds.getName() + ":" + ds.getVersion())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that all available actions are returned if the complete collection is requested.")
|
@Description("Verifies that all available actions are returned if the complete collection is requested.")
|
||||||
void getActions() throws Exception {
|
void getActions() throws Exception {
|
||||||
@@ -316,55 +315,6 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
getActions(true);
|
getActions(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getActions(final boolean withExternalRef ) throws Exception {
|
|
||||||
final String knownTargetId = "targetId";
|
|
||||||
final List<Action> actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId);
|
|
||||||
|
|
||||||
final Action action0 = actions.get(0);
|
|
||||||
final Action action1 = actions.get(1);
|
|
||||||
|
|
||||||
final List<String> externalRefs = new ArrayList<>(2);
|
|
||||||
if (withExternalRef) {
|
|
||||||
externalRefs.add("extRef#123_0");
|
|
||||||
externalRefs.add("extRef#123_1");
|
|
||||||
controllerManagement.updateActionExternalRef(action0.getId(), externalRefs.get(0));
|
|
||||||
controllerManagement.updateActionExternalRef(action1.getId(), externalRefs.get(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
final ResultActions resultActions =
|
|
||||||
mvc.perform(
|
|
||||||
get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING,"ID:ASC"))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
// verify action 1
|
|
||||||
.andExpect(jsonPath("content.[1].id", equalTo(action1.getId().intValue())))
|
|
||||||
.andExpect(jsonPath("content.[1].type", equalTo("update")))
|
|
||||||
.andExpect(jsonPath("content.[1].status", equalTo("pending")))
|
|
||||||
.andExpect(jsonPath("content.[1].detailStatus", equalTo("running")))
|
|
||||||
.andExpect(jsonPath("content.[1]._links.self.href",
|
|
||||||
equalTo(generateActionLink(knownTargetId, action1.getId()))))
|
|
||||||
|
|
||||||
// verify action 0
|
|
||||||
.andExpect(jsonPath("content.[0].id", equalTo(action0.getId().intValue())))
|
|
||||||
.andExpect(jsonPath("content.[0].type", equalTo("cancel")))
|
|
||||||
.andExpect(jsonPath("content.[0].status", equalTo("pending")))
|
|
||||||
.andExpect(jsonPath("content.[1].detailStatus", equalTo("running")))
|
|
||||||
.andExpect(jsonPath("content.[0]._links.self.href",
|
|
||||||
equalTo(generateActionLink(knownTargetId, action0.getId()))))
|
|
||||||
|
|
||||||
// verify collection properties
|
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(2)))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(2)))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(2)));
|
|
||||||
|
|
||||||
if (withExternalRef) {
|
|
||||||
resultActions
|
|
||||||
.andExpect(jsonPath("content.[1].externalRef", equalTo(externalRefs.get(1))))
|
|
||||||
.andExpect(jsonPath("content.[0].externalRef", equalTo(externalRefs.get(0))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that a full representation of all actions is returned if the collection is requested for representation mode 'full'.")
|
@Description("Verifies that a full representation of all actions is returned if the collection is requested for representation mode 'full'.")
|
||||||
void getActionsFullRepresentation() throws Exception {
|
void getActionsFullRepresentation() throws Exception {
|
||||||
@@ -374,8 +324,8 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
final Action action0 = actions.get(0);
|
final Action action0 = actions.get(0);
|
||||||
final Action action1 = actions.get(1);
|
final Action action1 = actions.get(1);
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
|
|
||||||
// verify action 1
|
// verify action 1
|
||||||
@@ -414,47 +364,6 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
.andExpect(jsonPath("content", hasSize(0))).andExpect(jsonPath("total", equalTo(0)));
|
.andExpect(jsonPath("content", hasSize(0))).andExpect(jsonPath("total", equalTo(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Handles the GET request of retrieving a specific action.")
|
|
||||||
public void getAction() throws Exception {
|
|
||||||
getAction(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Handles the GET request of retrieving a specific action with external reference.")
|
|
||||||
public void getActionExtRef() throws Exception {
|
|
||||||
getAction(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getAction(final boolean withExternalRef) throws Exception {
|
|
||||||
final String knownTargetId = "targetId";
|
|
||||||
// prepare ds
|
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet();
|
|
||||||
// rollout
|
|
||||||
final Target target = testdataFactory.createTarget(knownTargetId);
|
|
||||||
final Rollout rollout = testdataFactory.createRolloutByVariables("TestRollout", "TestDesc", 1,
|
|
||||||
"name==" + target.getName(), ds, "50", "5");
|
|
||||||
rolloutManagement.start(rollout.getId());
|
|
||||||
rolloutHandler.handleAll();
|
|
||||||
|
|
||||||
final List<Action> actions = deploymentManagement.findActionsByTarget(target.getControllerId(), PAGE)
|
|
||||||
.getContent();
|
|
||||||
assertThat(actions).hasSize(1);
|
|
||||||
final String externalRef = "externalRef#123";
|
|
||||||
if (withExternalRef) {
|
|
||||||
controllerManagement.updateActionExternalRef(actions.get(0).getId(), externalRef);
|
|
||||||
}
|
|
||||||
|
|
||||||
final ResultActions resultActions =
|
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "/{actionId}", actions.get(0).getId()))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk());
|
|
||||||
|
|
||||||
if (withExternalRef) {
|
|
||||||
resultActions.andExpect(jsonPath("externalRef", equalTo(externalRef)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies paging is respected as expected.")
|
@Description("Verifies paging is respected as expected.")
|
||||||
void getMultipleActionsWithPagingLimitRequestParameter() throws Exception {
|
void getMultipleActionsWithPagingLimitRequestParameter() throws Exception {
|
||||||
@@ -464,8 +373,8 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
// page 1: one entry
|
// page 1: one entry
|
||||||
final Action action0 = actions.get(0);
|
final Action action0 = actions.get(0);
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
|
|
||||||
// verify action 0
|
// verify action 0
|
||||||
@@ -484,10 +393,10 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
// page 2: one entry
|
// page 2: one entry
|
||||||
final Action action1 = actions.get(1);
|
final Action action1 = actions.get(1);
|
||||||
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(1))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(1))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
|
|
||||||
// verify action 1
|
// verify action 1
|
||||||
@@ -541,6 +450,110 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
.andExpect(status().isNotFound());
|
.andExpect(status().isNotFound());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String generateActionLink(final String targetId, final Long actionId) {
|
||||||
|
return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetId + "/"
|
||||||
|
+ MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String generateTargetLink(final String targetId) {
|
||||||
|
return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String generateDistributionSetLink(final Action action) {
|
||||||
|
return "http://localhost" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/"
|
||||||
|
+ action.getDistributionSet().getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyResultsByTargetPropertyFilter(final Target target, final DistributionSet ds,
|
||||||
|
final String rsqlTargetFilter) throws Exception {
|
||||||
|
// pending status one result
|
||||||
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "?q=" + rsqlTargetFilter)
|
||||||
|
.param(MgmtRestConstants.REQUEST_PARAMETER_REPRESENTATION_MODE, MgmtRepresentationMode.FULL.toString()))
|
||||||
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
||||||
|
.andExpect(jsonPath("size", equalTo(1)))
|
||||||
|
.andExpect(jsonPath("content.[0]._links.target.name", equalTo(target.getName()))).andExpect(jsonPath(
|
||||||
|
"content.[0]._links.distributionset.name", equalTo(ds.getName() + ":" + ds.getVersion())));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getActions(final boolean withExternalRef) throws Exception {
|
||||||
|
final String knownTargetId = "targetId";
|
||||||
|
final List<Action> actions = generateTargetWithTwoUpdatesWithOneOverride(knownTargetId);
|
||||||
|
|
||||||
|
final Action action0 = actions.get(0);
|
||||||
|
final Action action1 = actions.get(1);
|
||||||
|
|
||||||
|
final List<String> externalRefs = new ArrayList<>(2);
|
||||||
|
if (withExternalRef) {
|
||||||
|
externalRefs.add("extRef#123_0");
|
||||||
|
externalRefs.add("extRef#123_1");
|
||||||
|
controllerManagement.updateActionExternalRef(action0.getId(), externalRefs.get(0));
|
||||||
|
controllerManagement.updateActionExternalRef(action1.getId(), externalRefs.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
final ResultActions resultActions =
|
||||||
|
mvc.perform(
|
||||||
|
get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING)
|
||||||
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "ID:ASC"))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
// verify action 1
|
||||||
|
.andExpect(jsonPath("content.[1].id", equalTo(action1.getId().intValue())))
|
||||||
|
.andExpect(jsonPath("content.[1].type", equalTo("update")))
|
||||||
|
.andExpect(jsonPath("content.[1].status", equalTo("pending")))
|
||||||
|
.andExpect(jsonPath("content.[1].detailStatus", equalTo("running")))
|
||||||
|
.andExpect(jsonPath("content.[1]._links.self.href",
|
||||||
|
equalTo(generateActionLink(knownTargetId, action1.getId()))))
|
||||||
|
|
||||||
|
// verify action 0
|
||||||
|
.andExpect(jsonPath("content.[0].id", equalTo(action0.getId().intValue())))
|
||||||
|
.andExpect(jsonPath("content.[0].type", equalTo("cancel")))
|
||||||
|
.andExpect(jsonPath("content.[0].status", equalTo("pending")))
|
||||||
|
.andExpect(jsonPath("content.[1].detailStatus", equalTo("running")))
|
||||||
|
.andExpect(jsonPath("content.[0]._links.self.href",
|
||||||
|
equalTo(generateActionLink(knownTargetId, action0.getId()))))
|
||||||
|
|
||||||
|
// verify collection properties
|
||||||
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(2)))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(2)))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_CONTENT, hasSize(2)));
|
||||||
|
|
||||||
|
if (withExternalRef) {
|
||||||
|
resultActions
|
||||||
|
.andExpect(jsonPath("content.[1].externalRef", equalTo(externalRefs.get(1))))
|
||||||
|
.andExpect(jsonPath("content.[0].externalRef", equalTo(externalRefs.get(0))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getAction(final boolean withExternalRef) throws Exception {
|
||||||
|
final String knownTargetId = "targetId";
|
||||||
|
// prepare ds
|
||||||
|
final DistributionSet ds = testdataFactory.createDistributionSet();
|
||||||
|
// rollout
|
||||||
|
final Target target = testdataFactory.createTarget(knownTargetId);
|
||||||
|
final Rollout rollout = testdataFactory.createRolloutByVariables("TestRollout", "TestDesc", 1,
|
||||||
|
"name==" + target.getName(), ds, "50", "5");
|
||||||
|
rolloutManagement.start(rollout.getId());
|
||||||
|
rolloutHandler.handleAll();
|
||||||
|
|
||||||
|
final List<Action> actions = deploymentManagement.findActionsByTarget(target.getControllerId(), PAGE)
|
||||||
|
.getContent();
|
||||||
|
assertThat(actions).hasSize(1);
|
||||||
|
final String externalRef = "externalRef#123";
|
||||||
|
if (withExternalRef) {
|
||||||
|
controllerManagement.updateActionExternalRef(actions.get(0).getId(), externalRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
final ResultActions resultActions =
|
||||||
|
mvc.perform(get(MgmtRestConstants.ACTION_V1_REQUEST_MAPPING + "/{actionId}", actions.get(0).getId()))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
|
if (withExternalRef) {
|
||||||
|
resultActions.andExpect(jsonPath("externalRef", equalTo(externalRef)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private List<Action> generateTargetWithTwoUpdatesWithOneOverride(final String knownTargetId) {
|
private List<Action> generateTargetWithTwoUpdatesWithOneOverride(final String knownTargetId) {
|
||||||
return generateTargetWithTwoUpdatesWithOneOverrideWithMaintenanceWindow(knownTargetId, null, null, null);
|
return generateTargetWithTwoUpdatesWithOneOverrideWithMaintenanceWindow(knownTargetId, null, null, null);
|
||||||
}
|
}
|
||||||
@@ -566,7 +579,7 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
} else {
|
} else {
|
||||||
final List<Target> updatedTargets = assignDistributionSetWithMaintenanceWindow(one.getId(),
|
final List<Target> updatedTargets = assignDistributionSetWithMaintenanceWindow(one.getId(),
|
||||||
target.getControllerId(), schedule, duration, timezone).getAssignedEntity().stream()
|
target.getControllerId(), schedule, duration, timezone).getAssignedEntity().stream()
|
||||||
.map(Action::getTarget).collect(Collectors.toList());
|
.map(Action::getTarget).collect(Collectors.toList());
|
||||||
// 2nd update
|
// 2nd update
|
||||||
// sleep 10ms to ensure that we can sort by reportedAt
|
// sleep 10ms to ensure that we can sort by reportedAt
|
||||||
Awaitility.await().atMost(Duration.ofMillis(100)).atLeast(5, TimeUnit.MILLISECONDS)
|
Awaitility.await().atMost(Duration.ofMillis(100)).atLeast(5, TimeUnit.MILLISECONDS)
|
||||||
@@ -583,18 +596,4 @@ class MgmtActionResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
assertThat(actions).hasSize(2);
|
assertThat(actions).hasSize(2);
|
||||||
return actions;
|
return actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String generateActionLink(final String targetId, final Long actionId) {
|
|
||||||
return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetId + "/"
|
|
||||||
+ MgmtRestConstants.TARGET_V1_ACTIONS + "/" + actionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String generateTargetLink(final String targetId) {
|
|
||||||
return "http://localhost" + MgmtRestConstants.TARGET_V1_REQUEST_MAPPING + "/" + targetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String generateDistributionSetLink(final Action action) {
|
|
||||||
return "http://localhost" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/"
|
|
||||||
+ action.getDistributionSet().getId();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.mgmt.rest.resource;
|
package org.eclipse.hawkbit.mgmt.rest.resource;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
import io.qameta.allure.Description;
|
||||||
import io.qameta.allure.Feature;
|
import io.qameta.allure.Feature;
|
||||||
import io.qameta.allure.Story;
|
import io.qameta.allure.Story;
|
||||||
@@ -43,12 +49,6 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
|||||||
import org.springframework.util.Base64Utils;
|
import org.springframework.util.Base64Utils;
|
||||||
import org.springframework.web.context.WebApplicationContext;
|
import org.springframework.web.context.WebApplicationContext;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.equalTo;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for {@link MgmtBasicAuthResource}.
|
* Test for {@link MgmtBasicAuthResource}.
|
||||||
*/
|
*/
|
||||||
@@ -75,14 +75,12 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
@Story("Basic auth Userinfo Resource")
|
@Story("Basic auth Userinfo Resource")
|
||||||
public class MgmtBasicAuthResourceTest {
|
public class MgmtBasicAuthResourceTest {
|
||||||
|
|
||||||
private static final String TEST_USER = "testUser";
|
|
||||||
private static final String DEFAULT = "default";
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
MockMvc defaultMock;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
protected WebApplicationContext webApplicationContext;
|
protected WebApplicationContext webApplicationContext;
|
||||||
|
@Autowired
|
||||||
|
MockMvc defaultMock;
|
||||||
|
private static final String TEST_USER = "testUser";
|
||||||
|
private static final String DEFAULT = "default";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Test of userinfo api with basic auth validation")
|
@Description("Test of userinfo api with basic auth validation")
|
||||||
@@ -100,7 +98,7 @@ public class MgmtBasicAuthResourceTest {
|
|||||||
@Description("Test of userinfo api with invalid basic auth fails")
|
@Description("Test of userinfo api with invalid basic auth fails")
|
||||||
public void validateBasicAuthFailsWithInvalidCredentials() throws Exception {
|
public void validateBasicAuthFailsWithInvalidCredentials() throws Exception {
|
||||||
defaultMock.perform(get(MgmtRestConstants.AUTH_V1_REQUEST_MAPPING)
|
defaultMock.perform(get(MgmtRestConstants.AUTH_V1_REQUEST_MAPPING)
|
||||||
.header(HttpHeaders.AUTHORIZATION, getBasicAuth("wrongUser", "wrongSecret")))
|
.header(HttpHeaders.AUTHORIZATION, getBasicAuth("wrongUser", "wrongSecret")))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnauthorized());
|
.andExpect(status().isUnauthorized());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.mgmt.rest.resource;
|
package org.eclipse.hawkbit.mgmt.rest.resource;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
import io.qameta.allure.Description;
|
||||||
import io.qameta.allure.Feature;
|
import io.qameta.allure.Feature;
|
||||||
import io.qameta.allure.Story;
|
import io.qameta.allure.Story;
|
||||||
@@ -26,15 +35,6 @@ import org.springframework.hateoas.MediaTypes;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.equalTo;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* With Spring Boot 2.2.x the default charset encoding became deprecated. In
|
* With Spring Boot 2.2.x the default charset encoding became deprecated. In
|
||||||
* hawkBit we want to keep the old behavior for now and still return the charset
|
* hawkBit we want to keep the old behavior for now and still return the charset
|
||||||
@@ -47,8 +47,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
@Story("Response Content-Type")
|
@Story("Response Content-Type")
|
||||||
public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
||||||
|
|
||||||
private DistributionSet ds;
|
|
||||||
private final String dsName = "DS-ö";
|
private final String dsName = "DS-ö";
|
||||||
|
private DistributionSet ds;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setupBeforeTest() {
|
public void setupBeforeTest() {
|
||||||
@@ -58,8 +58,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJsonUtf8_woAccept() throws Exception {
|
public void postDistributionSet_ContentTypeJsonUtf8_woAccept() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON_UTF8)).andDo(MockMvcResultPrinter.print())
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON_UTF8)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated()).andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(status().isCreated()).andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
assertEquals(MediaTypes.HAL_JSON_VALUE + ";charset=UTF-8", getResponseHeaderContentType(result));
|
assertEquals(MediaTypes.HAL_JSON_VALUE + ";charset=UTF-8", getResponseHeaderContentType(result));
|
||||||
@@ -68,8 +69,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptJson() throws Exception {
|
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptJson() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON))
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -79,8 +81,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptJsonUtf8() throws Exception {
|
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptJsonUtf8() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8))
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -90,8 +93,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptHalJson() throws Exception {
|
public void postDistributionSet_ContentTypeJsonUtf8_wAcceptHalJson() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaTypes.HAL_JSON))
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaTypes.HAL_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -101,8 +105,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJson_woAccept() throws Exception {
|
public void postDistributionSet_ContentTypeJson_woAccept() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated())
|
.andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -112,8 +117,9 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJson_wAcceptJson() throws Exception {
|
public void postDistributionSet_ContentTypeJson_wAcceptJson() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
final MvcResult result = mvc.perform(
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING).content(JsonBuilder.distributionSets(Arrays.asList(ds)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -124,8 +130,8 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJson_wAcceptJsonUtf8() throws Exception {
|
public void postDistributionSet_ContentTypeJson_wAcceptJsonUtf8() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
||||||
.content(JsonBuilder.distributionSets(Arrays.asList(ds))).contentType(MediaType.APPLICATION_JSON)
|
.content(JsonBuilder.distributionSets(Arrays.asList(ds))).contentType(MediaType.APPLICATION_JSON)
|
||||||
.accept(MediaType.APPLICATION_JSON_UTF8)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaType.APPLICATION_JSON_UTF8)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated())
|
.andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
@@ -136,8 +142,8 @@ public class MgmtContentTypeTest extends AbstractManagementApiIntegrationTest {
|
|||||||
@Description("The response of a POST request shall contain charset=utf-8")
|
@Description("The response of a POST request shall contain charset=utf-8")
|
||||||
public void postDistributionSet_ContentTypeJson_wAcceptHalJson() throws Exception {
|
public void postDistributionSet_ContentTypeJson_wAcceptHalJson() throws Exception {
|
||||||
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
final MvcResult result = mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
||||||
.content(JsonBuilder.distributionSets(Arrays.asList(ds))).contentType(MediaType.APPLICATION_JSON)
|
.content(JsonBuilder.distributionSets(Arrays.asList(ds))).contentType(MediaType.APPLICATION_JSON)
|
||||||
.accept(MediaTypes.HAL_JSON)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaTypes.HAL_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated())
|
.andExpect(status().isCreated())
|
||||||
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
.andExpect(jsonPath("[0]name", equalTo(dsName))).andReturn();
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,11 @@ import java.util.stream.Collectors;
|
|||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Step;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.eclipse.hawkbit.exception.SpServerError;
|
import org.eclipse.hawkbit.exception.SpServerError;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType;
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType;
|
||||||
@@ -73,20 +78,15 @@ import org.springframework.data.domain.PageRequest;
|
|||||||
import org.springframework.hateoas.MediaTypes;
|
import org.springframework.hateoas.MediaTypes;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Step;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Distribution Set Resource")
|
@Story("Distribution Set Resource")
|
||||||
public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegrationTest {
|
public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegrationTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ActionRepository actionRepository;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("This test verifies the call of all Software Modules that are assigned to a Distribution Set through the RESTful API.")
|
@Description("This test verifies the call of all Software Modules that are assigned to a Distribution Set through the RESTful API.")
|
||||||
public void getSoftwareModules() throws Exception {
|
public void getSoftwareModules() throws Exception {
|
||||||
@@ -124,7 +124,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
// post assignment
|
// post assignment
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
// create targets and assign DisSet to target
|
// create targets and assign DisSet to target
|
||||||
@@ -136,8 +136,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
assignDistributionSet(disSet.getId(), knownTargetIds[0]);
|
assignDistributionSet(disSet.getId(), knownTargetIds[0]);
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets")
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
||||||
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
@@ -146,7 +146,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
// try to delete the Software Module from DistSet that has been assigned
|
// try to delete the Software Module from DistSet that has been assigned
|
||||||
// to the target.
|
// to the target.
|
||||||
mvc.perform(delete(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM/"
|
mvc.perform(delete(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM/"
|
||||||
+ smIDs.get(0)).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
+ smIDs.get(0)).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entityreadonly")));
|
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entityreadonly")));
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
// post assignment
|
// post assignment
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON).content(smList.toString())).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
// create Targets
|
// create Targets
|
||||||
@@ -175,8 +175,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
// assign DisSet to target and test assignment
|
// assign DisSet to target and test assignment
|
||||||
assignDistributionSet(disSet.getId(), knownTargetIds[0]);
|
assignDistributionSet(disSet.getId(), knownTargetIds[0]);
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets")
|
post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
||||||
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
@@ -188,7 +188,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
smList2.put(new JSONObject().put("id", sm2.getId()));
|
smList2.put(new JSONObject().put("id", sm2.getId()));
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(smList2.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(smList2.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entityreadonly")));
|
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.entityreadonly")));
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
|
|
||||||
// post assignment
|
// post assignment
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(JsonBuilder.ids(smIDs)))
|
.contentType(MediaType.APPLICATION_JSON).content(JsonBuilder.ids(smIDs)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
// Test if size is 3
|
// Test if size is 3
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM"))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM"))
|
||||||
@@ -226,17 +226,17 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
// post assignment
|
// post assignment
|
||||||
final String jsonIDs = JsonBuilder.ids(moduleIDs.subList(0, maxSoftwareModules - smIDs.size()));
|
final String jsonIDs = JsonBuilder.ids(moduleIDs.subList(0, maxSoftwareModules - smIDs.size()));
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(jsonIDs)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON).content(jsonIDs)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
// test if size corresponds with quota
|
// test if size corresponds with quota
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId()
|
||||||
+ "/assignedSM?limit={limit}", maxSoftwareModules * 2)).andDo(MockMvcResultPrinter.print())
|
+ "/assignedSM?limit={limit}", maxSoftwareModules * 2)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(maxSoftwareModules)));
|
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(maxSoftwareModules)));
|
||||||
|
|
||||||
// post one more to cause the quota to be exceeded
|
// post one more to cause the quota to be exceeded
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON)
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
.content(JsonBuilder.ids(Collections.singletonList(moduleIDs.get(moduleIDs.size() - 1)))))
|
.content(JsonBuilder.ids(Collections.singletonList(moduleIDs.get(moduleIDs.size() - 1)))))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -244,7 +244,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
// verify quota is also enforced for bulk uploads
|
// verify quota is also enforced for bulk uploads
|
||||||
final DistributionSet disSet2 = testdataFactory.createDistributionSetWithNoSoftwareModules("Saturn", "4.0");
|
final DistributionSet disSet2 = testdataFactory.createDistributionSetWithNoSoftwareModules("Saturn", "4.0");
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet2.getId() + "/assignedSM")
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + disSet2.getId() + "/assignedSM")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(JsonBuilder.ids(moduleIDs)))
|
.contentType(MediaType.APPLICATION_JSON).content(JsonBuilder.ids(moduleIDs)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -267,10 +267,10 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.size", equalTo(amountOfSM)));
|
.andExpect(jsonPath("$.size", equalTo(amountOfSM)));
|
||||||
// test the removal of all software modules one by one
|
// test the removal of all software modules one by one
|
||||||
for (final Iterator<SoftwareModule> iter = set.getModules().iterator(); iter.hasNext();) {
|
for (final Iterator<SoftwareModule> iter = set.getModules().iterator(); iter.hasNext(); ) {
|
||||||
final Long smId = iter.next().getId();
|
final Long smId = iter.next().getId();
|
||||||
mvc.perform(delete(
|
mvc.perform(delete(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM/" + smId))
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM/" + smId))
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM"))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedSM"))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
@@ -290,7 +290,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
||||||
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
@@ -317,7 +317,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
// we just need to make sure that no error 500 is returned
|
// we just need to make sure that no error 500 is returned
|
||||||
@@ -328,9 +328,10 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
public void createDsFromAlreadyMarkedAsDeletedType() throws Exception {
|
public void createDsFromAlreadyMarkedAsDeletedType() throws Exception {
|
||||||
final SoftwareModule softwareModule = testdataFactory.createSoftwareModule("exampleKey");
|
final SoftwareModule softwareModule = testdataFactory.createSoftwareModule("exampleKey");
|
||||||
final DistributionSetType type = testdataFactory.findOrCreateDistributionSetType(
|
final DistributionSetType type = testdataFactory.findOrCreateDistributionSetType(
|
||||||
"testKey", "testType", Collections.singletonList(softwareModule.getType()),
|
"testKey", "testType", Collections.singletonList(softwareModule.getType()),
|
||||||
Collections.singletonList(softwareModule.getType()));
|
Collections.singletonList(softwareModule.getType()));
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("dsName", "dsVersion", type, Collections.singletonList(softwareModule));
|
final DistributionSet ds = testdataFactory.createDistributionSet("dsName", "dsVersion", type,
|
||||||
|
Collections.singletonList(softwareModule));
|
||||||
final Target target = testdataFactory.createTarget("exampleControllerId");
|
final Target target = testdataFactory.createTarget("exampleControllerId");
|
||||||
|
|
||||||
assignDistributionSet(ds, target);
|
assignDistributionSet(ds, target);
|
||||||
@@ -348,12 +349,12 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
|
|
||||||
//request for ds creation of type which is already marked as deleted - should return bad request
|
//request for ds creation of type which is already marked as deleted - should return bad request
|
||||||
final DistributionSet generated = testdataFactory.generateDistributionSet(
|
final DistributionSet generated = testdataFactory.generateDistributionSet(
|
||||||
"stanTest", "2", reloaded, Collections.singletonList(softwareModule));
|
"stanTest", "2", reloaded, Collections.singletonList(softwareModule));
|
||||||
final MvcResult mvcResult = mvc
|
final MvcResult mvcResult = mvc
|
||||||
.perform(post("/rest/v1/distributionsets")
|
.perform(post("/rest/v1/distributionsets")
|
||||||
.content(JsonBuilder.distributionSets(Arrays.asList(generated)))
|
.content(JsonBuilder.distributionSets(Arrays.asList(generated)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andExpect(status().isBadRequest()).andReturn();
|
.andExpect(status().isBadRequest()).andReturn();
|
||||||
|
|
||||||
final ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString());
|
final ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString());
|
||||||
@@ -426,7 +427,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), targets.get(0).getControllerId());
|
assignDistributionSet(createdDs.getId(), targets.get(0).getControllerId());
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(post(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/assignedTargets?offline=true").contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
+ "/assignedTargets?offline=true").contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(targets.size() - 1)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.assigned", equalTo(targets.size() - 1)))
|
||||||
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.total", equalTo(targets.size())));
|
.andExpect(jsonPath("$.total", equalTo(targets.size())));
|
||||||
@@ -449,7 +450,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
@@ -466,7 +467,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
@@ -484,7 +485,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
@@ -502,7 +503,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
@@ -529,7 +530,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0]);
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString()))
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
@@ -546,45 +547,12 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignTargetJson.put(new JSONObject().put("id", "notexistingtarget").put("type", "forced"));
|
assignTargetJson.put(new JSONObject().put("id", "notexistingtarget").put("type", "forced"));
|
||||||
|
|
||||||
mvc.perform(post(
|
mvc.perform(post(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets")
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(assignTargetJson.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(assignTargetJson.toString()))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.assigned", equalTo(2))).andExpect(jsonPath("$.total", equalTo(3)));
|
.andExpect(jsonPath("$.assigned", equalTo(2))).andExpect(jsonPath("$.total", equalTo(3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private JSONArray createTargetAndJsonArray(final String schedule, final String duration, final String timezone,
|
|
||||||
final String type, final Boolean confirmationRequired, final String... targetIds) throws Exception {
|
|
||||||
final JSONArray result = new JSONArray();
|
|
||||||
for (final String targetId : targetIds) {
|
|
||||||
testdataFactory.createTarget(targetId);
|
|
||||||
|
|
||||||
final JSONObject targetJsonObject = new JSONObject();
|
|
||||||
result.put(targetJsonObject);
|
|
||||||
targetJsonObject.put("id", Long.valueOf(targetId));
|
|
||||||
if (type != null) {
|
|
||||||
targetJsonObject.put("type", type);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (schedule != null || duration != null || timezone != null) {
|
|
||||||
final JSONObject maintenanceJsonObject = new JSONObject();
|
|
||||||
if (schedule != null) {
|
|
||||||
maintenanceJsonObject.put("schedule", schedule);
|
|
||||||
}
|
|
||||||
if (duration != null) {
|
|
||||||
maintenanceJsonObject.put("duration", duration);
|
|
||||||
}
|
|
||||||
if (timezone != null) {
|
|
||||||
maintenanceJsonObject.put("timezone", timezone);
|
|
||||||
}
|
|
||||||
targetJsonObject.put("maintenanceWindow", maintenanceJsonObject);
|
|
||||||
}
|
|
||||||
if (confirmationRequired != null) {
|
|
||||||
targetJsonObject.put("confirmationRequired", confirmationRequired);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Ensures that assigned targets of DS are returned as reflected by the repository.")
|
@Description("Ensures that assigned targets of DS are returned as reflected by the repository.")
|
||||||
public void getAssignedTargetsOfDistributionSet() throws Exception {
|
public void getAssignedTargetsOfDistributionSet() throws Exception {
|
||||||
@@ -608,8 +576,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.getAssignedEntity();
|
.getAssignedEntity();
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedTargets")
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + set.getId() + "/assignedTargets")
|
||||||
.param("offset", "1").param("limit", "2").param("sort", "name:DESC")
|
.param("offset", "1").param("limit", "2").param("sort", "name:DESC")
|
||||||
.param("q", "controllerId==target*").accept(MediaType.APPLICATION_JSON))
|
.param("q", "controllerId==target*").accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
|
||||||
@@ -621,7 +589,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
public void getAssignedTargetsOfDistributionSetIsEmpty() throws Exception {
|
public void getAssignedTargetsOfDistributionSetIsEmpty() throws Exception {
|
||||||
final DistributionSet createdDs = testdataFactory.createDistributionSet();
|
final DistributionSet createdDs = testdataFactory.createDistributionSet();
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets"))
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/assignedTargets"))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(0)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(0)))
|
||||||
.andExpect(jsonPath("$.total", equalTo(0)));
|
.andExpect(jsonPath("$.total", equalTo(0)));
|
||||||
}
|
}
|
||||||
@@ -643,7 +611,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
Collections.singletonList("some message"));
|
Collections.singletonList("some message"));
|
||||||
|
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets"))
|
MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId() + "/installedTargets"))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.content[0].controllerId", equalTo(knownTargetId)));
|
.andExpect(jsonPath("$.content[0].controllerId", equalTo(knownTargetId)));
|
||||||
}
|
}
|
||||||
@@ -681,7 +649,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name("c").query("name==y"));
|
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name("c").query("name==y"));
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/autoAssignTargetFilters")).andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1)))
|
+ "/autoAssignTargetFilters")).andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.content[0].name", equalTo(knownFilterName)));
|
.andExpect(jsonPath("$.content[0].name", equalTo(knownFilterName)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -709,7 +677,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final String invalidQuery = "unknownField=le=42";
|
final String invalidQuery = "unknownField=le=42";
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, invalidQuery))
|
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, invalidQuery))
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -723,7 +691,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
prepareTestFilters(filterNamePrefix, createdDs);
|
prepareTestFilters(filterNamePrefix, createdDs);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, query))
|
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, query))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(2)))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(2)))
|
||||||
.andExpect(jsonPath("$.content[0].name", equalTo(filterNamePrefix + "1")))
|
.andExpect(jsonPath("$.content[0].name", equalTo(filterNamePrefix + "1")))
|
||||||
.andExpect(jsonPath("$.content[1].name", equalTo(filterNamePrefix + "2")));
|
.andExpect(jsonPath("$.content[1].name", equalTo(filterNamePrefix + "2")));
|
||||||
@@ -739,23 +707,10 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
prepareTestFilters(filterNamePrefix, createdDs);
|
prepareTestFilters(filterNamePrefix, createdDs);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, query))
|
+ "/autoAssignTargetFilters").param(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, query))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(0)));
|
.andExpect(status().isOk()).andExpect(jsonPath("$.size", equalTo(0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareTestFilters(final String filterNamePrefix, final DistributionSet createdDs) {
|
|
||||||
// create target filter queries that should be found
|
|
||||||
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "1")
|
|
||||||
.query("name==y").autoAssignDistributionSet(createdDs.getId()));
|
|
||||||
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "2")
|
|
||||||
.query("name==y").autoAssignDistributionSet(createdDs.getId()));
|
|
||||||
// create some dummy target filter queries
|
|
||||||
targetFilterQueryManagement
|
|
||||||
.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "b").query("name==y"));
|
|
||||||
targetFilterQueryManagement
|
|
||||||
.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "c").query("name==y"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Ensures that DS in repository are listed with proper paging properties.")
|
@Description("Ensures that DS in repository are listed with proper paging properties.")
|
||||||
public void getDistributionSetsWithoutAdditionalRequestParameters() throws Exception {
|
public void getDistributionSetsWithoutAdditionalRequestParameters() throws Exception {
|
||||||
@@ -775,7 +730,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final int limitSize = 1;
|
final int limitSize = 1;
|
||||||
createDistributionSetsAlphabetical(sets);
|
createDistributionSetsAlphabetical(sets);
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -790,8 +745,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final int expectedSize = sets - offsetParam;
|
final int expectedSize = sets - offsetParam;
|
||||||
createDistributionSetsAlphabetical(sets);
|
createDistributionSetsAlphabetical(sets);
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(sets)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(sets)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(sets)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -904,19 +859,19 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
|
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsets/" + one.getId());
|
.isEqualTo("http://localhost/rest/v1/distributionsets/" + one.getId());
|
||||||
|
|
||||||
assertThat(JsonPath.compile("[0]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
assertThat(JsonPath.compile("[0]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo(String.valueOf(one.getId()));
|
.isEqualTo(String.valueOf(one.getId()));
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsets/" + two.getId());
|
.isEqualTo("http://localhost/rest/v1/distributionsets/" + two.getId());
|
||||||
|
|
||||||
assertThat(JsonPath.compile("[1]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
assertThat(JsonPath.compile("[1]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo(String.valueOf(two.getId()));
|
.isEqualTo(String.valueOf(two.getId()));
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsets/" + three.getId());
|
.isEqualTo("http://localhost/rest/v1/distributionsets/" + three.getId());
|
||||||
|
|
||||||
assertThat(JsonPath.compile("[2]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
assertThat(JsonPath.compile("[2]id").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo(String.valueOf(three.getId()));
|
.isEqualTo(String.valueOf(three.getId()));
|
||||||
@@ -932,56 +887,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assertThat(three.getCreatedAt()).isGreaterThanOrEqualTo(current);
|
assertThat(three.getCreatedAt()).isGreaterThanOrEqualTo(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Step
|
|
||||||
private MvcResult executeMgmtTargetPost(final DistributionSet one, final DistributionSet two,
|
|
||||||
final DistributionSet three) throws Exception {
|
|
||||||
return mvc
|
|
||||||
.perform(post("/rest/v1/distributionsets")
|
|
||||||
.content(JsonBuilder.distributionSets(Arrays.asList(one, two, three)))
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
|
||||||
.andExpect(jsonPath("[0]name", equalTo(one.getName())))
|
|
||||||
.andExpect(jsonPath("[0]description", equalTo(one.getDescription())))
|
|
||||||
.andExpect(jsonPath("[0]type", equalTo(standardDsType.getKey())))
|
|
||||||
.andExpect(jsonPath("[0]createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[0]version", equalTo(one.getVersion())))
|
|
||||||
.andExpect(jsonPath("[0]complete", equalTo(Boolean.TRUE)))
|
|
||||||
.andExpect(jsonPath("[0]requiredMigrationStep", equalTo(one.isRequiredMigrationStep())))
|
|
||||||
.andExpect(jsonPath("[0].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
|
||||||
contains(one.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[0].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
|
||||||
contains(one.findFirstModuleByType(appType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[0].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
|
||||||
contains(one.findFirstModuleByType(osType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[1]name", equalTo(two.getName())))
|
|
||||||
.andExpect(jsonPath("[1]description", equalTo(two.getDescription())))
|
|
||||||
.andExpect(jsonPath("[1]complete", equalTo(Boolean.TRUE)))
|
|
||||||
.andExpect(jsonPath("[1]type", equalTo(standardDsType.getKey())))
|
|
||||||
.andExpect(jsonPath("[1]createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[1]version", equalTo(two.getVersion())))
|
|
||||||
.andExpect(jsonPath("[1].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
|
||||||
contains(two.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[1].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
|
||||||
contains(two.findFirstModuleByType(appType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[1].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
|
||||||
contains(two.findFirstModuleByType(osType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[1]requiredMigrationStep", equalTo(two.isRequiredMigrationStep())))
|
|
||||||
.andExpect(jsonPath("[2]name", equalTo(three.getName())))
|
|
||||||
.andExpect(jsonPath("[2]description", equalTo(three.getDescription())))
|
|
||||||
.andExpect(jsonPath("[2]complete", equalTo(Boolean.TRUE)))
|
|
||||||
.andExpect(jsonPath("[2]type", equalTo(standardDsType.getKey())))
|
|
||||||
.andExpect(jsonPath("[2]createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[2]version", equalTo(three.getVersion())))
|
|
||||||
.andExpect(jsonPath("[2].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
|
||||||
contains(three.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[2].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
|
||||||
contains(three.findFirstModuleByType(appType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[2].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
|
||||||
contains(three.findFirstModuleByType(osType).get().getId().intValue())))
|
|
||||||
.andExpect(jsonPath("[2]requiredMigrationStep", equalTo(three.isRequiredMigrationStep()))).andReturn();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Ensures that DS deletion request to API is reflected by the repository.")
|
@Description("Ensures that DS deletion request to API is reflected by the repository.")
|
||||||
public void deleteUnassignedistributionSet() throws Exception {
|
public void deleteUnassignedistributionSet() throws Exception {
|
||||||
@@ -1046,7 +951,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.put("deleted", true).toString();
|
.put("deleted", true).toString();
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.version", equalTo("anotherVersion")))
|
.andExpect(jsonPath("$.version", equalTo("anotherVersion")))
|
||||||
.andExpect(jsonPath("$.requiredMigrationStep", equalTo(true)))
|
.andExpect(jsonPath("$.requiredMigrationStep", equalTo(true)))
|
||||||
@@ -1061,54 +966,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assertThat(setupdated.isDeleted()).isEqualTo(false);
|
assertThat(setupdated.isDeleted()).isEqualTo(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Tests the lock. It is verified that the distribution set can be marked as locked through update operation.")
|
|
||||||
void lockDistributionSet() throws Exception {
|
|
||||||
// prepare test data
|
|
||||||
assertThat(distributionSetManagement.findByCompleted(PAGE, true)).hasSize(0);
|
|
||||||
|
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
|
||||||
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
|
||||||
assertThat(set.isLocked()).as("Created distribution set should not be locked").isFalse();
|
|
||||||
|
|
||||||
// lock
|
|
||||||
final String body = new JSONObject().put("locked", true).toString();
|
|
||||||
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(jsonPath("$.locked", equalTo(true)));
|
|
||||||
|
|
||||||
final DistributionSet updatedSet = distributionSetManagement.get(set.getId()).get();
|
|
||||||
assertThat(updatedSet.isLocked()).isEqualTo(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Tests the unlock.")
|
|
||||||
void unlockDistributionSet() throws Exception {
|
|
||||||
// prepare test data
|
|
||||||
assertThat(distributionSetManagement.findByCompleted(PAGE, true)).hasSize(0);
|
|
||||||
|
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
|
||||||
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
|
||||||
distributionSetManagement.lock(set.getId());
|
|
||||||
assertThat(distributionSetManagement.get(set.getId())
|
|
||||||
.orElseThrow(() -> new EntityNotFoundException(SoftwareModule.class, set.getId())).isLocked())
|
|
||||||
.as("Distribution set should be locked")
|
|
||||||
.isTrue();
|
|
||||||
|
|
||||||
// unlock
|
|
||||||
final String body = new JSONObject().put("locked", false).toString();
|
|
||||||
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(jsonPath("$.locked", equalTo(false)));
|
|
||||||
|
|
||||||
final DistributionSet updatedSet = distributionSetManagement.get(set.getId()).get();
|
|
||||||
assertThat(updatedSet.isLocked()).isEqualTo(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Ensures that DS property update on requiredMigrationStep fails if DS is assigned to a target.")
|
@Description("Ensures that DS property update on requiredMigrationStep fails if DS is assigned to a target.")
|
||||||
public void updateRequiredMigrationStepFailsIfDistributionSetisInUse() throws Exception {
|
public void updateRequiredMigrationStepFailsIfDistributionSetisInUse() throws Exception {
|
||||||
@@ -1122,8 +979,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId())
|
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId())
|
||||||
.content("{\"version\":\"anotherVersion\",\"requiredMigrationStep\":\"true\"}")
|
.content("{\"version\":\"anotherVersion\",\"requiredMigrationStep\":\"true\"}")
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
||||||
|
|
||||||
final DistributionSet setupdated = distributionSetManagement.get(set.getId()).get();
|
final DistributionSet setupdated = distributionSetManagement.get(set.getId()).get();
|
||||||
@@ -1154,23 +1011,23 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
|
|
||||||
// bad request - bad content
|
// bad request - bad content
|
||||||
mvc.perform(post("/rest/v1/distributionsets").content("sdfjsdlkjfskdjf".getBytes())
|
mvc.perform(post("/rest/v1/distributionsets").content("sdfjsdlkjfskdjf".getBytes())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final DistributionSet missingName = entityFactory.distributionSet().create().build();
|
final DistributionSet missingName = entityFactory.distributionSet().create().build();
|
||||||
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(Arrays.asList(missingName)))
|
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(Arrays.asList(missingName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final DistributionSet toLongName = testdataFactory
|
final DistributionSet toLongName = testdataFactory
|
||||||
.generateDistributionSet(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1));
|
.generateDistributionSet(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1));
|
||||||
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(Arrays.asList(toLongName)))
|
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(Arrays.asList(toLongName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// unsupported media type
|
// unsupported media type
|
||||||
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(sets))
|
mvc.perform(post("/rest/v1/distributionsets").content(JsonBuilder.distributionSets(sets))
|
||||||
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnsupportedMediaType());
|
.andExpect(status().isUnsupportedMediaType());
|
||||||
|
|
||||||
// not allowed methods
|
// not allowed methods
|
||||||
@@ -1201,7 +1058,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
metaData1.put(new JSONObject().put("key", knownKey2).put("value", knownValue2));
|
metaData1.put(new JSONObject().put("key", knownKey2).put("value", knownValue2));
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{dsId}/metadata", testDS.getId()).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(post("/rest/v1/distributionsets/{dsId}/metadata", testDS.getId()).accept(MediaType.APPLICATION_JSON)
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(metaData1.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(metaData1.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("[0]key", equalTo(knownKey1))).andExpect(jsonPath("[0]value", equalTo(knownValue1)))
|
.andExpect(jsonPath("[0]key", equalTo(knownKey1))).andExpect(jsonPath("[0]value", equalTo(knownValue1)))
|
||||||
@@ -1225,7 +1082,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{dsId}/metadata", testDS.getId()).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(post("/rest/v1/distributionsets/{dsId}/metadata", testDS.getId()).accept(MediaType.APPLICATION_JSON)
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(metaData2.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(metaData2.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
||||||
|
|
||||||
// verify that the number of meta data entries has not changed
|
// verify that the number of meta data entries has not changed
|
||||||
@@ -1250,8 +1107,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue);
|
final JSONObject jsonObject = new JSONObject().put("key", knownKey).put("value", updateValue);
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)
|
mvc.perform(put("/rest/v1/distributionsets/{dsId}/metadata/{key}", testDS.getId(), knownKey)
|
||||||
.accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON)
|
.accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON)
|
||||||
.content(jsonObject.toString())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.content(jsonObject.toString())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue)));
|
.andExpect(jsonPath("key", equalTo(knownKey))).andExpect(jsonPath("value", equalTo(updateValue)));
|
||||||
|
|
||||||
@@ -1318,7 +1175,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final String knownValuePrefix = "knownValue";
|
final String knownValuePrefix = "knownValue";
|
||||||
final DistributionSet testDS = testdataFactory.createDistributionSet("one");
|
final DistributionSet testDS = testdataFactory.createDistributionSet("one");
|
||||||
for (int index = 0; index < totalMetadata; index++) {
|
for (int index = 0; index < totalMetadata; index++) {
|
||||||
distributionSetManagement.createMetaData(testDS.getId(), List.of(entityFactory.generateDsMetadata(knownKeyPrefix + index, knownValuePrefix + index)));
|
distributionSetManagement.createMetaData(testDS.getId(),
|
||||||
|
List.of(entityFactory.generateDsMetadata(knownKeyPrefix + index, knownValuePrefix + index)));
|
||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{distributionSetId}/metadata",
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{distributionSetId}/metadata",
|
||||||
@@ -1344,7 +1202,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata?offset=" + offsetParam + "&limit=" + limitParam,
|
mvc.perform(get("/rest/v1/distributionsets/{dsId}/metadata?offset=" + offsetParam + "&limit=" + limitParam,
|
||||||
testDS.getId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
testDS.getId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("size", equalTo(limitParam))).andExpect(jsonPath("total", equalTo(totalMetadata)))
|
.andExpect(jsonPath("size", equalTo(limitParam))).andExpect(jsonPath("total", equalTo(totalMetadata)))
|
||||||
.andExpect(jsonPath("content[0].key", equalTo("knownKey0")))
|
.andExpect(jsonPath("content[0].key", equalTo("knownKey0")))
|
||||||
.andExpect(jsonPath("content[0].value", equalTo("knownValue0")));
|
.andExpect(jsonPath("content[0].value", equalTo("knownValue0")));
|
||||||
@@ -1402,7 +1260,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final String rsqlFindTargetId1 = "controllerId==1";
|
final String rsqlFindTargetId1 = "controllerId==1";
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/" + createdDs.getId()
|
||||||
+ "/assignedTargets?q=" + rsqlFindTargetId1).contentType(MediaType.APPLICATION_JSON))
|
+ "/assignedTargets?q=" + rsqlFindTargetId1).contentType(MediaType.APPLICATION_JSON))
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
.andExpect(status().isOk()).andExpect(jsonPath("total", equalTo(1)))
|
||||||
.andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content[0].controllerId", equalTo("1")));
|
.andExpect(jsonPath("size", equalTo(1))).andExpect(jsonPath("content[0].controllerId", equalTo("1")));
|
||||||
}
|
}
|
||||||
@@ -1427,17 +1285,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andExpect(jsonPath("content[0].value", equalTo("knownValue1")));
|
.andExpect(jsonPath("content[0].value", equalTo("knownValue1")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<DistributionSet> createDistributionSetsAlphabetical(final int amount) {
|
|
||||||
char character = 'a';
|
|
||||||
final Set<DistributionSet> created = new HashSet<>(amount);
|
|
||||||
for (int index = 0; index < amount; index++) {
|
|
||||||
final String str = String.valueOf(character);
|
|
||||||
created.add(testdataFactory.createDistributionSet(str));
|
|
||||||
character++;
|
|
||||||
}
|
|
||||||
return created;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Ensures that multi target assignment through API is reflected by the repository in the case of "
|
@Description("Ensures that multi target assignment through API is reflected by the repository in the case of "
|
||||||
+ "DOWNLOAD_ONLY.")
|
+ "DOWNLOAD_ONLY.")
|
||||||
@@ -1451,7 +1298,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
assignDistributionSet(createdDs.getId(), knownTargetIds[0], Action.ActionType.DOWNLOAD_ONLY);
|
assignDistributionSet(createdDs.getId(), knownTargetIds[0], Action.ActionType.DOWNLOAD_ONLY);
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", createdDs.getId())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", createdDs.getId())
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString())).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString())).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
.andExpect(jsonPath("$.assigned", equalTo(knownTargetIds.length - 1)))
|
||||||
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
.andExpect(jsonPath("$.alreadyAssigned", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.total", equalTo(knownTargetIds.length)));
|
.andExpect(jsonPath("$.total", equalTo(knownTargetIds.length)));
|
||||||
@@ -1460,8 +1307,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.as("Five targets in repository have DS assigned").hasSize(5);
|
.as("Five targets in repository have DS assigned").hasSize(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired
|
|
||||||
ActionRepository actionRepository;
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@MethodSource("confirmationOptions")
|
@MethodSource("confirmationOptions")
|
||||||
@Description("Ensures that confirmation option is considered in assignment request.")
|
@Description("Ensures that confirmation option is considered in assignment request.")
|
||||||
@@ -1478,7 +1323,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
final JSONArray list = createTargetAndJsonArray(null, null, null, null, confirmationRequired, targetId);
|
final JSONArray list = createTargetAndJsonArray(null, null, null, null, confirmationRequired, targetId);
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", createdDs.getId())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", createdDs.getId())
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(list.toString())).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON).content(list.toString())).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.assigned", equalTo(1))).andExpect(jsonPath("$.alreadyAssigned", equalTo(0)))
|
.andExpect(jsonPath("$.assigned", equalTo(1))).andExpect(jsonPath("$.alreadyAssigned", equalTo(0)))
|
||||||
.andExpect(jsonPath("$.total", equalTo(1)));
|
.andExpect(jsonPath("$.total", equalTo(1)));
|
||||||
|
|
||||||
@@ -1495,11 +1340,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Stream<Arguments> confirmationOptions() {
|
|
||||||
return Stream.of(Arguments.of(true, true), Arguments.of(true, false), Arguments.of(false, true),
|
|
||||||
Arguments.of(false, false), Arguments.of(true, null), Arguments.of(false, null));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("A request for assigning a target multiple times results in a Bad Request when multiassignment is disabled.")
|
@Description("A request for assigning a target multiple times results in a Bad Request when multiassignment is disabled.")
|
||||||
public void multiAssignmentRequestNotAllowedIfDisabled() throws Exception {
|
public void multiAssignmentRequestNotAllowedIfDisabled() throws Exception {
|
||||||
@@ -1511,7 +1351,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
body.put(getAssignmentObject(targetId, MgmtActionType.FORCED));
|
body.put(getAssignmentObject(targetId, MgmtActionType.FORCED));
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1526,7 +1366,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
body.put(getAssignmentObject(targetId, MgmtActionType.FORCED));
|
body.put(getAssignmentObject(targetId, MgmtActionType.FORCED));
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("total", equalTo(1)));
|
.andExpect(jsonPath("total", equalTo(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1545,7 +1385,7 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
|
|
||||||
enableMultiAssignments();
|
enableMultiAssignments();
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(body.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("total", equalTo(body.length())));
|
.andExpect(jsonPath("total", equalTo(body.length())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1561,15 +1401,15 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.put(getAssignmentObject(targetId, MgmtActionType.FORCED, Action.WEIGHT_MIN - 1));
|
.put(getAssignmentObject(targetId, MgmtActionType.FORCED, Action.WEIGHT_MIN - 1));
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyValide.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyValide.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
enableMultiAssignments();
|
enableMultiAssignments();
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyInvalide.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyInvalide.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest())
|
.andExpect(status().isBadRequest())
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.repo.constraintViolation")));
|
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.repo.constraintViolation")));
|
||||||
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyValide.toString())
|
mvc.perform(post("/rest/v1/distributionsets/{ds}/assignedTargets", dsId).content(bodyValide.toString())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
final List<Action> actions = deploymentManagement.findActionsAll(PAGE).get().collect(Collectors.toList());
|
final List<Action> actions = deploymentManagement.findActionsAll(PAGE).get().collect(Collectors.toList());
|
||||||
@@ -1591,7 +1431,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
rolloutManagement.start(rollout.getId());
|
rolloutManagement.start(rollout.getId());
|
||||||
rolloutHandler.handleAll();
|
rolloutHandler.handleAll();
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/rollouts", ds1.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/rollouts", ds1.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("rollouts.READY", equalTo(1)))
|
.andExpect(jsonPath("rollouts.READY", equalTo(1)))
|
||||||
@@ -1600,7 +1441,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andExpect(jsonPath("actions").doesNotExist())
|
.andExpect(jsonPath("actions").doesNotExist())
|
||||||
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/rollouts", ds2.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/rollouts", ds2.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
@@ -1621,7 +1463,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
rolloutManagement.start(rollout.getId());
|
rolloutManagement.start(rollout.getId());
|
||||||
rolloutHandler.handleAll();
|
rolloutHandler.handleAll();
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/actions", ds1.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/actions", ds1.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("actions.RUNNING", equalTo(4)))
|
.andExpect(jsonPath("actions.RUNNING", equalTo(4)))
|
||||||
@@ -1629,7 +1472,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/actions", ds2.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/actions", ds2.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
@@ -1645,19 +1489,23 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
DistributionSet ds2 = testdataFactory.createDistributionSet("DS2");
|
DistributionSet ds2 = testdataFactory.createDistributionSet("DS2");
|
||||||
|
|
||||||
targetFilterQueryManagement.create(
|
targetFilterQueryManagement.create(
|
||||||
entityFactory.targetFilterQuery().create().name("test filter 1").autoAssignDistributionSet(ds1.getId()).query("name==targets*"));
|
entityFactory.targetFilterQuery().create().name("test filter 1").autoAssignDistributionSet(ds1.getId())
|
||||||
|
.query("name==targets*"));
|
||||||
|
|
||||||
targetFilterQueryManagement.create(
|
targetFilterQueryManagement.create(
|
||||||
entityFactory.targetFilterQuery().create().name("test filter 2").autoAssignDistributionSet(ds1.getId()).query("name==targets*"));
|
entityFactory.targetFilterQuery().create().name("test filter 2").autoAssignDistributionSet(ds1.getId())
|
||||||
|
.query("name==targets*"));
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds1.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds1.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("totalAutoAssignments", equalTo(2)))
|
.andExpect(jsonPath("totalAutoAssignments", equalTo(2)))
|
||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
.andExpect(jsonPath("actions").doesNotExist());
|
.andExpect(jsonPath("actions").doesNotExist());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds2.getId()).contentType(MediaType.APPLICATION_JSON))
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds2.getId()).contentType(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
@@ -1674,15 +1522,16 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
DistributionSet ds2 = testdataFactory.createDistributionSet("DS2");
|
DistributionSet ds2 = testdataFactory.createDistributionSet("DS2");
|
||||||
|
|
||||||
targetFilterQueryManagement.create(
|
targetFilterQueryManagement.create(
|
||||||
entityFactory.targetFilterQuery().create().name("test filter 1").autoAssignDistributionSet(ds1.getId()).query("name==autoAssignments*"));
|
entityFactory.targetFilterQuery().create().name("test filter 1").autoAssignDistributionSet(ds1.getId())
|
||||||
|
.query("name==autoAssignments*"));
|
||||||
|
|
||||||
Rollout rollout = testdataFactory.createRolloutByVariables("rollout", "description",
|
Rollout rollout = testdataFactory.createRolloutByVariables("rollout", "description",
|
||||||
1, "name==targets*", ds1, "50", "5", false);
|
1, "name==targets*", ds1, "50", "5", false);
|
||||||
rolloutManagement.start(rollout.getId());
|
rolloutManagement.start(rollout.getId());
|
||||||
rolloutHandler.handleAll();
|
rolloutHandler.handleAll();
|
||||||
|
|
||||||
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics", ds1.getId()).contentType(
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics", ds1.getId()).contentType(MediaType.APPLICATION_JSON))
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("totalAutoAssignments", equalTo(1)))
|
.andExpect(jsonPath("totalAutoAssignments", equalTo(1)))
|
||||||
@@ -1691,8 +1540,8 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andExpect(jsonPath("rollouts.RUNNING", equalTo(1)))
|
.andExpect(jsonPath("rollouts.RUNNING", equalTo(1)))
|
||||||
.andExpect(jsonPath("rollouts.total", equalTo(1)));
|
.andExpect(jsonPath("rollouts.total", equalTo(1)));
|
||||||
|
|
||||||
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds2.getId()).contentType(
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING + "/{ds}/statistics/autoassignments", ds2.getId()).contentType(MediaType.APPLICATION_JSON))
|
MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("rollouts").doesNotExist())
|
.andExpect(jsonPath("rollouts").doesNotExist())
|
||||||
@@ -1700,7 +1549,6 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
.andExpect(jsonPath("totalAutoAssignments").doesNotExist());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verify invalidation of distribution sets that removes distribution sets from auto assignments, stops rollouts and cancels assignments")
|
@Description("Verify invalidation of distribution sets that removes distribution sets from auto assignments, stops rollouts and cancels assignments")
|
||||||
public void invalidateDistributionSet() throws Exception {
|
public void invalidateDistributionSet() throws Exception {
|
||||||
@@ -1733,4 +1581,164 @@ public class MgmtDistributionSetResourceTest extends AbstractManagementApiIntegr
|
|||||||
.getContent().get(0).getStatus()).isEqualTo(Status.CANCELING);
|
.getContent().get(0).getStatus()).isEqualTo(Status.CANCELING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Tests the lock. It is verified that the distribution set can be marked as locked through update operation.")
|
||||||
|
void lockDistributionSet() throws Exception {
|
||||||
|
// prepare test data
|
||||||
|
assertThat(distributionSetManagement.findByCompleted(PAGE, true)).hasSize(0);
|
||||||
|
|
||||||
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
||||||
|
assertThat(set.isLocked()).as("Created distribution set should not be locked").isFalse();
|
||||||
|
|
||||||
|
// lock
|
||||||
|
final String body = new JSONObject().put("locked", true).toString();
|
||||||
|
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.locked", equalTo(true)));
|
||||||
|
|
||||||
|
final DistributionSet updatedSet = distributionSetManagement.get(set.getId()).get();
|
||||||
|
assertThat(updatedSet.isLocked()).isEqualTo(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Tests the unlock.")
|
||||||
|
void unlockDistributionSet() throws Exception {
|
||||||
|
// prepare test data
|
||||||
|
assertThat(distributionSetManagement.findByCompleted(PAGE, true)).hasSize(0);
|
||||||
|
|
||||||
|
final DistributionSet set = testdataFactory.createDistributionSet("one");
|
||||||
|
assertThat(distributionSetManagement.count()).isEqualTo(1);
|
||||||
|
distributionSetManagement.lock(set.getId());
|
||||||
|
assertThat(distributionSetManagement.get(set.getId())
|
||||||
|
.orElseThrow(() -> new EntityNotFoundException(SoftwareModule.class, set.getId())).isLocked())
|
||||||
|
.as("Distribution set should be locked")
|
||||||
|
.isTrue();
|
||||||
|
|
||||||
|
// unlock
|
||||||
|
final String body = new JSONObject().put("locked", false).toString();
|
||||||
|
mvc.perform(put("/rest/v1/distributionsets/{dsId}", set.getId()).content(body)
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.locked", equalTo(false)));
|
||||||
|
|
||||||
|
final DistributionSet updatedSet = distributionSetManagement.get(set.getId()).get();
|
||||||
|
assertThat(updatedSet.isLocked()).isEqualTo(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stream<Arguments> confirmationOptions() {
|
||||||
|
return Stream.of(Arguments.of(true, true), Arguments.of(true, false), Arguments.of(false, true),
|
||||||
|
Arguments.of(false, false), Arguments.of(true, null), Arguments.of(false, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONArray createTargetAndJsonArray(final String schedule, final String duration, final String timezone,
|
||||||
|
final String type, final Boolean confirmationRequired, final String... targetIds) throws Exception {
|
||||||
|
final JSONArray result = new JSONArray();
|
||||||
|
for (final String targetId : targetIds) {
|
||||||
|
testdataFactory.createTarget(targetId);
|
||||||
|
|
||||||
|
final JSONObject targetJsonObject = new JSONObject();
|
||||||
|
result.put(targetJsonObject);
|
||||||
|
targetJsonObject.put("id", Long.valueOf(targetId));
|
||||||
|
if (type != null) {
|
||||||
|
targetJsonObject.put("type", type);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (schedule != null || duration != null || timezone != null) {
|
||||||
|
final JSONObject maintenanceJsonObject = new JSONObject();
|
||||||
|
if (schedule != null) {
|
||||||
|
maintenanceJsonObject.put("schedule", schedule);
|
||||||
|
}
|
||||||
|
if (duration != null) {
|
||||||
|
maintenanceJsonObject.put("duration", duration);
|
||||||
|
}
|
||||||
|
if (timezone != null) {
|
||||||
|
maintenanceJsonObject.put("timezone", timezone);
|
||||||
|
}
|
||||||
|
targetJsonObject.put("maintenanceWindow", maintenanceJsonObject);
|
||||||
|
}
|
||||||
|
if (confirmationRequired != null) {
|
||||||
|
targetJsonObject.put("confirmationRequired", confirmationRequired);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void prepareTestFilters(final String filterNamePrefix, final DistributionSet createdDs) {
|
||||||
|
// create target filter queries that should be found
|
||||||
|
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "1")
|
||||||
|
.query("name==y").autoAssignDistributionSet(createdDs.getId()));
|
||||||
|
targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "2")
|
||||||
|
.query("name==y").autoAssignDistributionSet(createdDs.getId()));
|
||||||
|
// create some dummy target filter queries
|
||||||
|
targetFilterQueryManagement
|
||||||
|
.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "b").query("name==y"));
|
||||||
|
targetFilterQueryManagement
|
||||||
|
.create(entityFactory.targetFilterQuery().create().name(filterNamePrefix + "c").query("name==y"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private MvcResult executeMgmtTargetPost(final DistributionSet one, final DistributionSet two,
|
||||||
|
final DistributionSet three) throws Exception {
|
||||||
|
return mvc
|
||||||
|
.perform(post("/rest/v1/distributionsets")
|
||||||
|
.content(JsonBuilder.distributionSets(Arrays.asList(one, two, three)))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
|
.andExpect(jsonPath("[0]name", equalTo(one.getName())))
|
||||||
|
.andExpect(jsonPath("[0]description", equalTo(one.getDescription())))
|
||||||
|
.andExpect(jsonPath("[0]type", equalTo(standardDsType.getKey())))
|
||||||
|
.andExpect(jsonPath("[0]createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[0]version", equalTo(one.getVersion())))
|
||||||
|
.andExpect(jsonPath("[0]complete", equalTo(Boolean.TRUE)))
|
||||||
|
.andExpect(jsonPath("[0]requiredMigrationStep", equalTo(one.isRequiredMigrationStep())))
|
||||||
|
.andExpect(jsonPath("[0].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
||||||
|
contains(one.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[0].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
||||||
|
contains(one.findFirstModuleByType(appType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[0].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
||||||
|
contains(one.findFirstModuleByType(osType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[1]name", equalTo(two.getName())))
|
||||||
|
.andExpect(jsonPath("[1]description", equalTo(two.getDescription())))
|
||||||
|
.andExpect(jsonPath("[1]complete", equalTo(Boolean.TRUE)))
|
||||||
|
.andExpect(jsonPath("[1]type", equalTo(standardDsType.getKey())))
|
||||||
|
.andExpect(jsonPath("[1]createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[1]version", equalTo(two.getVersion())))
|
||||||
|
.andExpect(jsonPath("[1].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
||||||
|
contains(two.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[1].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
||||||
|
contains(two.findFirstModuleByType(appType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[1].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
||||||
|
contains(two.findFirstModuleByType(osType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[1]requiredMigrationStep", equalTo(two.isRequiredMigrationStep())))
|
||||||
|
.andExpect(jsonPath("[2]name", equalTo(three.getName())))
|
||||||
|
.andExpect(jsonPath("[2]description", equalTo(three.getDescription())))
|
||||||
|
.andExpect(jsonPath("[2]complete", equalTo(Boolean.TRUE)))
|
||||||
|
.andExpect(jsonPath("[2]type", equalTo(standardDsType.getKey())))
|
||||||
|
.andExpect(jsonPath("[2]createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[2]version", equalTo(three.getVersion())))
|
||||||
|
.andExpect(jsonPath("[2].modules.[?(@.type=='" + runtimeType.getKey() + "')].id",
|
||||||
|
contains(three.findFirstModuleByType(runtimeType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[2].modules.[?(@.type=='" + appType.getKey() + "')].id",
|
||||||
|
contains(three.findFirstModuleByType(appType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[2].modules.[?(@.type=='" + osType.getKey() + "')].id",
|
||||||
|
contains(three.findFirstModuleByType(osType).get().getId().intValue())))
|
||||||
|
.andExpect(jsonPath("[2]requiredMigrationStep", equalTo(three.isRequiredMigrationStep()))).andReturn();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<DistributionSet> createDistributionSetsAlphabetical(final int amount) {
|
||||||
|
char character = 'a';
|
||||||
|
final Set<DistributionSet> created = new HashSet<>(amount);
|
||||||
|
for (int index = 0; index < amount; index++) {
|
||||||
|
final String str = String.valueOf(character);
|
||||||
|
created.add(testdataFactory.createDistributionSet(str));
|
||||||
|
character++;
|
||||||
|
}
|
||||||
|
return created;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,21 +28,20 @@ import java.util.Map;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.DistributionSetTagDeletedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.DistributionSetTagDeletedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetCreatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagCreatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetTagUpdatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetUpdatedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.entity.DistributionSetUpdatedEvent;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.TargetCreatedEvent;
|
|
||||||
import org.eclipse.hawkbit.repository.event.remote.entity.TargetTagCreatedEvent;
|
|
||||||
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
import org.eclipse.hawkbit.repository.exception.EntityNotFoundException;
|
||||||
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||||
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
|
import org.eclipse.hawkbit.repository.model.DistributionSetTag;
|
||||||
import org.eclipse.hawkbit.repository.model.Tag;
|
import org.eclipse.hawkbit.repository.model.Tag;
|
||||||
import org.eclipse.hawkbit.repository.model.Target;
|
|
||||||
import org.eclipse.hawkbit.repository.model.TargetTag;
|
|
||||||
import org.eclipse.hawkbit.repository.test.matcher.Expect;
|
import org.eclipse.hawkbit.repository.test.matcher.Expect;
|
||||||
import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents;
|
import org.eclipse.hawkbit.repository.test.matcher.ExpectEvents;
|
||||||
import org.eclipse.hawkbit.rest.json.model.ExceptionInfo;
|
import org.eclipse.hawkbit.rest.json.model.ExceptionInfo;
|
||||||
@@ -53,16 +52,13 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.ResultActions;
|
import org.springframework.test.web.servlet.ResultActions;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
|
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Distribution Set Tag Resource")
|
@Story("Distribution Set Tag Resource")
|
||||||
public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegrationTest {
|
public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiIntegrationTest {
|
||||||
|
|
||||||
private static final String DISTRIBUTIONSETTAGS_ROOT = "http://localhost"
|
private static final String DISTRIBUTIONSETTAGS_ROOT = "http://localhost"
|
||||||
+ MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/";
|
+ MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/";
|
||||||
|
private static final Random RND = new Random();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verfies that a paged result list of DS tags reflects the content on the repository side.")
|
@Description("Verfies that a paged result list of DS tags reflects the content on the repository side.")
|
||||||
@@ -109,28 +105,28 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
distributionSetManagement.assignTag(List.of(distributionSet1.getId()), tag2.getId());
|
distributionSetManagement.assignTag(List.of(distributionSet1.getId()), tag2.getId());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING)
|
||||||
.queryParam(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "distributionset.id==" + distributionSet1.getId())
|
.queryParam(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "distributionset.id==" + distributionSet1.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
||||||
.andExpect(applyBaseEntityMatcherOnPagedResult(tag2))
|
.andExpect(applyBaseEntityMatcherOnPagedResult(tag2))
|
||||||
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
||||||
.andExpect(applySelfLinkMatcherOnPagedResult(tag2, DISTRIBUTIONSETTAGS_ROOT + tag2.getId()))
|
.andExpect(applySelfLinkMatcherOnPagedResult(tag2, DISTRIBUTIONSETTAGS_ROOT + tag2.getId()))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(2)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(2)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(2)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(2)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(2)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(2)));
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING)
|
||||||
.queryParam(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "distributionset.id==" + distributionSet2.getId())
|
.queryParam(MgmtRestConstants.REQUEST_PARAMETER_SEARCH, "distributionset.id==" + distributionSet2.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
||||||
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -148,16 +144,16 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
// pass here q directly as a pure string because .queryParam method delimiters the parameters in q with ,
|
// pass here q directly as a pure string because .queryParam method delimiters the parameters in q with ,
|
||||||
// which is logical OR, we want AND here
|
// which is logical OR, we want AND here
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING
|
||||||
+ "?" + MgmtRestConstants.REQUEST_PARAMETER_SEARCH +
|
+ "?" + MgmtRestConstants.REQUEST_PARAMETER_SEARCH +
|
||||||
"=distributionset.id==" + distributionSet1.getId() + ";description==" + tag1.getDescription())
|
"=distributionset.id==" + distributionSet1.getId() + ";description==" + tag1.getDescription())
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
.andExpect(applyBaseEntityMatcherOnPagedResult(tag1))
|
||||||
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
.andExpect(applySelfLinkMatcherOnPagedResult(tag1, DISTRIBUTIONSETTAGS_ROOT + tag1.getId()))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -168,7 +164,7 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
final DistributionSetTag assigned = tags.get(0);
|
final DistributionSetTag assigned = tags.get(0);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + assigned.getId())
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + assigned.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyTagMatcherOnSingleResult(assigned))
|
.andExpect(applyTagMatcherOnSingleResult(assigned))
|
||||||
.andExpect(applySelfLinkMatcherOnSingleResult(DISTRIBUTIONSETTAGS_ROOT + assigned.getId()))
|
.andExpect(applySelfLinkMatcherOnSingleResult(DISTRIBUTIONSETTAGS_ROOT + assigned.getId()))
|
||||||
@@ -275,7 +271,7 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
distributionSetManagement.assignTag(sets.stream().map(BaseEntity::getId).collect(Collectors.toList()), tag.getId());
|
distributionSetManagement.assignTag(sets.stream().map(BaseEntity::getId).collect(Collectors.toList()), tag.getId());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(setsAssigned)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(setsAssigned)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -297,8 +293,8 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
distributionSetManagement.assignTag(sets.stream().map(BaseEntity::getId).collect(Collectors.toList()), tag.getId());
|
distributionSetManagement.assignTag(sets.stream().map(BaseEntity::getId).collect(Collectors.toList()), tag.getId());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(setsAssigned)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(setsAssigned)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(setsAssigned)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(setsAssigned)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -337,16 +333,6 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
assertThat(distributionSetManagement.findByTag(PAGE, tag.getId())).isEmpty();
|
assertThat(distributionSetManagement.findByTag(PAGE, tag.getId())).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResultActions toggle(final DistributionSetTag tag, final List<DistributionSet> sets) throws Exception {
|
|
||||||
return mvc
|
|
||||||
.perform(post(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId()
|
|
||||||
+ "/assigned/toggleTagAssignment").content(
|
|
||||||
JsonBuilder.ids(sets.stream().map(DistributionSet::getId).collect(Collectors.toList())))
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@@ -377,9 +363,9 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
final List<DistributionSet> sets = testdataFactory.createDistributionSetsWithoutModules(2);
|
final List<DistributionSet> sets = testdataFactory.createDistributionSetsWithoutModules(2);
|
||||||
|
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
put(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
put(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.content(JsonBuilder.toArray(sets.stream().map(DistributionSet::getId).collect(Collectors.toList())))
|
.content(JsonBuilder.toArray(sets.stream().map(DistributionSet::getId).collect(Collectors.toList())))
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
|
|
||||||
final List<DistributionSet> updated = distributionSetManagement.findByTag(PAGE, tag.getId()).getContent();
|
final List<DistributionSet> updated = distributionSetManagement.findByTag(PAGE, tag.getId()).getContent();
|
||||||
@@ -435,12 +421,11 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
.containsOnly(assigned.getId());
|
.containsOnly(assigned.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Random RND = new Random();
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that tag assignments (multi targets) done through tag API command are correctly stored in the repository.")
|
@Description("Verifies that tag assignments (multi targets) done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = DistributionSetTagCreatedEvent.class, count = 1),
|
@Expect(type = DistributionSetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = DistributionSetCreatedEvent.class, count = 2)})
|
@Expect(type = DistributionSetCreatedEvent.class, count = 2) })
|
||||||
public void assignDistributionSetsNotFound() throws Exception {
|
public void assignDistributionSetsNotFound() throws Exception {
|
||||||
final DistributionSetTag tag = testdataFactory.createDistributionSetTags(1).get(0);
|
final DistributionSetTag tag = testdataFactory.createDistributionSetTags(1).get(0);
|
||||||
final List<Long> sets = testdataFactory.createDistributionSetsWithoutModules(2).stream().map(DistributionSet::getId).toList();
|
final List<Long> sets = testdataFactory.createDistributionSetsWithoutModules(2).stream().map(DistributionSet::getId).toList();
|
||||||
@@ -475,8 +460,6 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEPRECATED flows
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@@ -505,4 +488,16 @@ public class MgmtDistributionSetTagResourceTest extends AbstractManagementApiInt
|
|||||||
result.andExpect(applyBaseEntityMatcherOnArrayResult(updated.get(0)))
|
result.andExpect(applyBaseEntityMatcherOnArrayResult(updated.get(0)))
|
||||||
.andExpect(applyBaseEntityMatcherOnArrayResult(updated.get(1)));
|
.andExpect(applyBaseEntityMatcherOnArrayResult(updated.get(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DEPRECATED flows
|
||||||
|
|
||||||
|
private ResultActions toggle(final DistributionSetTag tag, final List<DistributionSet> sets) throws Exception {
|
||||||
|
return mvc
|
||||||
|
.perform(post(MgmtRestConstants.DISTRIBUTIONSET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId()
|
||||||
|
+ "/assigned/toggleTagAssignment").content(
|
||||||
|
JsonBuilder.ids(sets.stream().map(DistributionSet::getId).collect(Collectors.toList())))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,12 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Step;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.assertj.core.util.Lists;
|
|
||||||
import org.eclipse.hawkbit.exception.SpServerError;
|
import org.eclipse.hawkbit.exception.SpServerError;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
import org.eclipse.hawkbit.repository.builder.SoftwareModuleTypeCreate;
|
import org.eclipse.hawkbit.repository.builder.SoftwareModuleTypeCreate;
|
||||||
@@ -45,16 +49,8 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Step;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for {@link MgmtDistributionSetTypeResource}.
|
* Test for {@link MgmtDistributionSetTypeResource}.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Distribution Set Type Resource")
|
@Story("Distribution Set Type Resource")
|
||||||
@@ -108,7 +104,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
|
|
||||||
// descending
|
// descending
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:DESC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:DESC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[0].id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.content.[0].id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.content.[0].name", equalTo("TestName123")))
|
.andExpect(jsonPath("$.content.[0].name", equalTo("TestName123")))
|
||||||
@@ -123,7 +119,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
|
|
||||||
// ascending
|
// ascending
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get("/rest/v1/distributionsettypes").accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:ASC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "KEY:ASC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[4].id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.content.[4].id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.content.[4].name", equalTo("TestName123")))
|
.andExpect(jsonPath("$.content.[4].name", equalTo("TestName123")))
|
||||||
@@ -149,68 +145,6 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
verifyCreatedDistributionSetTypes(mvcResult);
|
verifyCreatedDistributionSetTypes(mvcResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyCreatedDistributionSetTypes(final MvcResult mvcResult) throws UnsupportedEncodingException {
|
|
||||||
final DistributionSetType created1 = distributionSetTypeManagement.getByKey("testKey1").get();
|
|
||||||
final DistributionSetType created2 = distributionSetTypeManagement.getByKey("testKey2").get();
|
|
||||||
final DistributionSetType created3 = distributionSetTypeManagement.getByKey("testKey3").get();
|
|
||||||
|
|
||||||
assertThat(created1.getMandatoryModuleTypes()).containsOnly(osType);
|
|
||||||
assertThat(created1.getOptionalModuleTypes()).containsOnly(runtimeType);
|
|
||||||
assertThat(created2.getOptionalModuleTypes()).containsOnly(osType, runtimeType, appType);
|
|
||||||
assertThat(created3.getMandatoryModuleTypes()).containsOnly(osType, runtimeType);
|
|
||||||
|
|
||||||
assertThat(
|
|
||||||
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created1.getId());
|
|
||||||
assertThat(
|
|
||||||
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created2.getId());
|
|
||||||
assertThat(
|
|
||||||
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
|
||||||
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created3.getId());
|
|
||||||
|
|
||||||
assertThat(distributionSetTypeManagement.count()).isEqualTo(7);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private MvcResult runPostDistributionSetType(final List<DistributionSetType> types) throws Exception {
|
|
||||||
return mvc
|
|
||||||
.perform(post("/rest/v1/distributionsettypes").content(JsonBuilder.distributionSetTypes(types))
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
|
||||||
.andExpect(jsonPath("[0].name", equalTo("TestName1")))
|
|
||||||
.andExpect(jsonPath("[0].key", equalTo("testKey1")))
|
|
||||||
.andExpect(jsonPath("[0].description", equalTo("Desc1")))
|
|
||||||
.andExpect(jsonPath("[0].colour", equalTo("col")))
|
|
||||||
.andExpect(jsonPath("[0].createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[1].name", equalTo("TestName2")))
|
|
||||||
.andExpect(jsonPath("[1].key", equalTo("testKey2")))
|
|
||||||
.andExpect(jsonPath("[1].description", equalTo("Desc2")))
|
|
||||||
.andExpect(jsonPath("[1].createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[2].name", equalTo("TestName3")))
|
|
||||||
.andExpect(jsonPath("[2].key", equalTo("testKey3")))
|
|
||||||
.andExpect(jsonPath("[2].description", equalTo("Desc3")))
|
|
||||||
.andExpect(jsonPath("[2].createdBy", equalTo("uploadTester")))
|
|
||||||
.andExpect(jsonPath("[2].createdAt", not(equalTo(0)))).andReturn();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private List<DistributionSetType> createTestDistributionSetTestTypes() {
|
|
||||||
assertThat(distributionSetTypeManagement.count()).isEqualTo(DEFAULT_DS_TYPES);
|
|
||||||
|
|
||||||
return Arrays.asList(
|
|
||||||
entityFactory.distributionSetType().create().key("testKey1").name("TestName1").description("Desc1")
|
|
||||||
.colour("col").mandatory(Arrays.asList(osType.getId()))
|
|
||||||
.optional(Arrays.asList(runtimeType.getId())).build(),
|
|
||||||
entityFactory.distributionSetType().create().key("testKey2").name("TestName2").description("Desc2")
|
|
||||||
.colour("col").optional(Arrays.asList(runtimeType.getId(), osType.getId(), appType.getId()))
|
|
||||||
.build(),
|
|
||||||
entityFactory.distributionSetType().create().key("testKey3").name("TestName3").description("Desc3")
|
|
||||||
.colour("col").mandatory(Arrays.asList(runtimeType.getId(), osType.getId())).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
||||||
@Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes POST requests.")
|
@Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/mandatorymoduletypes POST requests.")
|
||||||
@@ -220,7 +154,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId())
|
||||||
.content("{\"id\":" + osType.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + osType.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
|
|
||||||
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -239,7 +173,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
||||||
.content("{\"id\":" + osType.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + osType.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
|
|
||||||
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -272,13 +206,13 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
|
|
||||||
for (int i = 0; i < moduleTypeIds.size() - 1; ++i) {
|
for (int i = 0; i < moduleTypeIds.size() - 1; ++i) {
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
||||||
.content("{\"id\":" + moduleTypeIds.get(i) + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + moduleTypeIds.get(i) + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
||||||
.content("{\"id\":" + moduleTypeIds.get(moduleTypeIds.size() - 1) + "}")
|
.content("{\"id\":" + moduleTypeIds.get(moduleTypeIds.size() - 1) + "}")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -291,13 +225,13 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
|
|
||||||
for (int i = 0; i < moduleTypeIds.size() - 1; ++i) {
|
for (int i = 0; i < moduleTypeIds.size() - 1; ++i) {
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType2.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType2.getId())
|
||||||
.content("{\"id\":" + moduleTypeIds.get(i) + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + moduleTypeIds.get(i) + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType2.getId())
|
mvc.perform(post("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType2.getId())
|
||||||
.content("{\"id\":" + moduleTypeIds.get(moduleTypeIds.size() - 1) + "}")
|
.content("{\"id\":" + moduleTypeIds.get(moduleTypeIds.size() - 1) + "}")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -311,7 +245,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final DistributionSetType testType = generateTestType();
|
final DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId())
|
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes", testType.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("[0].name", equalTo(osType.getName())))
|
.andExpect(jsonPath("[0].name", equalTo(osType.getName())))
|
||||||
.andExpect(jsonPath("[0].description", equalTo(osType.getDescription())))
|
.andExpect(jsonPath("[0].description", equalTo(osType.getDescription())))
|
||||||
@@ -325,7 +259,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final DistributionSetType testType = generateTestType();
|
final DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes", testType.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("[0].name", equalTo(appType.getName())))
|
.andExpect(jsonPath("[0].name", equalTo(appType.getName())))
|
||||||
.andExpect(jsonPath("[0].description", equalTo(appType.getDescription())))
|
.andExpect(jsonPath("[0].description", equalTo(appType.getDescription())))
|
||||||
@@ -340,7 +274,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final DistributionSetType testType = generateTestType();
|
final DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes/{smtId}", testType.getId(),
|
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes/{smtId}", testType.getId(),
|
||||||
osType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
osType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.id", equalTo(osType.getId().intValue())))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.id", equalTo(osType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.name", equalTo(osType.getName())))
|
.andExpect(jsonPath("$.name", equalTo(osType.getName())))
|
||||||
.andExpect(jsonPath("$.description", equalTo(osType.getDescription())))
|
.andExpect(jsonPath("$.description", equalTo(osType.getDescription())))
|
||||||
@@ -350,16 +284,6 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
.andExpect(jsonPath("$.lastModifiedAt", equalTo(osType.getLastModifiedAt())));
|
.andExpect(jsonPath("$.lastModifiedAt", equalTo(osType.getLastModifiedAt())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DistributionSetType generateTestType() {
|
|
||||||
final DistributionSetType testType = distributionSetTypeManagement.create(entityFactory.distributionSetType()
|
|
||||||
.create().key("test123").name("TestName123").description("Desc123").colour("col")
|
|
||||||
.mandatory(Arrays.asList(osType.getId())).optional(Arrays.asList(appType.getId())));
|
|
||||||
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
|
||||||
assertThat(testType.getOptionalModuleTypes()).containsExactly(appType);
|
|
||||||
assertThat(testType.getMandatoryModuleTypes()).containsExactly(osType);
|
|
||||||
return testType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
||||||
@Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} GET requests.")
|
@Description("Checks the correct behaviour of /rest/v1/distributionsettypes/{ID}/optionalmoduletypes/{ID} GET requests.")
|
||||||
@@ -367,7 +291,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final DistributionSetType testType = generateTestType();
|
final DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes/{smtId}", testType.getId(),
|
mvc.perform(get("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes/{smtId}", testType.getId(),
|
||||||
appType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
appType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath("$.id", equalTo(appType.getId().intValue())))
|
.andExpect(status().isOk()).andExpect(jsonPath("$.id", equalTo(appType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.name", equalTo(appType.getName())))
|
.andExpect(jsonPath("$.name", equalTo(appType.getName())))
|
||||||
.andExpect(jsonPath("$.description", equalTo(appType.getDescription())))
|
.andExpect(jsonPath("$.description", equalTo(appType.getDescription())))
|
||||||
@@ -384,7 +308,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
DistributionSetType testType = generateTestType();
|
DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(delete("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes/{smtId}", testType.getId(),
|
mvc.perform(delete("/rest/v1/distributionsettypes/{dstID}/mandatorymoduletypes/{smtId}", testType.getId(),
|
||||||
osType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
osType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -401,7 +325,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
DistributionSetType testType = generateTestType();
|
DistributionSetType testType = generateTestType();
|
||||||
|
|
||||||
mvc.perform(delete("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes/{smtId}", testType.getId(),
|
mvc.perform(delete("/rest/v1/distributionsettypes/{dstID}/optionalmoduletypes/{smtId}", testType.getId(),
|
||||||
appType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
appType.getId()).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
testType = distributionSetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -501,7 +425,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
.put("name", "nameShouldNotBeChanged").toString();
|
.put("name", "nameShouldNotBeChanged").toString();
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/distributionsettypes/{smId}", testType.getId()).content(body)
|
mvc.perform(put("/rest/v1/distributionsettypes/{smId}", testType.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.description", equalTo("foobardesc")))
|
.andExpect(jsonPath("$.description", equalTo("foobardesc")))
|
||||||
.andExpect(jsonPath("$.colour", equalTo("updatedColour")))
|
.andExpect(jsonPath("$.colour", equalTo("updatedColour")))
|
||||||
@@ -533,7 +457,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/distributionsettypes/{dstId}", testType.getId()).content(body)
|
mvc.perform(put("/rest/v1/distributionsettypes/{dstId}", testType.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.deleted", equalTo(false)));
|
.andExpect(jsonPath("$.deleted", equalTo(false)));
|
||||||
}
|
}
|
||||||
@@ -558,7 +482,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final int types = DEFAULT_DS_TYPES;
|
final int types = DEFAULT_DS_TYPES;
|
||||||
final int limitSize = 1;
|
final int limitSize = 1;
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -573,8 +497,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
final int offsetParam = 2;
|
final int offsetParam = 2;
|
||||||
final int expectedSize = types - offsetParam;
|
final int expectedSize = types - offsetParam;
|
||||||
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.DISTRIBUTIONSETTYPE_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -607,17 +531,17 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
||||||
|
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes/" + osType.getId()))
|
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes/" + osType.getId()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes/"
|
mvc.perform(get("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes/"
|
||||||
+ testSmType.getId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
+ testSmType.getId())).andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
||||||
|
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + osType.getId()))
|
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + osType.getId()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
||||||
|
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + appType.getId()))
|
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + appType.getId()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/"
|
mvc.perform(get("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/"
|
||||||
@@ -630,8 +554,8 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
.optional(Collections.emptyList()).build();
|
.optional(Collections.emptyList()).build();
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes")
|
mvc.perform(post("/rest/v1/distributionsettypes")
|
||||||
.content(JsonBuilder.distributionSetTypes(Arrays.asList(testNewType)))
|
.content(JsonBuilder.distributionSetTypes(Arrays.asList(testNewType)))
|
||||||
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnsupportedMediaType());
|
.andExpect(status().isUnsupportedMediaType());
|
||||||
|
|
||||||
// bad request - no content
|
// bad request - no content
|
||||||
@@ -640,19 +564,19 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
|
|
||||||
// bad request - bad content
|
// bad request - bad content
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes").content("sdfjsdlkjfskdjf".getBytes())
|
mvc.perform(post("/rest/v1/distributionsettypes").content("sdfjsdlkjfskdjf".getBytes())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// Missing mandatory field name
|
// Missing mandatory field name
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes").content("[{\"description\":\"Desc123\",\"key\":\"test123\"}]")
|
mvc.perform(post("/rest/v1/distributionsettypes").content("[{\"description\":\"Desc123\",\"key\":\"test123\"}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final DistributionSetType toLongName = entityFactory.distributionSetType().create().key("test123")
|
final DistributionSetType toLongName = entityFactory.distributionSetType().create().key("test123")
|
||||||
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
||||||
mvc.perform(post("/rest/v1/distributionsettypes")
|
mvc.perform(post("/rest/v1/distributionsettypes")
|
||||||
.content(JsonBuilder.distributionSetTypes(Arrays.asList(toLongName)))
|
.content(JsonBuilder.distributionSetTypes(Arrays.asList(toLongName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// not allowed methods
|
// not allowed methods
|
||||||
@@ -665,7 +589,7 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
mvc.perform(put("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes"))
|
mvc.perform(put("/rest/v1/distributionsettypes/" + standardDsType.getId() + "/mandatorymoduletypes"))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
||||||
mvc.perform(put(
|
mvc.perform(put(
|
||||||
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + osType.getId()))
|
"/rest/v1/distributionsettypes/" + standardDsType.getId() + "/optionalmoduletypes/" + osType.getId()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -685,6 +609,78 @@ public class MgmtDistributionSetTypeResourceTest extends AbstractManagementApiIn
|
|||||||
.andExpect(jsonPath("content[1].name", equalTo("TestName1234")));
|
.andExpect(jsonPath("content[1].name", equalTo("TestName1234")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyCreatedDistributionSetTypes(final MvcResult mvcResult) throws UnsupportedEncodingException {
|
||||||
|
final DistributionSetType created1 = distributionSetTypeManagement.getByKey("testKey1").get();
|
||||||
|
final DistributionSetType created2 = distributionSetTypeManagement.getByKey("testKey2").get();
|
||||||
|
final DistributionSetType created3 = distributionSetTypeManagement.getByKey("testKey3").get();
|
||||||
|
|
||||||
|
assertThat(created1.getMandatoryModuleTypes()).containsOnly(osType);
|
||||||
|
assertThat(created1.getOptionalModuleTypes()).containsOnly(runtimeType);
|
||||||
|
assertThat(created2.getOptionalModuleTypes()).containsOnly(osType, runtimeType, appType);
|
||||||
|
assertThat(created3.getMandatoryModuleTypes()).containsOnly(osType, runtimeType);
|
||||||
|
|
||||||
|
assertThat(
|
||||||
|
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
|
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created1.getId());
|
||||||
|
assertThat(
|
||||||
|
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
|
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created2.getId());
|
||||||
|
assertThat(
|
||||||
|
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
|
.isEqualTo("http://localhost/rest/v1/distributionsettypes/" + created3.getId());
|
||||||
|
|
||||||
|
assertThat(distributionSetTypeManagement.count()).isEqualTo(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private MvcResult runPostDistributionSetType(final List<DistributionSetType> types) throws Exception {
|
||||||
|
return mvc
|
||||||
|
.perform(post("/rest/v1/distributionsettypes").content(JsonBuilder.distributionSetTypes(types))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
|
.andExpect(jsonPath("[0].name", equalTo("TestName1")))
|
||||||
|
.andExpect(jsonPath("[0].key", equalTo("testKey1")))
|
||||||
|
.andExpect(jsonPath("[0].description", equalTo("Desc1")))
|
||||||
|
.andExpect(jsonPath("[0].colour", equalTo("col")))
|
||||||
|
.andExpect(jsonPath("[0].createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[1].name", equalTo("TestName2")))
|
||||||
|
.andExpect(jsonPath("[1].key", equalTo("testKey2")))
|
||||||
|
.andExpect(jsonPath("[1].description", equalTo("Desc2")))
|
||||||
|
.andExpect(jsonPath("[1].createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[2].name", equalTo("TestName3")))
|
||||||
|
.andExpect(jsonPath("[2].key", equalTo("testKey3")))
|
||||||
|
.andExpect(jsonPath("[2].description", equalTo("Desc3")))
|
||||||
|
.andExpect(jsonPath("[2].createdBy", equalTo("uploadTester")))
|
||||||
|
.andExpect(jsonPath("[2].createdAt", not(equalTo(0)))).andReturn();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private List<DistributionSetType> createTestDistributionSetTestTypes() {
|
||||||
|
assertThat(distributionSetTypeManagement.count()).isEqualTo(DEFAULT_DS_TYPES);
|
||||||
|
|
||||||
|
return Arrays.asList(
|
||||||
|
entityFactory.distributionSetType().create().key("testKey1").name("TestName1").description("Desc1")
|
||||||
|
.colour("col").mandatory(Arrays.asList(osType.getId()))
|
||||||
|
.optional(Arrays.asList(runtimeType.getId())).build(),
|
||||||
|
entityFactory.distributionSetType().create().key("testKey2").name("TestName2").description("Desc2")
|
||||||
|
.colour("col").optional(Arrays.asList(runtimeType.getId(), osType.getId(), appType.getId()))
|
||||||
|
.build(),
|
||||||
|
entityFactory.distributionSetType().create().key("testKey3").name("TestName3").description("Desc3")
|
||||||
|
.colour("col").mandatory(Arrays.asList(runtimeType.getId(), osType.getId())).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private DistributionSetType generateTestType() {
|
||||||
|
final DistributionSetType testType = distributionSetTypeManagement.create(entityFactory.distributionSetType()
|
||||||
|
.create().key("test123").name("TestName123").description("Desc123").colour("col")
|
||||||
|
.mandatory(Arrays.asList(osType.getId())).optional(Arrays.asList(appType.getId())));
|
||||||
|
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
||||||
|
assertThat(testType.getOptionalModuleTypes()).containsExactly(appType);
|
||||||
|
assertThat(testType.getMandatoryModuleTypes()).containsExactly(osType);
|
||||||
|
return testType;
|
||||||
|
}
|
||||||
|
|
||||||
private void createSoftwareModulesAlphabetical(final int amount) {
|
private void createSoftwareModulesAlphabetical(final int amount) {
|
||||||
char character = 'a';
|
char character = 'a';
|
||||||
for (int index = 0; index < amount; index++) {
|
for (int index = 0; index < amount; index++) {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -37,6 +37,10 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.awaitility.Awaitility;
|
import org.awaitility.Awaitility;
|
||||||
@@ -79,12 +83,6 @@ import org.springframework.test.web.servlet.ResultActions;
|
|||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link MgmtSoftwareModuleResource} {@link RestController}.
|
* Tests for {@link MgmtSoftwareModuleResource} {@link RestController}.
|
||||||
*/
|
*/
|
||||||
@@ -99,6 +97,119 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
assertThat(softwareModuleManagement.findAll(PAGE)).as("no softwaremodule should be founded").isEmpty();
|
assertThat(softwareModuleManagement.findAll(PAGE)).as("no softwaremodule should be founded").isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Trying to create a SM from already marked as deleted type - should get as response 400 Bad Request")
|
||||||
|
public void createSMFromAlreadyMarkedAsDeletedType() throws Exception {
|
||||||
|
final String SM_TYPE = "someSmType";
|
||||||
|
final SoftwareModule sm = testdataFactory.createSoftwareModule(SM_TYPE);
|
||||||
|
final DistributionSetType t = testdataFactory.findOrCreateDistributionSetType(
|
||||||
|
"testKey", "testType", Collections.singletonList(sm.getType()),
|
||||||
|
Collections.singletonList(sm.getType()));
|
||||||
|
final DistributionSetType type = testdataFactory.findOrCreateDistributionSetType("testKey", "testType");
|
||||||
|
final DistributionSet ds = testdataFactory.createDistributionSet("name", "version", type, Collections.singletonList(sm));
|
||||||
|
final Target target = testdataFactory.createTarget("test");
|
||||||
|
|
||||||
|
assignDistributionSet(ds, target);
|
||||||
|
//delete sm type
|
||||||
|
softwareModuleTypeManagement.delete(sm.getType().getId());
|
||||||
|
|
||||||
|
//check if it is marked as deleted
|
||||||
|
final Optional<SoftwareModuleType> opt = softwareModuleTypeManagement.getByKey(SM_TYPE);
|
||||||
|
if (opt.isEmpty()) {
|
||||||
|
throw new AssertionError("The Optional object of software module type should not be empty!");
|
||||||
|
}
|
||||||
|
final SoftwareModuleType smType = opt.get();
|
||||||
|
Assert.isTrue(smType.isDeleted(), "Software Module Type not marked as deleted!");
|
||||||
|
|
||||||
|
//check if we'll get bad request if we try to create module from the deleted type
|
||||||
|
final MvcResult mvcResult = mvc.perform(post("/rest/v1/softwaremodules")
|
||||||
|
.content("[{\"description\":\"someDescription\",\"key\":\"someTestKey\", \"type\":\"" + SM_TYPE + "\"}]")
|
||||||
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isBadRequest())
|
||||||
|
.andReturn();
|
||||||
|
|
||||||
|
final ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString());
|
||||||
|
assertEquals("jakarta.validation.ValidationException", exceptionInfo.getExceptionClass());
|
||||||
|
assertTrue(exceptionInfo.getMessage().contains("Software Module Type already deleted"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Handles the GET request of retrieving all meta data of artifacts assigned to a software module (in full representation mode including a download URL by the artifact provider).")
|
||||||
|
public void getArtifactsWithParameters() throws Exception {
|
||||||
|
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs();
|
||||||
|
|
||||||
|
final byte[] random = RandomStringUtils.random(5).getBytes();
|
||||||
|
|
||||||
|
artifactManagement.create(new ArtifactUpload(new ByteArrayInputStream(random), sm.getId(), "file1", false, 0));
|
||||||
|
|
||||||
|
mvc.perform(
|
||||||
|
get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/artifacts", sm.getId())
|
||||||
|
.param("representation", MgmtRepresentationMode.FULL.toString())
|
||||||
|
.param("useartifacturlhandler", Boolean.TRUE.toString()))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description(" Get a paged list of meta data for a software module.")
|
||||||
|
public void getMetadata() throws Exception {
|
||||||
|
final int totalMetadata = 4;
|
||||||
|
final String knownKeyPrefix = "knownKey";
|
||||||
|
final String knownValuePrefix = "knownValue";
|
||||||
|
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
||||||
|
|
||||||
|
for (int index = 0; index < totalMetadata; index++) {
|
||||||
|
softwareModuleManagement.createMetaData(entityFactory.softwareModuleMetadata().create(module.getId())
|
||||||
|
.key(knownKeyPrefix + index).value(knownValuePrefix + index));
|
||||||
|
}
|
||||||
|
|
||||||
|
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata",
|
||||||
|
module.getId())).andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description(" Get a paged list of meta data for a software module with defined page size and sorting by name descending and key starting with 'known'.")
|
||||||
|
public void getMetadataWithParameters() throws Exception {
|
||||||
|
final int totalMetadata = 4;
|
||||||
|
final String knownKeyPrefix = "knownKey";
|
||||||
|
final String knownValuePrefix = "knownValue";
|
||||||
|
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
||||||
|
|
||||||
|
for (int index = 0; index < totalMetadata; index++) {
|
||||||
|
softwareModuleManagement.createMetaData(entityFactory.softwareModuleMetadata().create(module.getId())
|
||||||
|
.key(knownKeyPrefix + index).value(knownValuePrefix + index));
|
||||||
|
}
|
||||||
|
|
||||||
|
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata",
|
||||||
|
module.getId()).param("offset", "1").param("limit", "2").param("sort", "key:DESC").param("q",
|
||||||
|
"key==known*"))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description(" Get a single meta data value for a meta data key.")
|
||||||
|
public void getMetadataValue() throws Exception {
|
||||||
|
|
||||||
|
// prepare and create metadata
|
||||||
|
final String knownKey = "knownKey";
|
||||||
|
final String knownValue = "knownValue";
|
||||||
|
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
||||||
|
softwareModuleManagement.createMetaData(
|
||||||
|
entityFactory.softwareModuleMetadata().create(module.getId()).key(knownKey).value(knownValue));
|
||||||
|
|
||||||
|
mvc.perform(
|
||||||
|
get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata/{metadataKey}",
|
||||||
|
module.getId(), knownKey))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Tests the update of software module metadata. It is verfied that only the selected fields for the update are really updated and the modification values are filled (i.e. updated by and at).")
|
@Description("Tests the update of software module metadata. It is verfied that only the selected fields for the update are really updated and the modification values are filled (i.e. updated by and at).")
|
||||||
@WithUser(principal = "smUpdateTester", allSpPermissions = true)
|
@WithUser(principal = "smUpdateTester", allSpPermissions = true)
|
||||||
@@ -335,35 +446,6 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
.andExpect(jsonPath("$.message", containsString("Invalid characters in string")));
|
.andExpect(jsonPath("$.message", containsString("Invalid characters in string")));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertArtifact(final SoftwareModule sm, final byte[] random) throws IOException {
|
|
||||||
// check result in db...
|
|
||||||
// repo
|
|
||||||
assertThat(artifactManagement.count()).as("Wrong artifact size").isEqualTo(1);
|
|
||||||
|
|
||||||
// binary
|
|
||||||
try (final InputStream fileInputStream = artifactManagement
|
|
||||||
.loadArtifactBinary(softwareModuleManagement.get(sm.getId()).get().getArtifacts().get(0).getSha1Hash(),
|
|
||||||
sm.getId(), sm.isEncrypted())
|
|
||||||
.get().getFileInputStream()) {
|
|
||||||
assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), fileInputStream),
|
|
||||||
"Wrong artifact content");
|
|
||||||
}
|
|
||||||
|
|
||||||
// hashes
|
|
||||||
assertThat(artifactManagement.getByFilename("origFilename").get().getSha1Hash()).as("Wrong sha1 hash")
|
|
||||||
.isEqualTo(HashGeneratorUtils.generateSHA1(random));
|
|
||||||
|
|
||||||
assertThat(artifactManagement.getByFilename("origFilename").get().getMd5Hash()).as("Wrong md5 hash")
|
|
||||||
.isEqualTo(HashGeneratorUtils.generateMD5(random));
|
|
||||||
|
|
||||||
assertThat(artifactManagement.getByFilename("origFilename").get().getSha256Hash()).as("Wrong sha256 hash")
|
|
||||||
.isEqualTo(HashGeneratorUtils.generateSHA256(random));
|
|
||||||
|
|
||||||
// metadata
|
|
||||||
assertThat(softwareModuleManagement.get(sm.getId()).get().getArtifacts().get(0).getFilename())
|
|
||||||
.as("wrong metadata of the filename").isEqualTo("origFilename");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that the system does not accept empty artifact uploads. Expected response: BAD REQUEST")
|
@Description("Verifies that the system does not accept empty artifact uploads. Expected response: BAD REQUEST")
|
||||||
void emptyUploadArtifact() throws Exception {
|
void emptyUploadArtifact() throws Exception {
|
||||||
@@ -430,43 +512,6 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
assertThat(artifactManagement.getByFilename("customFilename")).as("Local artifact is wrong").isPresent();
|
assertThat(artifactManagement.getByFilename("customFilename")).as("Local artifact is wrong").isPresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Trying to create a SM from already marked as deleted type - should get as response 400 Bad Request")
|
|
||||||
public void createSMFromAlreadyMarkedAsDeletedType() throws Exception {
|
|
||||||
final String SM_TYPE = "someSmType";
|
|
||||||
final SoftwareModule sm = testdataFactory.createSoftwareModule(SM_TYPE);
|
|
||||||
final DistributionSetType t = testdataFactory.findOrCreateDistributionSetType(
|
|
||||||
"testKey", "testType", Collections.singletonList(sm.getType()),
|
|
||||||
Collections.singletonList(sm.getType()));
|
|
||||||
final DistributionSetType type = testdataFactory.findOrCreateDistributionSetType("testKey", "testType");
|
|
||||||
final DistributionSet ds = testdataFactory.createDistributionSet("name", "version", type, Collections.singletonList(sm));
|
|
||||||
final Target target = testdataFactory.createTarget("test");
|
|
||||||
|
|
||||||
assignDistributionSet(ds, target);
|
|
||||||
//delete sm type
|
|
||||||
softwareModuleTypeManagement.delete(sm.getType().getId());
|
|
||||||
|
|
||||||
//check if it is marked as deleted
|
|
||||||
final Optional<SoftwareModuleType> opt = softwareModuleTypeManagement.getByKey(SM_TYPE);
|
|
||||||
if (opt.isEmpty()) {
|
|
||||||
throw new AssertionError("The Optional object of software module type should not be empty!");
|
|
||||||
}
|
|
||||||
final SoftwareModuleType smType = opt.get();
|
|
||||||
Assert.isTrue(smType.isDeleted(), "Software Module Type not marked as deleted!");
|
|
||||||
|
|
||||||
//check if we'll get bad request if we try to create module from the deleted type
|
|
||||||
final MvcResult mvcResult = mvc.perform(post("/rest/v1/softwaremodules")
|
|
||||||
.content("[{\"description\":\"someDescription\",\"key\":\"someTestKey\", \"type\":\"" + SM_TYPE + "\"}]")
|
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isBadRequest())
|
|
||||||
.andReturn();
|
|
||||||
|
|
||||||
final ExceptionInfo exceptionInfo = ResourceUtility.convertException(mvcResult.getResponse().getContentAsString());
|
|
||||||
assertEquals("jakarta.validation.ValidationException", exceptionInfo.getExceptionClass());
|
|
||||||
assertTrue(exceptionInfo.getMessage().contains("Software Module Type already deleted"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST")
|
@Description("Verifies that the system refuses upload of an artifact where the provided hash sums do not match. Expected result: BAD REQUEST")
|
||||||
void uploadArtifactWithHashCheck() throws Exception {
|
void uploadArtifactWithHashCheck() throws Exception {
|
||||||
@@ -515,7 +560,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
.isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH.getKey());
|
.isEqualTo(SpServerError.SP_ARTIFACT_UPLOAD_FAILED_MD5_MATCH.getKey());
|
||||||
|
|
||||||
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
||||||
.param("md5sum", md5sum).param("sha1sum", sha1sum)).andDo(MockMvcResultPrinter.print())
|
.param("md5sum", md5sum).param("sha1sum", sha1sum)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated());
|
.andExpect(status().isCreated());
|
||||||
|
|
||||||
assertArtifact(sm, random);
|
assertArtifact(sm, random);
|
||||||
@@ -538,7 +583,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// upload
|
// upload
|
||||||
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.hashes.md5", equalTo(md5sum)))
|
.andExpect(jsonPath("$.hashes.md5", equalTo(md5sum)))
|
||||||
.andExpect(jsonPath("$.hashes.sha1", equalTo(sha1sum)))
|
.andExpect(jsonPath("$.hashes.sha1", equalTo(sha1sum)))
|
||||||
@@ -553,7 +598,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// upload
|
// upload
|
||||||
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -581,7 +626,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
// upload
|
// upload
|
||||||
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs("sm" + i);
|
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs("sm" + i);
|
||||||
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.hashes.md5", equalTo(md5sum)))
|
.andExpect(jsonPath("$.hashes.md5", equalTo(md5sum)))
|
||||||
.andExpect(jsonPath("$.hashes.sha1", equalTo(sha1sum)))
|
.andExpect(jsonPath("$.hashes.sha1", equalTo(sha1sum)))
|
||||||
@@ -597,7 +642,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
// upload
|
// upload
|
||||||
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs("sm" + numArtifacts);
|
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs("sm" + numArtifacts);
|
||||||
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
mvc.perform(multipart("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId()).file(file)
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(StorageQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(StorageQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_STORAGE_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_STORAGE_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -624,17 +669,6 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
assertThat(artifactManagement.count()).isEqualTo(2);
|
assertThat(artifactManagement.count()).isEqualTo(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void downloadAndVerify(final SoftwareModule sm, final byte[] random, final Artifact artifact)
|
|
||||||
throws Exception {
|
|
||||||
final MvcResult result = mvc
|
|
||||||
.perform(
|
|
||||||
get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", sm.getId(), artifact.getId()))
|
|
||||||
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_OCTET_STREAM))
|
|
||||||
.andExpect(header().string("ETag", artifact.getSha1Hash())).andReturn();
|
|
||||||
|
|
||||||
assertTrue(Arrays.equals(result.getResponse().getContentAsByteArray(), random), "Wrong response content");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.")
|
@Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and download links.")
|
||||||
void getArtifact() throws Exception {
|
void getArtifact() throws Exception {
|
||||||
@@ -649,7 +683,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// perform test
|
// perform test
|
||||||
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}", sm.getId(), artifact.getId())
|
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}", sm.getId(), artifact.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.id", equalTo(artifact.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(artifact.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.size", equalTo(random.length)))
|
.andExpect(jsonPath("$.size", equalTo(random.length)))
|
||||||
@@ -680,8 +714,8 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// perform test
|
// perform test
|
||||||
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}", sm.getId(), artifact.getId())
|
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}", sm.getId(), artifact.getId())
|
||||||
.param("useartifacturlhandler", String.valueOf(useArtifactUrlHandler))
|
.param("useartifacturlhandler", String.valueOf(useArtifactUrlHandler))
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.id", equalTo(artifact.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(artifact.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.size", equalTo(random.length)))
|
.andExpect(jsonPath("$.size", equalTo(random.length)))
|
||||||
@@ -760,24 +794,6 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
"http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artifact2.getId())));
|
"http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artifact2.getId())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Handles the GET request of retrieving all meta data of artifacts assigned to a software module (in full representation mode including a download URL by the artifact provider).")
|
|
||||||
public void getArtifactsWithParameters() throws Exception {
|
|
||||||
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs();
|
|
||||||
|
|
||||||
final byte[] random = RandomStringUtils.random(5).getBytes();
|
|
||||||
|
|
||||||
artifactManagement.create(new ArtifactUpload(new ByteArrayInputStream(random), sm.getId(), "file1", false, 0));
|
|
||||||
|
|
||||||
mvc.perform(
|
|
||||||
get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/artifacts", sm.getId())
|
|
||||||
.param("representation", MgmtRepresentationMode.FULL.toString())
|
|
||||||
.param("useartifacturlhandler", Boolean.TRUE.toString()))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@ValueSource(booleans = { true, false })
|
@ValueSource(booleans = { true, false })
|
||||||
@Description("Verifies the listing of all artifacts assigned to a software module. That includes the artifact metadata and download links.")
|
@Description("Verifies the listing of all artifacts assigned to a software module. That includes the artifact metadata and download links.")
|
||||||
@@ -793,9 +809,9 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
.create(new ArtifactUpload(new ByteArrayInputStream(random), sm.getId(), "file2", false, artifactSize));
|
.create(new ArtifactUpload(new ByteArrayInputStream(random), sm.getId(), "file2", false, artifactSize));
|
||||||
|
|
||||||
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId())
|
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts", sm.getId())
|
||||||
.param("representation", MgmtRepresentationMode.FULL.toString())
|
.param("representation", MgmtRepresentationMode.FULL.toString())
|
||||||
.param("useartifacturlhandler", String.valueOf(useArtifactUrlHandler))
|
.param("useartifacturlhandler", String.valueOf(useArtifactUrlHandler))
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.[0].id", equalTo(artifact.getId().intValue())))
|
.andExpect(jsonPath("$.[0].id", equalTo(artifact.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.[0].size", equalTo(random.length)))
|
.andExpect(jsonPath("$.[0].size", equalTo(random.length)))
|
||||||
@@ -932,27 +948,27 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremodules")
|
mvc.perform(post("/rest/v1/softwaremodules")
|
||||||
.content("[{\"description\":\"Desc123\",\"key\":\"test123\", \"type\":\"os\"}]")
|
.content("[{\"description\":\"Desc123\",\"key\":\"test123\", \"type\":\"os\"}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final SoftwareModule toLongName = entityFactory.softwareModule().create().type(osType)
|
final SoftwareModule toLongName = entityFactory.softwareModule().create().type(osType)
|
||||||
.name(RandomStringUtils.randomAlphanumeric(80)).build();
|
.name(RandomStringUtils.randomAlphanumeric(80)).build();
|
||||||
mvc.perform(post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(Arrays.asList(toLongName)))
|
mvc.perform(post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(Arrays.asList(toLongName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// unsupported media type
|
// unsupported media type
|
||||||
mvc.perform(post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(modules))
|
mvc.perform(post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(modules))
|
||||||
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnsupportedMediaType());
|
.andExpect(status().isUnsupportedMediaType());
|
||||||
|
|
||||||
final SoftwareModule swm = entityFactory.softwareModule().create().name("encryptedModule").type(osType)
|
final SoftwareModule swm = entityFactory.softwareModule().create().name("encryptedModule").type(osType)
|
||||||
.version("version").vendor("vendor").description("description").encrypted(true).build();
|
.version("version").vendor("vendor").description("description").encrypted(true).build();
|
||||||
// artifact decryption is not supported
|
// artifact decryption is not supported
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(Collections.singletonList(swm)))
|
post("/rest/v1/softwaremodules").content(JsonBuilder.softwareModules(Collections.singletonList(swm)))
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// not allowed methods
|
// not allowed methods
|
||||||
@@ -1069,7 +1085,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// by type, 2 software modules per type exists
|
// by type, 2 software modules per type exists
|
||||||
mvc.perform(get("/rest/v1/softwaremodules?q=type==" + Constants.SMT_DEFAULT_APP_KEY)
|
mvc.perform(get("/rest/v1/softwaremodules?q=type==" + Constants.SMT_DEFAULT_APP_KEY)
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[?(@.id==" + app1.getId() + ")].name", contains(app1.getName())))
|
.andExpect(jsonPath("$.content.[?(@.id==" + app1.getId() + ")].name", contains(app1.getName())))
|
||||||
.andExpect(jsonPath("$.content.[?(@.id==" + app1.getId() + ")].version", contains(app1.getVersion())))
|
.andExpect(jsonPath("$.content.[?(@.id==" + app1.getId() + ")].version", contains(app1.getVersion())))
|
||||||
@@ -1089,7 +1105,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
|
|
||||||
// by type and version=2.0.0 -> only one result
|
// by type and version=2.0.0 -> only one result
|
||||||
mvc.perform(get(
|
mvc.perform(get(
|
||||||
"/rest/v1/softwaremodules?q=type==" + Constants.SMT_DEFAULT_APP_KEY + ";version==" + app1.getVersion())
|
"/rest/v1/softwaremodules?q=type==" + Constants.SMT_DEFAULT_APP_KEY + ";version==" + app1.getVersion())
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
@@ -1292,7 +1308,7 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
metaData1.put(new JSONObject().put("key", knownKey2).put("value", knownValue2).put("targetVisible", true));
|
metaData1.put(new JSONObject().put("key", knownKey2).put("value", knownValue2).put("targetVisible", true));
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremodules/{swId}/metadata", sm.getId()).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(post("/rest/v1/softwaremodules/{swId}/metadata", sm.getId()).accept(MediaType.APPLICATION_JSON)
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(metaData1.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(metaData1.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isCreated())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("[0].key", equalTo(knownKey1)))
|
.andExpect(jsonPath("[0].key", equalTo(knownKey1)))
|
||||||
@@ -1316,75 +1332,17 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
}
|
}
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremodules/{swId}/metadata", sm.getId()).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(post("/rest/v1/softwaremodules/{swId}/metadata", sm.getId()).accept(MediaType.APPLICATION_JSON)
|
||||||
.contentType(MediaType.APPLICATION_JSON).content(metaData2.toString()))
|
.contentType(MediaType.APPLICATION_JSON).content(metaData2.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isForbidden());
|
||||||
|
|
||||||
// verify that the number of meta data entries has not changed
|
// verify that the number of meta data entries has not changed
|
||||||
// (we cannot use the PAGE constant here as it tries to sort by ID)
|
// (we cannot use the PAGE constant here as it tries to sort by ID)
|
||||||
assertThat(softwareModuleManagement
|
assertThat(softwareModuleManagement
|
||||||
.findMetaDataBySoftwareModuleId(PageRequest.of(0, Integer.MAX_VALUE), sm.getId()).getTotalElements())
|
.findMetaDataBySoftwareModuleId(PageRequest.of(0, Integer.MAX_VALUE), sm.getId()).getTotalElements())
|
||||||
.isEqualTo(metaData1.length());
|
.isEqualTo(metaData1.length());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description(" Get a paged list of meta data for a software module.")
|
|
||||||
public void getMetadata() throws Exception {
|
|
||||||
final int totalMetadata = 4;
|
|
||||||
final String knownKeyPrefix = "knownKey";
|
|
||||||
final String knownValuePrefix = "knownValue";
|
|
||||||
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
|
||||||
|
|
||||||
for (int index = 0; index < totalMetadata; index++) {
|
|
||||||
softwareModuleManagement.createMetaData(entityFactory.softwareModuleMetadata().create(module.getId())
|
|
||||||
.key(knownKeyPrefix + index).value(knownValuePrefix + index));
|
|
||||||
}
|
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata",
|
|
||||||
module.getId())).andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description(" Get a paged list of meta data for a software module with defined page size and sorting by name descending and key starting with 'known'.")
|
|
||||||
public void getMetadataWithParameters() throws Exception {
|
|
||||||
final int totalMetadata = 4;
|
|
||||||
final String knownKeyPrefix = "knownKey";
|
|
||||||
final String knownValuePrefix = "knownValue";
|
|
||||||
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
|
||||||
|
|
||||||
for (int index = 0; index < totalMetadata; index++) {
|
|
||||||
softwareModuleManagement.createMetaData(entityFactory.softwareModuleMetadata().create(module.getId())
|
|
||||||
.key(knownKeyPrefix + index).value(knownValuePrefix + index));
|
|
||||||
}
|
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata",
|
|
||||||
module.getId()).param("offset", "1").param("limit", "2").param("sort", "key:DESC").param("q",
|
|
||||||
"key==known*"))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(content().contentType(MediaTypes.HAL_JSON));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description(" Get a single meta data value for a meta data key." )
|
|
||||||
public void getMetadataValue() throws Exception {
|
|
||||||
|
|
||||||
// prepare and create metadata
|
|
||||||
final String knownKey = "knownKey";
|
|
||||||
final String knownValue = "knownValue";
|
|
||||||
final SoftwareModule module = testdataFactory.createDistributionSet("one").findFirstModuleByType(osType).get();
|
|
||||||
softwareModuleManagement.createMetaData(
|
|
||||||
entityFactory.softwareModuleMetadata().create(module.getId()).key(knownKey).value(knownValue));
|
|
||||||
|
|
||||||
mvc.perform(
|
|
||||||
get(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/metadata/{metadataKey}",
|
|
||||||
module.getId(), knownKey))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(status().isOk());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies the successful update of metadata based on given key.")
|
@Description("Verifies the successful update of metadata based on given key.")
|
||||||
void updateMetadataKey() throws Exception {
|
void updateMetadataKey() throws Exception {
|
||||||
@@ -1485,6 +1443,50 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
.andExpect(jsonPath("content[0].value", equalTo("knownValue1")));
|
.andExpect(jsonPath("content[0].value", equalTo("knownValue1")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static byte[] randomBytes(final int len) {
|
||||||
|
return RandomStringUtils.randomAlphanumeric(len).getBytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertArtifact(final SoftwareModule sm, final byte[] random) throws IOException {
|
||||||
|
// check result in db...
|
||||||
|
// repo
|
||||||
|
assertThat(artifactManagement.count()).as("Wrong artifact size").isEqualTo(1);
|
||||||
|
|
||||||
|
// binary
|
||||||
|
try (final InputStream fileInputStream = artifactManagement
|
||||||
|
.loadArtifactBinary(softwareModuleManagement.get(sm.getId()).get().getArtifacts().get(0).getSha1Hash(),
|
||||||
|
sm.getId(), sm.isEncrypted())
|
||||||
|
.get().getFileInputStream()) {
|
||||||
|
assertTrue(IOUtils.contentEquals(new ByteArrayInputStream(random), fileInputStream),
|
||||||
|
"Wrong artifact content");
|
||||||
|
}
|
||||||
|
|
||||||
|
// hashes
|
||||||
|
assertThat(artifactManagement.getByFilename("origFilename").get().getSha1Hash()).as("Wrong sha1 hash")
|
||||||
|
.isEqualTo(HashGeneratorUtils.generateSHA1(random));
|
||||||
|
|
||||||
|
assertThat(artifactManagement.getByFilename("origFilename").get().getMd5Hash()).as("Wrong md5 hash")
|
||||||
|
.isEqualTo(HashGeneratorUtils.generateMD5(random));
|
||||||
|
|
||||||
|
assertThat(artifactManagement.getByFilename("origFilename").get().getSha256Hash()).as("Wrong sha256 hash")
|
||||||
|
.isEqualTo(HashGeneratorUtils.generateSHA256(random));
|
||||||
|
|
||||||
|
// metadata
|
||||||
|
assertThat(softwareModuleManagement.get(sm.getId()).get().getArtifacts().get(0).getFilename())
|
||||||
|
.as("wrong metadata of the filename").isEqualTo("origFilename");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void downloadAndVerify(final SoftwareModule sm, final byte[] random, final Artifact artifact)
|
||||||
|
throws Exception {
|
||||||
|
final MvcResult result = mvc
|
||||||
|
.perform(
|
||||||
|
get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}/download", sm.getId(), artifact.getId()))
|
||||||
|
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_OCTET_STREAM))
|
||||||
|
.andExpect(header().string("ETag", artifact.getSha1Hash())).andReturn();
|
||||||
|
|
||||||
|
assertTrue(Arrays.equals(result.getResponse().getContentAsByteArray(), random), "Wrong response content");
|
||||||
|
}
|
||||||
|
|
||||||
private void createSoftwareModulesAlphabetical(final int amount) {
|
private void createSoftwareModulesAlphabetical(final int amount) {
|
||||||
char character = 'a';
|
char character = 'a';
|
||||||
for (int index = 0; index < amount; index++) {
|
for (int index = 0; index < amount; index++) {
|
||||||
@@ -1495,8 +1497,4 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] randomBytes(final int len) {
|
|
||||||
return RandomStringUtils.randomAlphanumeric(len).getBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
import org.eclipse.hawkbit.repository.model.NamedEntity;
|
import org.eclipse.hawkbit.repository.model.NamedEntity;
|
||||||
@@ -38,15 +42,8 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
|
|
||||||
import com.jayway.jsonpath.JsonPath;
|
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for {@link MgmtSoftwareModuleTypeResource}.
|
* Test for {@link MgmtSoftwareModuleTypeResource}.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Software Module Type Resource")
|
@Story("Software Module Type Resource")
|
||||||
@@ -109,14 +106,6 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
|
|
||||||
private SoftwareModuleType createTestType() {
|
|
||||||
SoftwareModuleType testType = softwareModuleTypeManagement.create(entityFactory.softwareModuleType().create()
|
|
||||||
.key("test123").name("TestName123").description("Desc123").colour("colour").maxAssignments(5));
|
|
||||||
testType = softwareModuleTypeManagement
|
|
||||||
.update(entityFactory.softwareModuleType().update(testType.getId()).description("Desc1234"));
|
|
||||||
return testType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
@WithUser(principal = "uploadTester", allSpPermissions = true)
|
||||||
@Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests with sorting by MAXASSIGNMENTS field.")
|
@Description("Checks the correct behaviour of /rest/v1/softwaremoduletypes GET requests with sorting by MAXASSIGNMENTS field.")
|
||||||
@@ -125,7 +114,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
// descending
|
// descending
|
||||||
mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:DESC"))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:DESC"))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[1].id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.content.[1].id", equalTo(testType.getId().intValue())))
|
||||||
@@ -142,7 +131,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
// ascending
|
// ascending
|
||||||
mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get("/rest/v1/softwaremoduletypes").accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:ASC"))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "MAXASSIGNMENTS:ASC"))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[2].id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.content.[2].id", equalTo(testType.getId().intValue())))
|
||||||
@@ -167,14 +156,14 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
.build());
|
.build());
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
||||||
|
|
||||||
types.clear();
|
types.clear();
|
||||||
types.add(entityFactory.softwareModuleType().create().key("test0").name("TestName0").maxAssignments(0).build());
|
types.add(entityFactory.softwareModuleType().create().key("test0").name("TestName0").maxAssignments(0).build());
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,13 +205,13 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[0]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created1.getId());
|
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created1.getId());
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[1]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created2.getId());
|
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created2.getId());
|
||||||
assertThat(
|
assertThat(
|
||||||
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
JsonPath.compile("[2]_links.self.href").read(mvcResult.getResponse().getContentAsString()).toString())
|
||||||
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created3.getId());
|
.isEqualTo("http://localhost/rest/v1/softwaremoduletypes/" + created3.getId());
|
||||||
|
|
||||||
assertThat(softwareModuleTypeManagement.count()).isEqualTo(6);
|
assertThat(softwareModuleTypeManagement.count()).isEqualTo(6);
|
||||||
}
|
}
|
||||||
@@ -299,7 +288,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
.put("colour", "updatedColour").put("name", "nameShouldNotBeChanged").toString();
|
.put("colour", "updatedColour").put("name", "nameShouldNotBeChanged").toString();
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/softwaremoduletypes/{smId}", testType.getId()).content(body)
|
mvc.perform(put("/rest/v1/softwaremoduletypes/{smId}", testType.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.description", equalTo("foobardesc")))
|
.andExpect(jsonPath("$.description", equalTo("foobardesc")))
|
||||||
.andExpect(jsonPath("$.colour", equalTo("updatedColour")))
|
.andExpect(jsonPath("$.colour", equalTo("updatedColour")))
|
||||||
@@ -315,7 +304,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
||||||
|
|
||||||
mvc.perform(put("/rest/v1/softwaremoduletypes/{smtId}", testType.getId()).content(body)
|
mvc.perform(put("/rest/v1/softwaremoduletypes/{smtId}", testType.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.lastModifiedAt", equalTo(testType.getLastModifiedAt())))
|
.andExpect(jsonPath("$.lastModifiedAt", equalTo(testType.getLastModifiedAt())))
|
||||||
.andExpect(jsonPath("$.deleted", equalTo(false)));
|
.andExpect(jsonPath("$.deleted", equalTo(false)));
|
||||||
@@ -342,7 +331,7 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
final int types = 3;
|
final int types = 3;
|
||||||
final int limitSize = 1;
|
final int limitSize = 1;
|
||||||
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -356,8 +345,8 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
final int offsetParam = 2;
|
final int offsetParam = 2;
|
||||||
final int expectedSize = types - offsetParam;
|
final int expectedSize = types - offsetParam;
|
||||||
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.SOFTWAREMODULETYPE_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(types)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(types)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -384,24 +373,24 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
// bad request - bad content
|
// bad request - bad content
|
||||||
mvc.perform(post("/rest/v1/softwaremoduletypes").content("sdfjsdlkjfskdjf".getBytes())
|
mvc.perform(post("/rest/v1/softwaremoduletypes").content("sdfjsdlkjfskdjf".getBytes())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
mvc.perform(post("/rest/v1/softwaremoduletypes").content(
|
mvc.perform(post("/rest/v1/softwaremoduletypes").content(
|
||||||
"[{\"description\":\"Desc123\",\"id\":9223372036854775807,\"key\":\"test123\",\"maxAssignments\":5}]")
|
"[{\"description\":\"Desc123\",\"id\":9223372036854775807,\"key\":\"test123\",\"maxAssignments\":5}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final SoftwareModuleType toLongName = entityFactory.softwareModuleType().create().key("test123")
|
final SoftwareModuleType toLongName = entityFactory.softwareModuleType().create().key("test123")
|
||||||
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(Arrays.asList(toLongName)))
|
post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(Arrays.asList(toLongName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// unsupported media type
|
// unsupported media type
|
||||||
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
mvc.perform(post("/rest/v1/softwaremoduletypes").content(JsonBuilder.softwareModuleTypes(types))
|
||||||
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnsupportedMediaType());
|
.andExpect(status().isUnsupportedMediaType());
|
||||||
|
|
||||||
// not allowed methods
|
// not allowed methods
|
||||||
@@ -430,6 +419,14 @@ public class MgmtSoftwareModuleTypeResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SoftwareModuleType createTestType() {
|
||||||
|
SoftwareModuleType testType = softwareModuleTypeManagement.create(entityFactory.softwareModuleType().create()
|
||||||
|
.key("test123").name("TestName123").description("Desc123").colour("colour").maxAssignments(5));
|
||||||
|
testType = softwareModuleTypeManagement
|
||||||
|
.update(entityFactory.softwareModuleType().update(testType.getId()).description("Desc1234"));
|
||||||
|
return testType;
|
||||||
|
}
|
||||||
|
|
||||||
private void createSoftwareModulesAlphabetical(final int amount) {
|
private void createSoftwareModulesAlphabetical(final int amount) {
|
||||||
char character = 'a';
|
char character = 'a';
|
||||||
for (int index = 0; index < amount; index++) {
|
for (int index = 0; index < amount; index++) {
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ import java.nio.charset.StandardCharsets;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Step;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.eclipse.hawkbit.exception.SpServerError;
|
import org.eclipse.hawkbit.exception.SpServerError;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType;
|
import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
@@ -49,20 +53,14 @@ import org.junit.jupiter.params.provider.MethodSource;
|
|||||||
import org.junit.jupiter.params.provider.ValueSource;
|
import org.junit.jupiter.params.provider.ValueSource;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Step;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
import org.springframework.web.util.UriUtils;
|
import org.springframework.web.util.UriUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring MVC Tests against the MgmtTargetResource.
|
* Spring MVC Tests against the MgmtTargetResource.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Target Filter Query Resource")
|
@Story("Target Filter Query Resource")
|
||||||
public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiIntegrationTest {
|
public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiIntegrationTest {
|
||||||
|
|
||||||
private static final String JSON_PATH_ROOT = "$";
|
private static final String JSON_PATH_ROOT = "$";
|
||||||
|
|
||||||
@@ -72,19 +70,17 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
private static final String JSON_PATH_FIELD_QUERY = ".query";
|
private static final String JSON_PATH_FIELD_QUERY = ".query";
|
||||||
private static final String JSON_PATH_FIELD_CONFIRMATION_REQUIRED = ".confirmationRequired";
|
private static final String JSON_PATH_FIELD_CONFIRMATION_REQUIRED = ".confirmationRequired";
|
||||||
private static final String JSON_PATH_FIELD_CONTENT = ".content";
|
private static final String JSON_PATH_FIELD_CONTENT = ".content";
|
||||||
|
// target
|
||||||
|
// $.field
|
||||||
|
static final String JSON_PATH_PAGED_LIST_CONTENT = JSON_PATH_ROOT + JSON_PATH_FIELD_CONTENT;
|
||||||
private static final String JSON_PATH_FIELD_SIZE = ".size";
|
private static final String JSON_PATH_FIELD_SIZE = ".size";
|
||||||
|
static final String JSON_PATH_PAGED_LIST_SIZE = JSON_PATH_ROOT + JSON_PATH_FIELD_SIZE;
|
||||||
private static final String JSON_PATH_FIELD_TOTAL = ".total";
|
private static final String JSON_PATH_FIELD_TOTAL = ".total";
|
||||||
|
static final String JSON_PATH_PAGED_LIST_TOTAL = JSON_PATH_ROOT + JSON_PATH_FIELD_TOTAL;
|
||||||
private static final String JSON_PATH_FIELD_AUTO_ASSIGN_DS = ".autoAssignDistributionSet";
|
private static final String JSON_PATH_FIELD_AUTO_ASSIGN_DS = ".autoAssignDistributionSet";
|
||||||
private static final String JSON_PATH_FIELD_AUTO_ASSIGN_ACTION_TYPE = ".autoAssignActionType";
|
private static final String JSON_PATH_FIELD_AUTO_ASSIGN_ACTION_TYPE = ".autoAssignActionType";
|
||||||
private static final String JSON_PATH_FIELD_EXCEPTION_CLASS = ".exceptionClass";
|
private static final String JSON_PATH_FIELD_EXCEPTION_CLASS = ".exceptionClass";
|
||||||
private static final String JSON_PATH_FIELD_ERROR_CODE = ".errorCode";
|
private static final String JSON_PATH_FIELD_ERROR_CODE = ".errorCode";
|
||||||
|
|
||||||
// target
|
|
||||||
// $.field
|
|
||||||
static final String JSON_PATH_PAGED_LIST_CONTENT = JSON_PATH_ROOT + JSON_PATH_FIELD_CONTENT;
|
|
||||||
static final String JSON_PATH_PAGED_LIST_SIZE = JSON_PATH_ROOT + JSON_PATH_FIELD_SIZE;
|
|
||||||
static final String JSON_PATH_PAGED_LIST_TOTAL = JSON_PATH_ROOT + JSON_PATH_FIELD_TOTAL;
|
|
||||||
|
|
||||||
private static final String JSON_PATH_NAME = JSON_PATH_ROOT + JSON_PATH_FIELD_NAME;
|
private static final String JSON_PATH_NAME = JSON_PATH_ROOT + JSON_PATH_FIELD_NAME;
|
||||||
private static final String JSON_PATH_ID = JSON_PATH_ROOT + JSON_PATH_FIELD_ID;
|
private static final String JSON_PATH_ID = JSON_PATH_ROOT + JSON_PATH_FIELD_ID;
|
||||||
private static final String JSON_PATH_QUERY = JSON_PATH_ROOT + JSON_PATH_FIELD_QUERY;
|
private static final String JSON_PATH_QUERY = JSON_PATH_ROOT + JSON_PATH_FIELD_QUERY;
|
||||||
@@ -170,7 +166,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
final TargetFilterQuery tfq = createSingleTargetFilterQuery(filterName, filterQuery);
|
final TargetFilterQuery tfq = createSingleTargetFilterQuery(filterName, filterQuery);
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId()).content(body)
|
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(JSON_PATH_ID, equalTo(tfq.getId().intValue())))
|
.andExpect(jsonPath(JSON_PATH_ID, equalTo(tfq.getId().intValue())))
|
||||||
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(filterQuery2)))
|
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(filterQuery2)))
|
||||||
.andExpect(jsonPath(JSON_PATH_NAME, equalTo(filterName)))
|
.andExpect(jsonPath(JSON_PATH_NAME, equalTo(filterName)))
|
||||||
@@ -194,7 +190,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
.create(entityFactory.targetFilterQuery().create().name(filterName).query(filterQuery));
|
.create(entityFactory.targetFilterQuery().create().name(filterName).query(filterQuery));
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId()).content(body)
|
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId()).content(body)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(JSON_PATH_ID, equalTo(tfq.getId().intValue())))
|
.andExpect(jsonPath(JSON_PATH_ID, equalTo(tfq.getId().intValue())))
|
||||||
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(filterQuery)))
|
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(filterQuery)))
|
||||||
.andExpect(jsonPath(JSON_PATH_NAME, equalTo(filterName2)))
|
.andExpect(jsonPath(JSON_PATH_NAME, equalTo(filterName2)))
|
||||||
@@ -249,7 +245,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
createSingleTargetFilterQuery(idC, testQuery);
|
createSingleTargetFilterQuery(idC, testQuery);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andExpect(status().isOk()).andDo(print())
|
.andExpect(status().isOk()).andDo(print())
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount)))
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount)))
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -266,38 +262,38 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
final DistributionSet set = testdataFactory.createDistributionSet();
|
final DistributionSet set = testdataFactory.createDistributionSet();
|
||||||
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery("a", testQuery);
|
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery("a", testQuery);
|
||||||
final String hrefPrefix = "http://localhost" + MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/"
|
final String hrefPrefix = "http://localhost" + MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/"
|
||||||
+ filterQuery.getId();
|
+ filterQuery.getId();
|
||||||
final String distributionsetHrefPrefix = "http://localhost" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING;
|
final String distributionsetHrefPrefix = "http://localhost" + MgmtRestConstants.DISTRIBUTIONSET_V1_REQUEST_MAPPING;
|
||||||
|
|
||||||
final String dsQuery = "?offset=0&limit=50&q=name==" + set.getName() + ";" + "version==" + set.getVersion();
|
final String dsQuery = "?offset=0&limit=50&q=name==" + set.getName() + ";" + "version==" + set.getVersion();
|
||||||
|
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
||||||
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(print()).andExpect(status().isOk());
|
.andDo(print()).andExpect(status().isOk());
|
||||||
|
|
||||||
final String result = mvc.perform(
|
final String result = mvc.perform(
|
||||||
get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId()))
|
get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId()))
|
||||||
.andExpect(jsonPath("$._links.autoAssignDS.href", equalTo(hrefPrefix + "/autoAssignDS")))
|
.andExpect(jsonPath("$._links.autoAssignDS.href", equalTo(hrefPrefix + "/autoAssignDS")))
|
||||||
.andExpect(jsonPath("$._links.DS.href", startsWith(distributionsetHrefPrefix)))
|
.andExpect(jsonPath("$._links.DS.href", startsWith(distributionsetHrefPrefix)))
|
||||||
.andReturn().getResponse().getContentAsString();
|
.andReturn().getResponse().getContentAsString();
|
||||||
|
|
||||||
final String multipleResult = mvc.perform(
|
final String multipleResult = mvc.perform(
|
||||||
get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "?representation=full"))
|
get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "?representation=full"))
|
||||||
.andExpect(jsonPath("$.content", hasSize(1))).andExpect(jsonPath("$.total", equalTo(1)))
|
.andExpect(jsonPath("$.content", hasSize(1))).andExpect(jsonPath("$.total", equalTo(1)))
|
||||||
.andExpect(jsonPath("$.content[0]._links.DS.href", startsWith(distributionsetHrefPrefix)))
|
.andExpect(jsonPath("$.content[0]._links.DS.href", startsWith(distributionsetHrefPrefix)))
|
||||||
.andReturn().getResponse().getContentAsString();
|
.andReturn().getResponse().getContentAsString();
|
||||||
|
|
||||||
final JSONObject singleJson = new JSONObject(result);
|
final JSONObject singleJson = new JSONObject(result);
|
||||||
final JSONObject multipleJson = new JSONObject(multipleResult);
|
final JSONObject multipleJson = new JSONObject(multipleResult);
|
||||||
|
|
||||||
final String resultDSURI = singleJson.getJSONObject("_links").getJSONObject("DS").getString("href");
|
final String resultDSURI = singleJson.getJSONObject("_links").getJSONObject("DS").getString("href");
|
||||||
final String resultDSURIFromMultipleJson = multipleJson.getJSONArray("content").getJSONObject(0)
|
final String resultDSURIFromMultipleJson = multipleJson.getJSONArray("content").getJSONObject(0)
|
||||||
.getJSONObject("_links").getJSONObject("DS").getString("href");
|
.getJSONObject("_links").getJSONObject("DS").getString("href");
|
||||||
|
|
||||||
Assertions.assertEquals(distributionsetHrefPrefix + dsQuery, UriUtils.decode(resultDSURI, StandardCharsets.UTF_8));
|
Assertions.assertEquals(distributionsetHrefPrefix + dsQuery, UriUtils.decode(resultDSURI, StandardCharsets.UTF_8));
|
||||||
Assertions.assertEquals(distributionsetHrefPrefix + dsQuery,
|
Assertions.assertEquals(distributionsetHrefPrefix + dsQuery,
|
||||||
UriUtils.decode(resultDSURIFromMultipleJson, StandardCharsets.UTF_8));
|
UriUtils.decode(resultDSURIFromMultipleJson, StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -318,8 +314,8 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
createSingleTargetFilterQuery(idE, testQuery);
|
createSingleTargetFilterQuery(idE, testQuery);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING)
|
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(knownTargetAmount)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(knownTargetAmount)))
|
||||||
.andExpect(status().isOk()).andDo(print())
|
.andExpect(status().isOk()).andDo(print())
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount)))
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_TOTAL, equalTo(knownTargetAmount)))
|
||||||
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -413,10 +409,9 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
final DistributionSet set = testdataFactory.createDistributionSet();
|
final DistributionSet set = testdataFactory.createDistributionSet();
|
||||||
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery("1", "controllerId==target*");
|
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery("1", "controllerId==target*");
|
||||||
|
|
||||||
|
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
||||||
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(print()).andExpect(status().isForbidden())
|
.andDo(print()).andExpect(status().isForbidden())
|
||||||
.andExpect(
|
.andExpect(
|
||||||
jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(AssignmentQuotaExceededException.class.getName())))
|
jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
@@ -438,8 +433,8 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
// assign the auto-assign distribution set, this should work
|
// assign the auto-assign distribution set, this should work
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId() + "/autoAssignDS")
|
||||||
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"id\":" + set.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(print()).andExpect(status().isOk());
|
.andDo(print()).andExpect(status().isOk());
|
||||||
implicitLock(set);
|
implicitLock(set);
|
||||||
|
|
||||||
@@ -450,7 +445,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
// update the query of the filter query to trigger a quota hit
|
// update the query of the filter query to trigger a quota hit
|
||||||
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId())
|
mvc.perform(put(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId())
|
||||||
.content("{\"query\":\"controllerId==target*\"}").contentType(MediaType.APPLICATION_JSON))
|
.content("{\"query\":\"controllerId==target*\"}").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(print()).andExpect(status().isForbidden())
|
.andDo(print()).andExpect(status().isForbidden())
|
||||||
.andExpect(
|
.andExpect(
|
||||||
jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(AssignmentQuotaExceededException.class.getName())))
|
jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
@@ -485,145 +480,6 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
verifyAutoAssignmentWithSoftDeletedDs(tfq);
|
verifyAutoAssignmentWithSoftDeletedDs(tfq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
|
||||||
@ValueSource(booleans = { true, false })
|
|
||||||
@Description("Verify the confirmation required flag will be set based on the feature state")
|
|
||||||
void verifyConfirmationStateIfNotProvided(final boolean confirmationFlowActive) throws Exception {
|
|
||||||
final String knownQuery = "name==test05";
|
|
||||||
final String knownName = "filter05";
|
|
||||||
|
|
||||||
if (confirmationFlowActive) {
|
|
||||||
enableConfirmationFlow();
|
|
||||||
}
|
|
||||||
|
|
||||||
final TargetFilterQuery tfq = createSingleTargetFilterQuery(knownName, knownQuery);
|
|
||||||
final DistributionSet set = testdataFactory.createDistributionSet();
|
|
||||||
|
|
||||||
// do not provide something about the confirmation
|
|
||||||
verifyAutoAssignmentByActionType(tfq, set, null, null);
|
|
||||||
|
|
||||||
assertThat(targetFilterQueryManagement.get(tfq.getId())).hasValueSatisfying(filter -> {
|
|
||||||
assertThat(filter.isConfirmationRequired()).isEqualTo(confirmationFlowActive);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Stream<Arguments> confirmationOptions() {
|
|
||||||
return Stream.of(Arguments.of(true, false), Arguments.of(true, true), Arguments.of(false, true),
|
|
||||||
Arguments.of(true, null), Arguments.of(false, null));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithoutActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
|
||||||
final Boolean confirmationRequired) throws Exception {
|
|
||||||
verifyAutoAssignmentByActionType(tfq, set, null, confirmationRequired);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithForcedActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
|
||||||
final Boolean confirmationRequired) throws Exception {
|
|
||||||
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.FORCED, confirmationRequired);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithSoftActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
|
||||||
final Boolean confirmationRequired) throws Exception {
|
|
||||||
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.SOFT, confirmationRequired);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void verifyAutoAssignmentByActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
|
||||||
final MgmtActionType actionType, final Boolean confirmationRequired) throws Exception {
|
|
||||||
final String hrefPrefix = "http://localhost" + MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/"
|
|
||||||
+ tfq.getId();
|
|
||||||
|
|
||||||
final JSONObject jsonObject = new JSONObject();
|
|
||||||
jsonObject.put("id", set.getId());
|
|
||||||
if (actionType != null) {
|
|
||||||
jsonObject.put("type", actionType.getName());
|
|
||||||
}
|
|
||||||
if (confirmationRequired != null) {
|
|
||||||
jsonObject.put("confirmationRequired", confirmationRequired);
|
|
||||||
}
|
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
|
||||||
.content(jsonObject.toString()).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
|
||||||
.andExpect(status().isOk());
|
|
||||||
implicitLock(set);
|
|
||||||
|
|
||||||
final TargetFilterQuery updatedFilterQuery = targetFilterQueryManagement.get(tfq.getId()).get();
|
|
||||||
final MgmtActionType expectedActionType = actionType != null ? actionType : MgmtActionType.FORCED;
|
|
||||||
|
|
||||||
assertThat(updatedFilterQuery.getAutoAssignDistributionSet()).isEqualTo(set);
|
|
||||||
assertThat(updatedFilterQuery.getAutoAssignActionType())
|
|
||||||
.isEqualTo(MgmtRestModelMapper.convertActionType(expectedActionType));
|
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId())).andDo(print())
|
|
||||||
.andExpect(status().isOk()).andExpect(jsonPath(JSON_PATH_NAME, equalTo(tfq.getName())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(tfq.getQuery())))
|
|
||||||
.andExpect(isConfirmationFlowEnabled()
|
|
||||||
? jsonPath(JSON_PATH_CONFIRMATION_REQUIRED,
|
|
||||||
equalTo(confirmationRequired == null || confirmationRequired))
|
|
||||||
: jsonPath(JSON_PATH_CONFIRMATION_REQUIRED).doesNotExist())
|
|
||||||
.andExpect(jsonPath(JSON_PATH_AUTO_ASSIGN_DS, equalTo(set.getId().intValue())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_AUTO_ASSIGN_ACTION_TYPE, equalTo(expectedActionType.getName())))
|
|
||||||
.andExpect(jsonPath("$._links.self.href", equalTo(hrefPrefix)))
|
|
||||||
.andExpect(jsonPath("$._links.autoAssignDS.href", equalTo(hrefPrefix + "/autoAssignDS")));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithTimeForcedActionType(final TargetFilterQuery tfq, final DistributionSet set)
|
|
||||||
throws Exception {
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
|
||||||
.content("{\"id\":" + set.getId() + ", \"type\":\"" + MgmtActionType.TIMEFORCED.getName() + "\"}")
|
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isBadRequest())
|
|
||||||
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS,
|
|
||||||
equalTo(InvalidAutoAssignActionTypeException.class.getName())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_ERROR_CODE,
|
|
||||||
equalTo(SpServerError.SP_AUTO_ASSIGN_ACTION_TYPE_INVALID.getKey())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithDownloadOnlyActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
|
||||||
final Boolean confirmationRequired) throws Exception {
|
|
||||||
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.DOWNLOAD_ONLY, confirmationRequired);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithUnknownActionType(final TargetFilterQuery tfq, final DistributionSet set)
|
|
||||||
throws Exception {
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
|
||||||
.content("{\"id\":" + set.getId() + ", \"type\":\"unknown\"}").contentType(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(print()).andExpect(status().isBadRequest())
|
|
||||||
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(MessageNotReadableException.class.getName())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_REST_BODY_NOT_READABLE.getKey())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithIncompleteDs(final TargetFilterQuery tfq) throws Exception {
|
|
||||||
final DistributionSet incompleteDistributionSet = distributionSetManagement
|
|
||||||
.create(entityFactory.distributionSet().create().name("incomplete").version("1")
|
|
||||||
.type(testdataFactory.findOrCreateDefaultTestDsType()));
|
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
|
||||||
.content("{\"id\":" + incompleteDistributionSet.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(print()).andExpect(status().isBadRequest())
|
|
||||||
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS,
|
|
||||||
equalTo(IncompleteDistributionSetException.class.getName())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_DS_INCOMPLETE.getKey())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Step
|
|
||||||
private void verifyAutoAssignmentWithSoftDeletedDs(final TargetFilterQuery tfq) throws Exception {
|
|
||||||
final DistributionSet softDeletedDs = testdataFactory.createDistributionSet("softDeleted");
|
|
||||||
assignDistributionSet(softDeletedDs, testdataFactory.createTarget("forSoftDeletedDs"));
|
|
||||||
distributionSetManagement.delete(softDeletedDs.getId());
|
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
|
||||||
.content("{\"id\":" + softDeletedDs.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(print()).andExpect(status().isNotFound())
|
|
||||||
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(DeletedException.class.getName())))
|
|
||||||
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_DELETED.getKey())));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Handles the GET request of retrieving a the auto assign distribution set of a target filter query within SP.")
|
@Description("Handles the GET request of retrieving a the auto assign distribution set of a target filter query within SP.")
|
||||||
public void getAssignDS() throws Exception {
|
public void getAssignDS() throws Exception {
|
||||||
@@ -631,7 +487,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
final DistributionSet ds = testdataFactory.createDistributionSet("ds");
|
final DistributionSet ds = testdataFactory.createDistributionSet("ds");
|
||||||
targetFilterQueryManagement
|
targetFilterQueryManagement
|
||||||
.updateAutoAssignDS(entityFactory.targetFilterQuery()
|
.updateAutoAssignDS(entityFactory.targetFilterQuery()
|
||||||
.updateAutoAssign(filterQuery.getId()).ds(ds.getId()));
|
.updateAutoAssign(filterQuery.getId()).ds(ds.getId()));
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
||||||
filterQuery.getId()))
|
filterQuery.getId()))
|
||||||
@@ -653,7 +509,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
|
|
||||||
mvc
|
mvc
|
||||||
.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
||||||
filterQuery.getId()).contentType(MediaType.APPLICATION_JSON).content(autoAssignBody.toString()))
|
filterQuery.getId()).contentType(MediaType.APPLICATION_JSON).content(autoAssignBody.toString()))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
}
|
}
|
||||||
@@ -716,15 +572,15 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
final String valideWeightRequest = new JSONObject().put("id", dsId).put("weight", 45).toString();
|
final String valideWeightRequest = new JSONObject().put("id", dsId).put("weight", 45).toString();
|
||||||
|
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
||||||
filterId).content(valideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
filterId).content(valideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
enableMultiAssignments();
|
enableMultiAssignments();
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
||||||
filterId).content(invalideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
filterId).content(invalideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
||||||
.andExpect(status().isBadRequest())
|
.andExpect(status().isBadRequest())
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.repo.constraintViolation")));
|
.andExpect(jsonPath("$.errorCode", equalTo("hawkbit.server.error.repo.constraintViolation")));
|
||||||
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/{targetFilterQueryId}/autoAssignDS",
|
||||||
filterId).content(valideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
filterId).content(valideWeightRequest).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
final List<TargetFilterQuery> filters = targetFilterQueryManagement.findAll(PAGE).getContent();
|
final List<TargetFilterQuery> filters = targetFilterQueryManagement.findAll(PAGE).getContent();
|
||||||
@@ -732,6 +588,145 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInt
|
|||||||
assertThat(filters.get(0).getAutoAssignWeight().get()).isEqualTo(45);
|
assertThat(filters.get(0).getAutoAssignWeight().get()).isEqualTo(45);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(booleans = { true, false })
|
||||||
|
@Description("Verify the confirmation required flag will be set based on the feature state")
|
||||||
|
void verifyConfirmationStateIfNotProvided(final boolean confirmationFlowActive) throws Exception {
|
||||||
|
final String knownQuery = "name==test05";
|
||||||
|
final String knownName = "filter05";
|
||||||
|
|
||||||
|
if (confirmationFlowActive) {
|
||||||
|
enableConfirmationFlow();
|
||||||
|
}
|
||||||
|
|
||||||
|
final TargetFilterQuery tfq = createSingleTargetFilterQuery(knownName, knownQuery);
|
||||||
|
final DistributionSet set = testdataFactory.createDistributionSet();
|
||||||
|
|
||||||
|
// do not provide something about the confirmation
|
||||||
|
verifyAutoAssignmentByActionType(tfq, set, null, null);
|
||||||
|
|
||||||
|
assertThat(targetFilterQueryManagement.get(tfq.getId())).hasValueSatisfying(filter -> {
|
||||||
|
assertThat(filter.isConfirmationRequired()).isEqualTo(confirmationFlowActive);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stream<Arguments> confirmationOptions() {
|
||||||
|
return Stream.of(Arguments.of(true, false), Arguments.of(true, true), Arguments.of(false, true),
|
||||||
|
Arguments.of(true, null), Arguments.of(false, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithoutActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
||||||
|
final Boolean confirmationRequired) throws Exception {
|
||||||
|
verifyAutoAssignmentByActionType(tfq, set, null, confirmationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithForcedActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
||||||
|
final Boolean confirmationRequired) throws Exception {
|
||||||
|
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.FORCED, confirmationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithSoftActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
||||||
|
final Boolean confirmationRequired) throws Exception {
|
||||||
|
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.SOFT, confirmationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void verifyAutoAssignmentByActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
||||||
|
final MgmtActionType actionType, final Boolean confirmationRequired) throws Exception {
|
||||||
|
final String hrefPrefix = "http://localhost" + MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/"
|
||||||
|
+ tfq.getId();
|
||||||
|
|
||||||
|
final JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("id", set.getId());
|
||||||
|
if (actionType != null) {
|
||||||
|
jsonObject.put("type", actionType.getName());
|
||||||
|
}
|
||||||
|
if (confirmationRequired != null) {
|
||||||
|
jsonObject.put("confirmationRequired", confirmationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
||||||
|
.content(jsonObject.toString()).contentType(MediaType.APPLICATION_JSON)).andDo(print())
|
||||||
|
.andExpect(status().isOk());
|
||||||
|
implicitLock(set);
|
||||||
|
|
||||||
|
final TargetFilterQuery updatedFilterQuery = targetFilterQueryManagement.get(tfq.getId()).get();
|
||||||
|
final MgmtActionType expectedActionType = actionType != null ? actionType : MgmtActionType.FORCED;
|
||||||
|
|
||||||
|
assertThat(updatedFilterQuery.getAutoAssignDistributionSet()).isEqualTo(set);
|
||||||
|
assertThat(updatedFilterQuery.getAutoAssignActionType())
|
||||||
|
.isEqualTo(MgmtRestModelMapper.convertActionType(expectedActionType));
|
||||||
|
|
||||||
|
mvc.perform(get(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId())).andDo(print())
|
||||||
|
.andExpect(status().isOk()).andExpect(jsonPath(JSON_PATH_NAME, equalTo(tfq.getName())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_QUERY, equalTo(tfq.getQuery())))
|
||||||
|
.andExpect(isConfirmationFlowEnabled()
|
||||||
|
? jsonPath(JSON_PATH_CONFIRMATION_REQUIRED,
|
||||||
|
equalTo(confirmationRequired == null || confirmationRequired))
|
||||||
|
: jsonPath(JSON_PATH_CONFIRMATION_REQUIRED).doesNotExist())
|
||||||
|
.andExpect(jsonPath(JSON_PATH_AUTO_ASSIGN_DS, equalTo(set.getId().intValue())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_AUTO_ASSIGN_ACTION_TYPE, equalTo(expectedActionType.getName())))
|
||||||
|
.andExpect(jsonPath("$._links.self.href", equalTo(hrefPrefix)))
|
||||||
|
.andExpect(jsonPath("$._links.autoAssignDS.href", equalTo(hrefPrefix + "/autoAssignDS")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithTimeForcedActionType(final TargetFilterQuery tfq, final DistributionSet set)
|
||||||
|
throws Exception {
|
||||||
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
||||||
|
.content("{\"id\":" + set.getId() + ", \"type\":\"" + MgmtActionType.TIMEFORCED.getName() + "\"}")
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS,
|
||||||
|
equalTo(InvalidAutoAssignActionTypeException.class.getName())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_ERROR_CODE,
|
||||||
|
equalTo(SpServerError.SP_AUTO_ASSIGN_ACTION_TYPE_INVALID.getKey())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithDownloadOnlyActionType(final TargetFilterQuery tfq, final DistributionSet set,
|
||||||
|
final Boolean confirmationRequired) throws Exception {
|
||||||
|
verifyAutoAssignmentByActionType(tfq, set, MgmtActionType.DOWNLOAD_ONLY, confirmationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithUnknownActionType(final TargetFilterQuery tfq, final DistributionSet set)
|
||||||
|
throws Exception {
|
||||||
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
||||||
|
.content("{\"id\":" + set.getId() + ", \"type\":\"unknown\"}").contentType(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(print()).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(MessageNotReadableException.class.getName())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_REST_BODY_NOT_READABLE.getKey())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithIncompleteDs(final TargetFilterQuery tfq) throws Exception {
|
||||||
|
final DistributionSet incompleteDistributionSet = distributionSetManagement
|
||||||
|
.create(entityFactory.distributionSet().create().name("incomplete").version("1")
|
||||||
|
.type(testdataFactory.findOrCreateDefaultTestDsType()));
|
||||||
|
|
||||||
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
||||||
|
.content("{\"id\":" + incompleteDistributionSet.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(print()).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS,
|
||||||
|
equalTo(IncompleteDistributionSetException.class.getName())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_DS_INCOMPLETE.getKey())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Step
|
||||||
|
private void verifyAutoAssignmentWithSoftDeletedDs(final TargetFilterQuery tfq) throws Exception {
|
||||||
|
final DistributionSet softDeletedDs = testdataFactory.createDistributionSet("softDeleted");
|
||||||
|
assignDistributionSet(softDeletedDs, testdataFactory.createTarget("forSoftDeletedDs"));
|
||||||
|
distributionSetManagement.delete(softDeletedDs.getId());
|
||||||
|
|
||||||
|
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + tfq.getId() + "/autoAssignDS")
|
||||||
|
.content("{\"id\":" + softDeletedDs.getId() + "}").contentType(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(print()).andExpect(status().isNotFound())
|
||||||
|
.andExpect(jsonPath(JSON_PATH_EXCEPTION_CLASS, equalTo(DeletedException.class.getName())))
|
||||||
|
.andExpect(jsonPath(JSON_PATH_ERROR_CODE, equalTo(SpServerError.SP_DELETED.getKey())));
|
||||||
|
}
|
||||||
|
|
||||||
private TargetFilterQuery createSingleTargetFilterQuery(final String name, final String query) {
|
private TargetFilterQuery createSingleTargetFilterQuery(final String name, final String query) {
|
||||||
return targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(name).query(query));
|
return targetFilterQueryManagement.create(entityFactory.targetFilterQuery().create().name(name).query(query));
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -29,6 +29,9 @@ import java.util.Map;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtTargetTagRestApi;
|
||||||
import org.eclipse.hawkbit.repository.event.remote.TargetTagDeletedEvent;
|
import org.eclipse.hawkbit.repository.event.remote.TargetTagDeletedEvent;
|
||||||
@@ -52,19 +55,15 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.ResultActions;
|
import org.springframework.test.web.servlet.ResultActions;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring MVC Tests against the MgmtTargetTagResource.
|
* Spring MVC Tests against the MgmtTargetTagResource.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Target Tag Resource")
|
@Story("Target Tag Resource")
|
||||||
public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationTest {
|
public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationTest {
|
||||||
|
|
||||||
private static final String TARGETTAGS_ROOT = "http://localhost" + MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/";
|
private static final String TARGETTAGS_ROOT = "http://localhost" + MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/";
|
||||||
|
private static final Random RND = new Random();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verfies that a paged result list of target tags reflects the content on the repository side.")
|
@Description("Verfies that a paged result list of target tags reflects the content on the repository side.")
|
||||||
@@ -114,15 +113,15 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
// pass here q directly as a pure string because .queryParam method delimiters the parameters in q with ,
|
// pass here q directly as a pure string because .queryParam method delimiters the parameters in q with ,
|
||||||
// which is logical OR, we want AND here
|
// which is logical OR, we want AND here
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING +
|
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING +
|
||||||
"?" + MgmtRestConstants.REQUEST_PARAMETER_SEARCH + "=colour==" + tag2.getColour())
|
"?" + MgmtRestConstants.REQUEST_PARAMETER_SEARCH + "=colour==" + tag2.getColour())
|
||||||
.accept(MediaType.APPLICATION_JSON))
|
.accept(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyTagMatcherOnPagedResult(tag2))
|
.andExpect(applyTagMatcherOnPagedResult(tag2))
|
||||||
.andExpect(applySelfLinkMatcherOnPagedResult(tag2, TARGETTAGS_ROOT + tag2.getId()))
|
.andExpect(applySelfLinkMatcherOnPagedResult(tag2, TARGETTAGS_ROOT + tag2.getId()))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(1)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -133,7 +132,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
final TargetTag assigned = tags.get(0);
|
final TargetTag assigned = tags.get(0);
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + assigned.getId())
|
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + assigned.getId())
|
||||||
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(applyTagMatcherOnSingleResult(assigned))
|
.andExpect(applyTagMatcherOnSingleResult(assigned))
|
||||||
.andExpect(applySelfLinkMatcherOnSingleResult(TARGETTAGS_ROOT + assigned.getId()))
|
.andExpect(applySelfLinkMatcherOnSingleResult(TARGETTAGS_ROOT + assigned.getId()))
|
||||||
@@ -239,7 +238,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
targetManagement.assignTag(targets.stream().map(Target::getControllerId).collect(Collectors.toList()), tag.getId());
|
targetManagement.assignTag(targets.stream().map(Target::getControllerId).collect(Collectors.toList()), tag.getId());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(limitSize)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(targetsAssigned)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(targetsAssigned)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limitSize)))
|
||||||
@@ -260,13 +259,14 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
targetManagement.assignTag(targets.stream().map(Target::getControllerId).collect(Collectors.toList()), tag.getId());
|
targetManagement.assignTag(targets.stream().map(Target::getControllerId).collect(Collectors.toList()), tag.getId());
|
||||||
|
|
||||||
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
mvc.perform(get(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offsetParam))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(targetsAssigned)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(targetsAssigned)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(targetsAssigned)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(targetsAssigned)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(expectedSize)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
@Description("Verifies that tag assignments done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@@ -295,7 +295,8 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<Target> targets = testdataFactory.createTargets(2);
|
final List<Target> targets = testdataFactory.createTargets(2);
|
||||||
final Target assigned0 = targets.get(0);
|
final Target assigned0 = targets.get(0);
|
||||||
final Target assigned1 = targets.get(1);;
|
final Target assigned1 = targets.get(1);
|
||||||
|
;
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
mvc.perform(put(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId() + "/assigned")
|
||||||
.content(JsonBuilder.toArray(Arrays.asList(assigned0.getControllerId(), assigned1.getControllerId())))
|
.content(JsonBuilder.toArray(Arrays.asList(assigned0.getControllerId(), assigned1.getControllerId())))
|
||||||
@@ -307,12 +308,11 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
.containsOnly(assigned0.getControllerId(), assigned1.getControllerId());
|
.containsOnly(assigned0.getControllerId(), assigned1.getControllerId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Random RND = new Random();
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies that tag assignments (multi targets) done through tag API command are correctly stored in the repository.")
|
@Description("Verifies that tag assignments (multi targets) done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2)})
|
@Expect(type = TargetCreatedEvent.class, count = 2) })
|
||||||
public void assignTargetsNotFound() throws Exception {
|
public void assignTargetsNotFound() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -352,7 +352,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2),
|
@Expect(type = TargetCreatedEvent.class, count = 2),
|
||||||
@Expect(type = TargetUpdatedEvent.class, count = 2)})
|
@Expect(type = TargetUpdatedEvent.class, count = 2) })
|
||||||
public void assignTargetsNotFoundTagAndFail() throws Exception {
|
public void assignTargetsNotFoundTagAndFail() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -394,7 +394,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2),
|
@Expect(type = TargetCreatedEvent.class, count = 2),
|
||||||
@Expect(type = TargetUpdatedEvent.class, count = 2)})
|
@Expect(type = TargetUpdatedEvent.class, count = 2) })
|
||||||
public void assignTargetsNotFoundTagAndSuccess() throws Exception {
|
public void assignTargetsNotFoundTagAndSuccess() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -475,7 +475,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2),
|
@Expect(type = TargetCreatedEvent.class, count = 2),
|
||||||
@Expect(type = TargetUpdatedEvent.class, count = 2)})
|
@Expect(type = TargetUpdatedEvent.class, count = 2) })
|
||||||
public void unassignTargetsNotFound() throws Exception {
|
public void unassignTargetsNotFound() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -518,7 +518,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2),
|
@Expect(type = TargetCreatedEvent.class, count = 2),
|
||||||
@Expect(type = TargetUpdatedEvent.class, count = 4)})
|
@Expect(type = TargetUpdatedEvent.class, count = 4) })
|
||||||
public void unassignTargetsNotFoundUntagAndFail() throws Exception {
|
public void unassignTargetsNotFoundUntagAndFail() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -561,7 +561,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
@ExpectEvents({
|
@ExpectEvents({
|
||||||
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@Expect(type = TargetCreatedEvent.class, count = 2),
|
@Expect(type = TargetCreatedEvent.class, count = 2),
|
||||||
@Expect(type = TargetUpdatedEvent.class, count = 4)})
|
@Expect(type = TargetUpdatedEvent.class, count = 4) })
|
||||||
public void unassignTargetsNotFoundUntagAndSuccess() throws Exception {
|
public void unassignTargetsNotFoundUntagAndSuccess() throws Exception {
|
||||||
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
final TargetTag tag = testdataFactory.createTargetTags(1, "").get(0);
|
||||||
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
final List<String> targets = testdataFactory.createTargets(2).stream().map(Target::getControllerId).toList();
|
||||||
@@ -620,17 +620,6 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
assertThat(targetManagement.findByTag(PAGE, tag.getId())).isEmpty();
|
assertThat(targetManagement.findByTag(PAGE, tag.getId())).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ResultActions toggle(final TargetTag tag, final List<Target> targets) throws Exception {
|
|
||||||
return mvc
|
|
||||||
.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId()
|
|
||||||
+ "/assigned/toggleTagAssignment")
|
|
||||||
.content(controllerIdsOld(
|
|
||||||
targets.stream().map(Target::getControllerId).collect(Collectors.toList())))
|
|
||||||
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
|
||||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verfies that tag assignments done through tag API command are correctly stored in the repository.")
|
@Description("Verfies that tag assignments done through tag API command are correctly stored in the repository.")
|
||||||
@ExpectEvents({ @Expect(type = TargetTagCreatedEvent.class, count = 1),
|
@ExpectEvents({ @Expect(type = TargetTagCreatedEvent.class, count = 1),
|
||||||
@@ -656,6 +645,7 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
result.andExpect(applyTargetEntityMatcherOnArrayResult(updated.get(0)))
|
result.andExpect(applyTargetEntityMatcherOnArrayResult(updated.get(0)))
|
||||||
.andExpect(applyTargetEntityMatcherOnArrayResult(updated.get(1)));
|
.andExpect(applyTargetEntityMatcherOnArrayResult(updated.get(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String controllerIdsOld(final Collection<String> ids) throws JSONException {
|
private static String controllerIdsOld(final Collection<String> ids) throws JSONException {
|
||||||
final JSONArray list = new JSONArray();
|
final JSONArray list = new JSONArray();
|
||||||
for (final String smID : ids) {
|
for (final String smID : ids) {
|
||||||
@@ -664,4 +654,15 @@ public class MgmtTargetTagResourceTest extends AbstractManagementApiIntegrationT
|
|||||||
|
|
||||||
return list.toString();
|
return list.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ResultActions toggle(final TargetTag tag, final List<Target> targets) throws Exception {
|
||||||
|
return mvc
|
||||||
|
.perform(post(MgmtRestConstants.TARGET_TAG_V1_REQUEST_MAPPING + "/" + tag.getId()
|
||||||
|
+ "/assigned/toggleTagAssignment")
|
||||||
|
.content(controllerIdsOld(
|
||||||
|
targets.stream().map(Target::getControllerId).collect(Collectors.toList())))
|
||||||
|
.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,21 @@
|
|||||||
*/
|
*/
|
||||||
package org.eclipse.hawkbit.mgmt.rest.resource;
|
package org.eclipse.hawkbit.mgmt.rest.resource;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
|
import static org.hamcrest.Matchers.hasToString;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.hamcrest.Matchers.startsWith;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -20,7 +35,6 @@ import io.qameta.allure.Feature;
|
|||||||
import io.qameta.allure.Step;
|
import io.qameta.allure.Step;
|
||||||
import io.qameta.allure.Story;
|
import io.qameta.allure.Story;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.assertj.core.util.Lists;
|
|
||||||
import org.eclipse.hawkbit.exception.SpServerError;
|
import org.eclipse.hawkbit.exception.SpServerError;
|
||||||
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
@@ -38,24 +52,8 @@ import org.springframework.http.MediaType;
|
|||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
import org.springframework.test.web.servlet.ResultActions;
|
import org.springframework.test.web.servlet.ResultActions;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
import static org.hamcrest.CoreMatchers.equalTo;
|
|
||||||
import static org.hamcrest.Matchers.contains;
|
|
||||||
import static org.hamcrest.Matchers.hasSize;
|
|
||||||
import static org.hamcrest.Matchers.hasToString;
|
|
||||||
import static org.hamcrest.Matchers.is;
|
|
||||||
import static org.hamcrest.Matchers.startsWith;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring MVC Tests against the MgmtTargetTypeResource.
|
* Spring MVC Tests against the MgmtTargetTypeResource.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Target Type Resource")
|
@Story("Target Type Resource")
|
||||||
@@ -70,7 +68,6 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
private final static String TEST_USER = "targetTypeTester";
|
private final static String TEST_USER = "targetTypeTester";
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUser(principal = "targetTypeTester", allSpPermissions = true, removeFromAllPermission = { SpPermission.READ_TARGET })
|
@WithUser(principal = "targetTypeTester", allSpPermissions = true, removeFromAllPermission = { SpPermission.READ_TARGET })
|
||||||
@Description("GET targettypes returns Forbidden when permission is missing")
|
@Description("GET targettypes returns Forbidden when permission is missing")
|
||||||
@@ -169,7 +166,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
// descending
|
// descending
|
||||||
mvc.perform(get(TARGETTYPES_ENDPOINT).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get(TARGETTYPES_ENDPOINT).accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "name:DESC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "name:DESC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[0].id", equalTo(testTypeC.getId().intValue())))
|
.andExpect(jsonPath("$.content.[0].id", equalTo(testTypeC.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.content.[0].name", equalTo(typeNameC)))
|
.andExpect(jsonPath("$.content.[0].name", equalTo(typeNameC)))
|
||||||
@@ -190,7 +187,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
// ascending
|
// ascending
|
||||||
mvc.perform(get(TARGETTYPES_ENDPOINT).accept(MediaType.APPLICATION_JSON)
|
mvc.perform(get(TARGETTYPES_ENDPOINT).accept(MediaType.APPLICATION_JSON)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "name:ASC")).andDo(MockMvcResultPrinter.print())
|
.param(MgmtRestConstants.REQUEST_PARAMETER_SORTING, "name:ASC")).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
.andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
.andExpect(jsonPath("$.content.[0].id", equalTo(testTypeA.getId().intValue())))
|
.andExpect(jsonPath("$.content.[0].id", equalTo(testTypeA.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.content.[0].name", equalTo(typeNameA)))
|
.andExpect(jsonPath("$.content.[0].name", equalTo(typeNameA)))
|
||||||
@@ -221,7 +218,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
createTestTargetTypesInDB(typePrefix, count);
|
createTestTargetTypesInDB(typePrefix, count);
|
||||||
|
|
||||||
mvc.perform(get(TARGETTYPES_ENDPOINT).param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT,
|
mvc.perform(get(TARGETTYPES_ENDPOINT).param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT,
|
||||||
String.valueOf(limit))).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
String.valueOf(limit))).andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(count)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(count)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limit)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(limit)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limit)));
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_CONTENT, hasSize(limit)));
|
||||||
@@ -238,8 +235,8 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
createTestTargetTypesInDB(typePrefix, count);
|
createTestTargetTypesInDB(typePrefix, count);
|
||||||
|
|
||||||
mvc.perform(get(TARGETTYPES_ENDPOINT)
|
mvc.perform(get(TARGETTYPES_ENDPOINT)
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offset))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_OFFSET, String.valueOf(offset))
|
||||||
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(count)))
|
.param(MgmtRestConstants.REQUEST_PARAMETER_PAGING_LIMIT, String.valueOf(count)))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(count)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_TOTAL, equalTo(count)))
|
||||||
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
.andExpect(jsonPath(MgmtTargetResourceTest.JSON_PATH_PAGED_LIST_SIZE, equalTo(expectedSize)))
|
||||||
@@ -256,7 +253,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
.put("name", "TestTypePUTupdated").put("colour", "#ffffff").toString();
|
.put("name", "TestTypePUTupdated").put("colour", "#ffffff").toString();
|
||||||
|
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
put(TARGETTYPE_SINGLE_ENDPOINT, testType.getId()).content(body).contentType(MediaType.APPLICATION_JSON))
|
put(TARGETTYPE_SINGLE_ENDPOINT, testType.getId()).content(body).contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.description", equalTo("updated description")))
|
.andExpect(jsonPath("$.description", equalTo("updated description")))
|
||||||
@@ -307,7 +304,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
assertThat(testType.getOptLockRevision()).isEqualTo(1);
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
||||||
.content("[{\"id\":" + standardDsType.getId() + "}]").contentType(MediaType.APPLICATION_JSON))
|
.content("[{\"id\":" + standardDsType.getId() + "}]").contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk());
|
||||||
|
|
||||||
testType = targetTypeManagement.get(testType.getId()).get();
|
testType = targetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -341,7 +338,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
final TargetType testType = createTestTargetTypeInDB(typeName);
|
final TargetType testType = createTestTargetTypeInDB(typeName);
|
||||||
|
|
||||||
mvc.perform(get(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), standardDsType.getId())
|
mvc.perform(get(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), standardDsType.getId())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isMethodNotAllowed());
|
.andExpect(status().isMethodNotAllowed());
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -354,7 +351,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
TargetType testType = createTestTargetTypeInDB(typeName, Collections.singletonList(standardDsType));
|
TargetType testType = createTestTargetTypeInDB(typeName, Collections.singletonList(standardDsType));
|
||||||
|
|
||||||
mvc.perform(delete(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), standardDsType.getId())
|
mvc.perform(delete(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), standardDsType.getId())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
testType = targetTypeManagement.get(testType.getId()).get();
|
testType = targetTypeManagement.get(testType.getId()).get();
|
||||||
@@ -435,7 +432,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
final String body = new JSONObject().put("id", testType.getId()).put("deleted", true).toString();
|
||||||
|
|
||||||
mvc.perform(
|
mvc.perform(
|
||||||
put(TARGETTYPE_SINGLE_ENDPOINT, testType.getId()).content(body).contentType(MediaType.APPLICATION_JSON))
|
put(TARGETTYPE_SINGLE_ENDPOINT, testType.getId()).content(body).contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
.andExpect(jsonPath("$.id", equalTo(testType.getId().intValue())))
|
||||||
.andExpect(jsonPath("$.deleted", equalTo(false))); // don't delete with update
|
.andExpect(jsonPath("$.deleted", equalTo(false))); // don't delete with update
|
||||||
@@ -460,7 +457,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
Collections.singletonList(standardDsType));
|
Collections.singletonList(standardDsType));
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPES_ENDPOINT).content(JsonBuilder.targetTypes(Collections.singletonList(testNewType)))
|
mvc.perform(post(TARGETTYPES_ENDPOINT).content(JsonBuilder.targetTypes(Collections.singletonList(testNewType)))
|
||||||
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isUnsupportedMediaType());
|
.andExpect(status().isUnsupportedMediaType());
|
||||||
|
|
||||||
// bad request - no content
|
// bad request - no content
|
||||||
@@ -469,18 +466,18 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
// bad request - bad content
|
// bad request - bad content
|
||||||
mvc.perform(post(TARGETTYPES_ENDPOINT).content("sdfjsdlkjfskdjf".getBytes())
|
mvc.perform(post(TARGETTYPES_ENDPOINT).content("sdfjsdlkjfskdjf".getBytes())
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// Missing mandatory field name
|
// Missing mandatory field name
|
||||||
mvc.perform(post(TARGETTYPES_ENDPOINT).content("[{\"description\":\"Desc123\"}]")
|
mvc.perform(post(TARGETTYPES_ENDPOINT).content("[{\"description\":\"Desc123\"}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
final TargetType tooLongName = entityFactory.targetType().create()
|
final TargetType tooLongName = entityFactory.targetType().create()
|
||||||
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
.name(RandomStringUtils.randomAlphanumeric(NamedEntity.NAME_MAX_SIZE + 1)).build();
|
||||||
mvc.perform(post(TARGETTYPES_ENDPOINT).content(JsonBuilder.targetTypes(Collections.singletonList(tooLongName)))
|
mvc.perform(post(TARGETTYPES_ENDPOINT).content(JsonBuilder.targetTypes(Collections.singletonList(tooLongName)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
// ds types
|
// ds types
|
||||||
@@ -491,11 +488,11 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isNotFound());
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId()).content("{\"id\":1}")
|
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId()).content("{\"id\":1}")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId()).content("[{\"id\":44456}]")
|
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId()).content("[{\"id\":44456}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isNotFound());
|
.andExpect(status().isNotFound());
|
||||||
|
|
||||||
// not allowed methods
|
// not allowed methods
|
||||||
@@ -515,7 +512,7 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
.andDo(MockMvcResultPrinter.print()).andExpect(status().isMethodNotAllowed());
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), 565765)
|
mvc.perform(post(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), 565765)
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isMethodNotAllowed());
|
.andExpect(status().isMethodNotAllowed());
|
||||||
|
|
||||||
mvc.perform(get(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), 565765))
|
mvc.perform(get(TARGETTYPE_DSTYPE_SINGLE_ENDPOINT, testType.getId(), 565765))
|
||||||
@@ -553,13 +550,13 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
|
|
||||||
// verify quota enforcement for distribution set types
|
// verify quota enforcement for distribution set types
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
||||||
.content(JsonBuilder.ids(dsTypeIds.subList(0, dsTypeIds.size() - 1)))
|
.content(JsonBuilder.ids(dsTypeIds.subList(0, dsTypeIds.size() - 1)))
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
mvc.perform(post(TARGETTYPE_DSTYPES_ENDPOINT, testType.getId())
|
||||||
.content("[{\"id\":" + dsTypeIds.get(dsTypeIds.size() - 1) + "}]")
|
.content("[{\"id\":" + dsTypeIds.get(dsTypeIds.size() - 1) + "}]")
|
||||||
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden())
|
.andExpect(status().isForbidden())
|
||||||
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
.andExpect(jsonPath("$.exceptionClass", equalTo(AssignmentQuotaExceededException.class.getName())))
|
||||||
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
.andExpect(jsonPath("$.errorCode", equalTo(SpServerError.SP_QUOTA_EXCEEDED.getKey())));
|
||||||
@@ -641,8 +638,8 @@ class MgmtTargetTypeResourceTest extends AbstractManagementApiIntegrationTest {
|
|||||||
assertThat(JsonPath.compile("$[ ?(@.name=='" + name + "') ].id")
|
assertThat(JsonPath.compile("$[ ?(@.name=='" + name + "') ].id")
|
||||||
.read(mvcResult.getResponse().getContentAsString()).toString()).contains(String.valueOf(created.getId()));
|
.read(mvcResult.getResponse().getContentAsString()).toString()).contains(String.valueOf(created.getId()));
|
||||||
assertThat(JsonPath.compile("$[ ?(@.name=='" + name + "') ]._links.self.href")
|
assertThat(JsonPath.compile("$[ ?(@.name=='" + name + "') ]._links.self.href")
|
||||||
.read(mvcResult.getResponse().getContentAsString()).toString()).contains("/"+created.getId());
|
.read(mvcResult.getResponse().getContentAsString()).toString()).contains("/" + created.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
assertThat(targetTypeManagement.count()).isEqualTo(size);
|
assertThat(targetTypeManagement.count()).isEqualTo(size);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import io.qameta.allure.Feature;
|
||||||
|
import io.qameta.allure.Story;
|
||||||
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
import org.eclipse.hawkbit.im.authentication.SpPermission;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValueRequest;
|
import org.eclipse.hawkbit.mgmt.json.model.system.MgmtSystemTenantConfigurationValueRequest;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
||||||
@@ -28,15 +31,10 @@ import org.eclipse.hawkbit.tenancy.configuration.TenantConfigurationProperties;
|
|||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
|
||||||
import io.qameta.allure.Feature;
|
|
||||||
import io.qameta.allure.Story;
|
|
||||||
import org.springframework.test.web.servlet.ResultMatcher;
|
import org.springframework.test.web.servlet.ResultMatcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring MVC Tests against the MgmtTenantManagementResource.
|
* Spring MVC Tests against the MgmtTenantManagementResource.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@Feature("Component Tests - Management API")
|
@Feature("Component Tests - Management API")
|
||||||
@Story("Tenant Management Resource")
|
@Story("Tenant Management Resource")
|
||||||
@@ -64,37 +62,6 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@Description("Handles GET request for receiving all tenant specific configurations depending on read gateway token permissions.")
|
|
||||||
void getTenantConfigurationReadGWToken() throws Exception {
|
|
||||||
SecurityContextSwitch.runAs(SecurityContextSwitch.withUser("tenant_admin", SpPermission.TENANT_CONFIGURATION), () -> {
|
|
||||||
tenantConfigurationManagement.addOrUpdateConfiguration(TenantConfigurationProperties.TenantConfigurationKey.AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_KEY,
|
|
||||||
"123");
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO - should be able to read with TENANT_CONFIGURATION but somehow here the role hierarchy doesn't play
|
|
||||||
// checked in mgmt / update server runtime PreAuthorizeEnabledTest
|
|
||||||
SecurityContextSwitch.runAs(SecurityContextSwitch.withUser("tenant_admin", SpPermission.READ_TENANT_CONFIGURATION, SpPermission.READ_GATEWAY_SEC_TOKEN), () -> {
|
|
||||||
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs"))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andDo(m -> System.out.println("-> 1: " + m.getResponse().getContentAsString()))
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "']").exists())
|
|
||||||
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "'].value", equalTo("123")));
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
SecurityContextSwitch.runAs(SecurityContextSwitch.withUser("tenant_read", SpPermission.READ_TENANT_CONFIGURATION), () -> {
|
|
||||||
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs"))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andDo(m -> System.out.println("-> 2: " + m.getResponse().getContentAsString()))
|
|
||||||
.andExpect(status().isOk())
|
|
||||||
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "']").doesNotExist());
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Handles GET request for receiving a tenant specific configuration.")
|
@Description("Handles GET request for receiving a tenant specific configuration.")
|
||||||
public void getTenantConfiguration() throws Exception {
|
public void getTenantConfiguration() throws Exception {
|
||||||
@@ -110,10 +77,10 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
public void getTenantMetadata() throws Exception {
|
public void getTenantMetadata() throws Exception {
|
||||||
//Test TenantMetadata property
|
//Test TenantMetadata property
|
||||||
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
||||||
DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.value", equalTo(getActualDefaultDsType().intValue())));
|
.andExpect(jsonPath("$.value", equalTo(getActualDefaultDsType().intValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -143,26 +110,19 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
final String json = mapper.writeValueAsString(bodyPut);
|
final String json = mapper.writeValueAsString(bodyPut);
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
||||||
DEFAULT_DISTRIBUTION_SET_TYPE_KEY).content(json)
|
DEFAULT_DISTRIBUTION_SET_TYPE_KEY).content(json)
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
//check if after Rest success, value is really changed in TenantMetadata
|
//check if after Rest success, value is really changed in TenantMetadata
|
||||||
assertEquals(updatedTestDefaultDsType, getActualDefaultDsType(), "Rest endpoint for updating the Default DistributionSetType completed successfully, but the actual value was not changed.");
|
assertEquals(updatedTestDefaultDsType, getActualDefaultDsType(),
|
||||||
}
|
"Rest endpoint for updating the Default DistributionSetType completed successfully, but the actual value was not changed.");
|
||||||
|
|
||||||
private Long createTestDistributionSetType() {
|
|
||||||
DistributionSetType testDefaultDsType = distributionSetTypeManagement.create(entityFactory.distributionSetType().create()
|
|
||||||
.key("test123").name("TestName123").description("TestDefaultDsType"));
|
|
||||||
testDefaultDsType = distributionSetTypeManagement
|
|
||||||
.update(entityFactory.distributionSetType().update(testDefaultDsType.getId()).description("TestDefaultDsType"));
|
|
||||||
return testDefaultDsType.getId();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Update DefaultDistributionSetType Fails if given DistributionSetType ID does not exist.")
|
@Description("Update DefaultDistributionSetType Fails if given DistributionSetType ID does not exist.")
|
||||||
public void putTenantMetadataFails() throws Exception{
|
public void putTenantMetadataFails() throws Exception {
|
||||||
long oldDefaultDsType = getActualDefaultDsType();
|
long oldDefaultDsType = getActualDefaultDsType();
|
||||||
//try an invalid input
|
//try an invalid input
|
||||||
String newDefaultDsType = new JSONObject().put("value", true).toString();
|
String newDefaultDsType = new JSONObject().put("value", true).toString();
|
||||||
@@ -175,15 +135,6 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
assertDefaultDsTypeUpdateBadRequestFails(newDefaultDsType, oldDefaultDsType, status().isNotFound());
|
assertDefaultDsTypeUpdateBadRequestFails(newDefaultDsType, oldDefaultDsType, status().isNotFound());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertDefaultDsTypeUpdateBadRequestFails(String newDefaultDsType, long oldDefaultDsType, ResultMatcher resultMatchers) throws Exception {
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
|
||||||
DEFAULT_DISTRIBUTION_SET_TYPE_KEY).content(newDefaultDsType)
|
|
||||||
.contentType(MediaType.APPLICATION_JSON))
|
|
||||||
.andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(resultMatchers);
|
|
||||||
assertEquals(oldDefaultDsType, getActualDefaultDsType(), "Rest endpoint for updating DefaultDistributionType failed, but actual value changed unexpectedly.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("The 'multi.assignments.enabled' property must not be changed to false.")
|
@Description("The 'multi.assignments.enabled' property must not be changed to false.")
|
||||||
public void deactivateMultiAssignment() throws Exception {
|
public void deactivateMultiAssignment() throws Exception {
|
||||||
@@ -191,11 +142,11 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
final String bodyDeactivate = new JSONObject().put("value", false).toString();
|
final String bodyDeactivate = new JSONObject().put("value", false).toString();
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
||||||
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
||||||
.content(bodyDeactivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(bodyDeactivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden());
|
.andExpect(status().isForbidden());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,11 +157,12 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
// some TenantConfiguration are not valid,
|
// some TenantConfiguration are not valid,
|
||||||
// TenantMetadata - DefaultDSType ID is valid,
|
// TenantMetadata - DefaultDSType ID is valid,
|
||||||
//in the end batch configuration update must fail, and thus, not a single config should be actually changed
|
//in the end batch configuration update must fail, and thus, not a single config should be actually changed
|
||||||
long testValidDistributionSetType = createTestDistributionSetType();
|
long testValidDistributionSetType = createTestDistributionSetType();
|
||||||
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
||||||
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
||||||
//test TenantConfiguration with invalid config value, and a valid TenantMetadata - Default DistributionSetType id
|
//test TenantConfiguration with invalid config value, and a valid TenantMetadata - Default DistributionSetType id
|
||||||
assertBatchConfigurationFails(!oldRolloutApprovalConfig, "invalid-config-value", oldAuthGatewayToken + "randomSuffix0", testValidDistributionSetType, status().isBadRequest());
|
assertBatchConfigurationFails(!oldRolloutApprovalConfig, "invalid-config-value", oldAuthGatewayToken + "randomSuffix0",
|
||||||
|
testValidDistributionSetType, status().isBadRequest());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -221,52 +173,33 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
// TenantMetadata - DefaultDSType ID is invalid
|
// TenantMetadata - DefaultDSType ID is invalid
|
||||||
//in the end batch configuration update must fail, and thus, not a single config should be actually changed.
|
//in the end batch configuration update must fail, and thus, not a single config should be actually changed.
|
||||||
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
||||||
boolean oldAuthGatewayTokenEnabled = (Boolean) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue();
|
boolean oldAuthGatewayTokenEnabled = (Boolean) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED)
|
||||||
|
.getValue();
|
||||||
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
||||||
|
|
||||||
//invalid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing invalid type - string
|
//invalid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing invalid type - string
|
||||||
//not a single configuration should be changed after the failure
|
//not a single configuration should be changed after the failure
|
||||||
Object testInvalidDistributionSetType = "someInvalidInput";
|
Object testInvalidDistributionSetType = "someInvalidInput";
|
||||||
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix1", testInvalidDistributionSetType, status().isBadRequest());
|
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix1",
|
||||||
|
testInvalidDistributionSetType, status().isBadRequest());
|
||||||
|
|
||||||
//invalid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing invalid type - bool
|
//invalid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing invalid type - bool
|
||||||
//not a single configuration should be changed after the failure
|
//not a single configuration should be changed after the failure
|
||||||
testInvalidDistributionSetType = true;
|
testInvalidDistributionSetType = true;
|
||||||
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix2", testInvalidDistributionSetType, status().isBadRequest());
|
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix2",
|
||||||
|
testInvalidDistributionSetType, status().isBadRequest());
|
||||||
|
|
||||||
//Valid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing valid type - but given DistributionSetType Id does not exist.
|
//Valid TenantMetadata Default DistributionSetType, it is expected to be a number. Testing valid type - but given DistributionSetType Id does not exist.
|
||||||
//not a single configuration should be changed after the failure
|
//not a single configuration should be changed after the failure
|
||||||
testInvalidDistributionSetType = 9999;
|
testInvalidDistributionSetType = 9999;
|
||||||
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix2", testInvalidDistributionSetType, status().isNotFound());
|
assertBatchConfigurationFails(!oldRolloutApprovalConfig, !oldAuthGatewayTokenEnabled, oldAuthGatewayToken + "randomSuffix2",
|
||||||
}
|
testInvalidDistributionSetType, status().isNotFound());
|
||||||
|
|
||||||
private void assertBatchConfigurationFails(Object newRolloutApprovalEnabled, Object newAuthGatewayTokenEnabled, Object newGatewayToken, Object newDistributionSetTypeId, ResultMatcher resultMatchers) throws Exception {
|
|
||||||
long oldDefaultDsType = getActualDefaultDsType();
|
|
||||||
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
|
||||||
boolean oldAuthGatewayTokenEnabled = (Boolean) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue();
|
|
||||||
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
|
||||||
|
|
||||||
JSONObject configuration = new JSONObject();
|
|
||||||
configuration.put(ROLLOUT_APPROVAL_ENABLED, newRolloutApprovalEnabled);
|
|
||||||
configuration.put(AUTHENTICATION_GATEWAYTOKEN_ENABLED, newAuthGatewayTokenEnabled);
|
|
||||||
configuration.put(AUTHENTICATION_GATEWAYTOKEN_KEY, newGatewayToken);
|
|
||||||
configuration.put(DEFAULT_DISTRIBUTION_SET_TYPE_KEY, newDistributionSetTypeId);
|
|
||||||
String body = configuration.toString();
|
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs")
|
|
||||||
.content(body).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
|
||||||
.andExpect(resultMatchers);
|
|
||||||
//Check if TenantMetadata and TenantConfiguration is not changed as Batch config failed
|
|
||||||
assertEquals(oldDefaultDsType, getActualDefaultDsType(), "Batch configuration update Failed, but TenantMetadata - DistributionSetType was actually changed.");
|
|
||||||
assertEquals(oldRolloutApprovalConfig, tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue(), "Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
|
||||||
assertEquals(oldAuthGatewayTokenEnabled, tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue(), "Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
|
||||||
assertEquals(oldAuthGatewayToken, tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue(), "Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("The Batch configuration should be applied")
|
@Description("The Batch configuration should be applied")
|
||||||
public void changeBatchConfiguration() throws Exception {
|
public void changeBatchConfiguration() throws Exception {
|
||||||
long updatedDistributionSetType = createTestDistributionSetType();
|
long updatedDistributionSetType = createTestDistributionSetType();
|
||||||
boolean updatedRolloutApprovalEnabled = true;
|
boolean updatedRolloutApprovalEnabled = true;
|
||||||
boolean updatedAuthGatewayTokenEnabled = true;
|
boolean updatedAuthGatewayTokenEnabled = true;
|
||||||
String updatedAuthGatewayTokenKey = "54321";
|
String updatedAuthGatewayTokenKey = "54321";
|
||||||
@@ -279,14 +212,20 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
String body = configuration.toString();
|
String body = configuration.toString();
|
||||||
|
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs")
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs")
|
||||||
.content(body).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(body).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
//assert all changes were applied after Rest Success
|
//assert all changes were applied after Rest Success
|
||||||
assertEquals(updatedDistributionSetType, getActualDefaultDsType(), "Change BatchConfiguration was successful but TenantMetadata - Default DistributionSetType was not actually changed.");
|
assertEquals(updatedDistributionSetType, getActualDefaultDsType(),
|
||||||
assertEquals(updatedRolloutApprovalEnabled, tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue(), "Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
"Change BatchConfiguration was successful but TenantMetadata - Default DistributionSetType was not actually changed.");
|
||||||
assertEquals(updatedAuthGatewayTokenEnabled, tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue(), "Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
assertEquals(updatedRolloutApprovalEnabled, tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue(),
|
||||||
assertEquals(updatedAuthGatewayTokenKey, tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue(), "Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
"Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
||||||
|
assertEquals(updatedAuthGatewayTokenEnabled,
|
||||||
|
tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue(),
|
||||||
|
"Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
||||||
|
assertEquals(updatedAuthGatewayTokenKey,
|
||||||
|
tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue(),
|
||||||
|
"Change BatchConfiguration was successful but TenantConfiguration property was not actually changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -297,17 +236,17 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
|
|
||||||
// enable Multi-Assignments
|
// enable Multi-Assignments
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_MULTI_ASSIGNMENTS)
|
||||||
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isOk());
|
.andExpect(status().isOk());
|
||||||
|
|
||||||
// try to enable Auto-Close
|
// try to enable Auto-Close
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_AUTO_CLOSE)
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_AUTO_CLOSE)
|
||||||
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(bodyActivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden());
|
.andExpect(status().isForbidden());
|
||||||
|
|
||||||
// try to disable Auto-Close
|
// try to disable Auto-Close
|
||||||
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_AUTO_CLOSE)
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}", KEY_AUTO_CLOSE)
|
||||||
.content(bodyDeactivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
.content(bodyDeactivate).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isForbidden());
|
.andExpect(status().isForbidden());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,9 +263,92 @@ public class MgmtTenantManagementResourceTest extends AbstractManagementApiInteg
|
|||||||
@Description("Tests DELETE request must Fail for TenantMetadata properties.")
|
@Description("Tests DELETE request must Fail for TenantMetadata properties.")
|
||||||
public void deleteTenantMetadataFail() throws Exception {
|
public void deleteTenantMetadataFail() throws Exception {
|
||||||
mvc.perform(delete(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
mvc.perform(delete(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
||||||
DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
DEFAULT_DISTRIBUTION_SET_TYPE_KEY))
|
||||||
.andDo(MockMvcResultPrinter.print())
|
.andDo(MockMvcResultPrinter.print())
|
||||||
.andExpect(status().isBadRequest());
|
.andExpect(status().isBadRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Handles GET request for receiving all tenant specific configurations depending on read gateway token permissions.")
|
||||||
|
void getTenantConfigurationReadGWToken() throws Exception {
|
||||||
|
SecurityContextSwitch.runAs(SecurityContextSwitch.withUser("tenant_admin", SpPermission.TENANT_CONFIGURATION), () -> {
|
||||||
|
tenantConfigurationManagement.addOrUpdateConfiguration(
|
||||||
|
TenantConfigurationProperties.TenantConfigurationKey.AUTHENTICATION_MODE_GATEWAY_SECURITY_TOKEN_KEY,
|
||||||
|
"123");
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO - should be able to read with TENANT_CONFIGURATION but somehow here the role hierarchy doesn't play
|
||||||
|
// checked in mgmt / update server runtime PreAuthorizeEnabledTest
|
||||||
|
SecurityContextSwitch.runAs(
|
||||||
|
SecurityContextSwitch.withUser("tenant_admin", SpPermission.READ_TENANT_CONFIGURATION, SpPermission.READ_GATEWAY_SEC_TOKEN),
|
||||||
|
() -> {
|
||||||
|
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs"))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andDo(m -> System.out.println("-> 1: " + m.getResponse().getContentAsString()))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "']").exists())
|
||||||
|
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "'].value", equalTo("123")));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
SecurityContextSwitch.runAs(SecurityContextSwitch.withUser("tenant_read", SpPermission.READ_TENANT_CONFIGURATION), () -> {
|
||||||
|
mvc.perform(get(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs"))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andDo(m -> System.out.println("-> 2: " + m.getResponse().getContentAsString()))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.['" + AUTHENTICATION_GATEWAYTOKEN_KEY + "']").doesNotExist());
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long createTestDistributionSetType() {
|
||||||
|
DistributionSetType testDefaultDsType = distributionSetTypeManagement.create(entityFactory.distributionSetType().create()
|
||||||
|
.key("test123").name("TestName123").description("TestDefaultDsType"));
|
||||||
|
testDefaultDsType = distributionSetTypeManagement
|
||||||
|
.update(entityFactory.distributionSetType().update(testDefaultDsType.getId()).description("TestDefaultDsType"));
|
||||||
|
return testDefaultDsType.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertDefaultDsTypeUpdateBadRequestFails(String newDefaultDsType, long oldDefaultDsType, ResultMatcher resultMatchers)
|
||||||
|
throws Exception {
|
||||||
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs/{keyName}",
|
||||||
|
DEFAULT_DISTRIBUTION_SET_TYPE_KEY).content(newDefaultDsType)
|
||||||
|
.contentType(MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(resultMatchers);
|
||||||
|
assertEquals(oldDefaultDsType, getActualDefaultDsType(),
|
||||||
|
"Rest endpoint for updating DefaultDistributionType failed, but actual value changed unexpectedly.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertBatchConfigurationFails(Object newRolloutApprovalEnabled, Object newAuthGatewayTokenEnabled, Object newGatewayToken,
|
||||||
|
Object newDistributionSetTypeId, ResultMatcher resultMatchers) throws Exception {
|
||||||
|
long oldDefaultDsType = getActualDefaultDsType();
|
||||||
|
boolean oldRolloutApprovalConfig = (Boolean) tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue();
|
||||||
|
boolean oldAuthGatewayTokenEnabled = (Boolean) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED)
|
||||||
|
.getValue();
|
||||||
|
String oldAuthGatewayToken = (String) tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue();
|
||||||
|
|
||||||
|
JSONObject configuration = new JSONObject();
|
||||||
|
configuration.put(ROLLOUT_APPROVAL_ENABLED, newRolloutApprovalEnabled);
|
||||||
|
configuration.put(AUTHENTICATION_GATEWAYTOKEN_ENABLED, newAuthGatewayTokenEnabled);
|
||||||
|
configuration.put(AUTHENTICATION_GATEWAYTOKEN_KEY, newGatewayToken);
|
||||||
|
configuration.put(DEFAULT_DISTRIBUTION_SET_TYPE_KEY, newDistributionSetTypeId);
|
||||||
|
String body = configuration.toString();
|
||||||
|
|
||||||
|
mvc.perform(put(MgmtRestConstants.SYSTEM_V1_REQUEST_MAPPING + "/configs")
|
||||||
|
.content(body).contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(resultMatchers);
|
||||||
|
//Check if TenantMetadata and TenantConfiguration is not changed as Batch config failed
|
||||||
|
assertEquals(oldDefaultDsType, getActualDefaultDsType(),
|
||||||
|
"Batch configuration update Failed, but TenantMetadata - DistributionSetType was actually changed.");
|
||||||
|
assertEquals(oldRolloutApprovalConfig, tenantConfigurationManagement.getConfigurationValue(ROLLOUT_APPROVAL_ENABLED).getValue(),
|
||||||
|
"Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
||||||
|
assertEquals(oldAuthGatewayTokenEnabled,
|
||||||
|
tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_ENABLED).getValue(),
|
||||||
|
"Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
||||||
|
assertEquals(oldAuthGatewayToken, tenantConfigurationManagement.getConfigurationValue(AUTHENTICATION_GATEWAYTOKEN_KEY).getValue(),
|
||||||
|
"Batch configuration update Failed, but TenantConfiguration was actually changed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long getActualDefaultDsType() {
|
private Long getActualDefaultDsType() {
|
||||||
|
|||||||
@@ -11,18 +11,18 @@ package org.eclipse.hawkbit.mgmt.rest.resource;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.PagedList;
|
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
|
||||||
import org.eclipse.hawkbit.rest.json.model.ExceptionInfo;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonParseException;
|
import com.fasterxml.jackson.core.JsonParseException;
|
||||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import org.eclipse.hawkbit.mgmt.json.model.PagedList;
|
||||||
|
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
||||||
|
import org.eclipse.hawkbit.rest.json.model.ExceptionInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility additions for the REST API tests.
|
* Utility additions for the REST API tests.
|
||||||
*/
|
*/
|
||||||
public final class ResourceUtility {
|
public final class ResourceUtility {
|
||||||
|
|
||||||
private static final ObjectMapper mapper = new ObjectMapper();
|
private static final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
static ExceptionInfo convertException(final String jsonExceptionResponse)
|
static ExceptionInfo convertException(final String jsonExceptionResponse)
|
||||||
|
|||||||
Reference in New Issue
Block a user