Added support for cdn download url for mgmt API and tests
Signed-off-by: Shruthi Manavalli Ramanna <shruthimanavalli.ramanna@bosch-si.com>
This commit is contained in:
@@ -22,3 +22,10 @@ hawkbit.artifact.url.protocols.md5sum-http.ip=${hawkbit.artifact.url.protocols.d
|
|||||||
hawkbit.artifact.url.protocols.md5sum-http.port=${hawkbit.artifact.url.protocols.download-http.port}
|
hawkbit.artifact.url.protocols.md5sum-http.port=${hawkbit.artifact.url.protocols.download-http.port}
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.ref=${hawkbit.artifact.url.protocols.download-http.ref}.MD5SUM
|
hawkbit.artifact.url.protocols.md5sum-http.ref=${hawkbit.artifact.url.protocols.download-http.ref}.MD5SUM
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.rel=cdndownload-http
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.hostname=localhost
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.ip=127.0.0.1
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.protocol=http
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.port=8080
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.supports=MGMT
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.ref={protocol}://{hostnameRequest}:{portRequest}/rest/v1/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
|
||||||
@@ -22,5 +22,10 @@ public enum ApiType {
|
|||||||
/**
|
/**
|
||||||
* Support for Direct Device Integration API.
|
* Support for Direct Device Integration API.
|
||||||
*/
|
*/
|
||||||
DDI
|
DDI,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support for Management API.
|
||||||
|
*/
|
||||||
|
MGMT
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ public class ArtifactUrlHandlerProperties {
|
|||||||
/**
|
/**
|
||||||
* Support for the following hawkBit API.
|
* Support for the following hawkBit API.
|
||||||
*/
|
*/
|
||||||
private List<ApiType> supports = Arrays.asList(ApiType.DDI, ApiType.DMF);
|
private List<ApiType> supports = Arrays.asList(ApiType.DDI, ApiType.DMF, ApiType.MGMT);
|
||||||
|
|
||||||
public boolean isEnabled() {
|
public boolean isEnabled() {
|
||||||
return enabled;
|
return enabled;
|
||||||
|
|||||||
@@ -104,9 +104,11 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler {
|
|||||||
urlPattern = urlPattern.replace(":{" + entry.getKey() + "}",
|
urlPattern = urlPattern.replace(":{" + entry.getKey() + "}",
|
||||||
StringUtils.isEmpty(entry.getValue()) ? "" : (":" + entry.getValue()));
|
StringUtils.isEmpty(entry.getValue()) ? "" : (":" + entry.getValue()));
|
||||||
} else {
|
} else {
|
||||||
|
if(entry.getValue() != null) {
|
||||||
urlPattern = urlPattern.replace("{" + entry.getKey() + "}", entry.getValue());
|
urlPattern = urlPattern.replace("{" + entry.getKey() + "}", entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return urlPattern;
|
return urlPattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +137,9 @@ public class PropertyBasedArtifactUrlHandler implements ArtifactUrlHandler {
|
|||||||
replaceMap.put(TENANT_ID_BASE62_PLACEHOLDER, Base62Util.fromBase10(placeholder.getTenantId()));
|
replaceMap.put(TENANT_ID_BASE62_PLACEHOLDER, Base62Util.fromBase10(placeholder.getTenantId()));
|
||||||
replaceMap.put(CONTROLLER_ID_PLACEHOLDER, placeholder.getControllerId());
|
replaceMap.put(CONTROLLER_ID_PLACEHOLDER, placeholder.getControllerId());
|
||||||
replaceMap.put(TARGET_ID_BASE10_PLACEHOLDER, String.valueOf(placeholder.getTargetId()));
|
replaceMap.put(TARGET_ID_BASE10_PLACEHOLDER, String.valueOf(placeholder.getTargetId()));
|
||||||
|
if(placeholder.getTargetId() != null) {
|
||||||
replaceMap.put(TARGET_ID_BASE62_PLACEHOLDER, Base62Util.fromBase10(placeholder.getTargetId()));
|
replaceMap.put(TARGET_ID_BASE62_PLACEHOLDER, Base62Util.fromBase10(placeholder.getTargetId()));
|
||||||
|
}
|
||||||
replaceMap.put(ARTIFACT_ID_BASE62_PLACEHOLDER,
|
replaceMap.put(ARTIFACT_ID_BASE62_PLACEHOLDER,
|
||||||
Base62Util.fromBase10(placeholder.getSoftwareData().getArtifactId()));
|
Base62Util.fromBase10(placeholder.getSoftwareData().getArtifactId()));
|
||||||
replaceMap.put(ARTIFACT_ID_BASE10_PLACEHOLDER, String.valueOf(placeholder.getSoftwareData().getArtifactId()));
|
replaceMap.put(ARTIFACT_ID_BASE10_PLACEHOLDER, String.valueOf(placeholder.getSoftwareData().getArtifactId()));
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class RSQLTargetFilterQueryFieldsTest extends AbstractJpaIntegrationTest
|
|||||||
private TargetFilterQuery filter2;
|
private TargetFilterQuery filter2;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setupBeforeTest() throws InterruptedException {
|
public void setupBeforeTest() {
|
||||||
final String filterName1 = "filter_a";
|
final String filterName1 = "filter_a";
|
||||||
final String filterName2 = "filter_b";
|
final String filterName2 = "filter_b";
|
||||||
final String filterName3 = "filter_c";
|
final String filterName3 = "filter_c";
|
||||||
|
|||||||
@@ -51,6 +51,13 @@ hawkbit.artifact.url.protocols.md5sum-http.ip=${hawkbit.artifact.url.protocols.d
|
|||||||
hawkbit.artifact.url.protocols.md5sum-http.port=${hawkbit.artifact.url.protocols.download-http.port}
|
hawkbit.artifact.url.protocols.md5sum-http.port=${hawkbit.artifact.url.protocols.download-http.port}
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.ref=${hawkbit.artifact.url.protocols.download-http.ref}.MD5SUM
|
hawkbit.artifact.url.protocols.md5sum-http.ref=${hawkbit.artifact.url.protocols.download-http.ref}.MD5SUM
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.rel=cdndownload-http
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.hostname=localhost
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.ip=127.0.0.1
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.protocol=http
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.port=8080
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.supports=MGMT
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.ref={protocol}://{hostnameRequest}:{portRequest}/rest/v1/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
|
||||||
## Download URL Generation - END
|
## Download URL Generation - END
|
||||||
|
|
||||||
# Quota - START
|
# Quota - START
|
||||||
|
|||||||
@@ -271,6 +271,12 @@ public final class MgmtRestConstants {
|
|||||||
*/
|
*/
|
||||||
public static final String AUTH_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/userinfo";
|
public static final String AUTH_V1_REQUEST_MAPPING = BASE_V1_REQUEST_MAPPING + "/userinfo";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The artifact download URL type
|
||||||
|
*/
|
||||||
|
public static final String ARTIFACT_DOWNLOAD_URL_TYPE = "downloadurltype";
|
||||||
|
|
||||||
|
|
||||||
// constant class, private constructor.
|
// constant class, private constructor.
|
||||||
private MgmtRestConstants() {
|
private MgmtRestConstants() {
|
||||||
|
|
||||||
|
|||||||
@@ -98,9 +98,10 @@ public interface MgmtSoftwareModuleRestApi {
|
|||||||
@GetMapping(value = MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING
|
@GetMapping(value = MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING
|
||||||
+ "/{softwareModuleId}/artifacts/{artifactId}", produces = { MediaTypes.HAL_JSON_VALUE,
|
+ "/{softwareModuleId}/artifacts/{artifactId}", produces = { MediaTypes.HAL_JSON_VALUE,
|
||||||
MediaType.APPLICATION_JSON_VALUE })
|
MediaType.APPLICATION_JSON_VALUE })
|
||||||
@ResponseBody
|
@ResponseBody ResponseEntity<MgmtArtifact> getArtifact(
|
||||||
ResponseEntity<MgmtArtifact> getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId,
|
@PathVariable("softwareModuleId") final Long softwareModuleId,
|
||||||
@PathVariable("artifactId") final Long artifactId);
|
@PathVariable("artifactId") final Long artifactId,
|
||||||
|
@RequestParam(value = MgmtRestConstants.ARTIFACT_DOWNLOAD_URL_TYPE, required = false) final String artifactDownloadUrlType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the DELETE request for a single SoftwareModule.
|
* Handles the DELETE request for a single SoftwareModule.
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.eclipse.hawkbit.api.ApiType;
|
||||||
|
import org.eclipse.hawkbit.api.ArtifactUrl;
|
||||||
|
import org.eclipse.hawkbit.api.ArtifactUrlHandler;
|
||||||
|
import org.eclipse.hawkbit.api.URLPlaceholder;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifactHash;
|
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifactHash;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule;
|
import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule;
|
||||||
@@ -25,12 +29,14 @@ import org.eclipse.hawkbit.mgmt.rest.api.MgmtRestConstants;
|
|||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleRestApi;
|
||||||
import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi;
|
import org.eclipse.hawkbit.mgmt.rest.api.MgmtSoftwareModuleTypeRestApi;
|
||||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
import org.eclipse.hawkbit.repository.EntityFactory;
|
||||||
|
import org.eclipse.hawkbit.repository.SystemManagement;
|
||||||
import org.eclipse.hawkbit.repository.builder.SoftwareModuleCreate;
|
import org.eclipse.hawkbit.repository.builder.SoftwareModuleCreate;
|
||||||
import org.eclipse.hawkbit.repository.builder.SoftwareModuleMetadataCreate;
|
import org.eclipse.hawkbit.repository.builder.SoftwareModuleMetadataCreate;
|
||||||
import org.eclipse.hawkbit.repository.model.Artifact;
|
import org.eclipse.hawkbit.repository.model.Artifact;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
||||||
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
|
import org.eclipse.hawkbit.repository.model.SoftwareModuleMetadata;
|
||||||
import org.eclipse.hawkbit.rest.data.ResponseList;
|
import org.eclipse.hawkbit.rest.data.ResponseList;
|
||||||
|
import org.springframework.hateoas.Link;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A mapper which maps repository model to RESTful model representation and
|
* A mapper which maps repository model to RESTful model representation and
|
||||||
@@ -143,7 +149,7 @@ public final class MgmtSoftwareModuleMapper {
|
|||||||
MgmtRestModelMapper.mapBaseToBase(artifactRest, artifact);
|
MgmtRestModelMapper.mapBaseToBase(artifactRest, artifact);
|
||||||
|
|
||||||
artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class)
|
artifactRest.add(linkTo(methodOn(MgmtSoftwareModuleRestApi.class)
|
||||||
.getArtifact(artifact.getSoftwareModule().getId(), artifact.getId())).withSelfRel().expand());
|
.getArtifact(artifact.getSoftwareModule().getId(), artifact.getId(), null)).withSelfRel().expand());
|
||||||
|
|
||||||
return artifactRest;
|
return artifactRest;
|
||||||
}
|
}
|
||||||
@@ -155,6 +161,17 @@ public final class MgmtSoftwareModuleMapper {
|
|||||||
.expand());
|
.expand());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void addLinks(final Artifact artifact, final MgmtArtifact response,
|
||||||
|
final ArtifactUrlHandler artifactUrlHandler, final SystemManagement systemManagement) {
|
||||||
|
|
||||||
|
List<ArtifactUrl> urls = artifactUrlHandler.getUrls(
|
||||||
|
new URLPlaceholder(systemManagement.getTenantMetadata().getTenant(),
|
||||||
|
systemManagement.getTenantMetadata().getId(), null, null,
|
||||||
|
new URLPlaceholder.SoftwareData(artifact.getSoftwareModule().getId(), artifact.getFilename(),
|
||||||
|
artifact.getId(), artifact.getSha1Hash())), ApiType.MGMT, null);
|
||||||
|
response.add(Link.of(urls.get(0).getRef()).withRel("cdn-download").expand());
|
||||||
|
}
|
||||||
|
|
||||||
static List<MgmtArtifact> artifactsToResponse(final Collection<Artifact> artifacts) {
|
static List<MgmtArtifact> artifactsToResponse(final Collection<Artifact> artifacts) {
|
||||||
if (artifacts == null) {
|
if (artifacts == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import java.util.Collection;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.eclipse.hawkbit.api.ArtifactUrlHandler;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.PagedList;
|
import org.eclipse.hawkbit.mgmt.json.model.PagedList;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
import org.eclipse.hawkbit.mgmt.json.model.artifact.MgmtArtifact;
|
||||||
import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule;
|
import org.eclipse.hawkbit.mgmt.json.model.softwaremodule.MgmtSoftwareModule;
|
||||||
@@ -29,6 +30,7 @@ import org.eclipse.hawkbit.repository.EntityFactory;
|
|||||||
import org.eclipse.hawkbit.repository.OffsetBasedPageRequest;
|
import org.eclipse.hawkbit.repository.OffsetBasedPageRequest;
|
||||||
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
|
import org.eclipse.hawkbit.repository.SoftwareModuleManagement;
|
||||||
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
|
import org.eclipse.hawkbit.repository.SoftwareModuleTypeManagement;
|
||||||
|
import org.eclipse.hawkbit.repository.SystemManagement;
|
||||||
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.Artifact;
|
||||||
import org.eclipse.hawkbit.repository.model.ArtifactUpload;
|
import org.eclipse.hawkbit.repository.model.ArtifactUpload;
|
||||||
@@ -68,13 +70,21 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi {
|
|||||||
|
|
||||||
private final SoftwareModuleTypeManagement softwareModuleTypeManagement;
|
private final SoftwareModuleTypeManagement softwareModuleTypeManagement;
|
||||||
|
|
||||||
|
private final ArtifactUrlHandler artifactUrlHandler;
|
||||||
|
|
||||||
|
private final SystemManagement systemManagement;
|
||||||
|
|
||||||
private final EntityFactory entityFactory;
|
private final EntityFactory entityFactory;
|
||||||
|
|
||||||
MgmtSoftwareModuleResource(final ArtifactManagement artifactManagement, final SoftwareModuleManagement softwareModuleManagement,
|
MgmtSoftwareModuleResource(final ArtifactManagement artifactManagement, final SoftwareModuleManagement softwareModuleManagement,
|
||||||
final SoftwareModuleTypeManagement softwareModuleTypeManagement, final EntityFactory entityFactory) {
|
final SoftwareModuleTypeManagement softwareModuleTypeManagement,
|
||||||
|
final ArtifactUrlHandler artifactUrlHandler, final SystemManagement systemManagement,
|
||||||
|
final EntityFactory entityFactory) {
|
||||||
this.artifactManagement = artifactManagement;
|
this.artifactManagement = artifactManagement;
|
||||||
this.softwareModuleManagement = softwareModuleManagement;
|
this.softwareModuleManagement = softwareModuleManagement;
|
||||||
this.softwareModuleTypeManagement = softwareModuleTypeManagement;
|
this.softwareModuleTypeManagement = softwareModuleTypeManagement;
|
||||||
|
this.artifactUrlHandler = artifactUrlHandler;
|
||||||
|
this.systemManagement = systemManagement;
|
||||||
this.entityFactory = entityFactory;
|
this.entityFactory = entityFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,15 +135,21 @@ public class MgmtSoftwareModuleResource implements MgmtSoftwareModuleRestApi {
|
|||||||
// subroutine
|
// subroutine
|
||||||
@SuppressWarnings("squid:S3655")
|
@SuppressWarnings("squid:S3655")
|
||||||
public ResponseEntity<MgmtArtifact> getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId,
|
public ResponseEntity<MgmtArtifact> getArtifact(@PathVariable("softwareModuleId") final Long softwareModuleId,
|
||||||
@PathVariable("artifactId") final Long artifactId) {
|
@PathVariable("artifactId") final Long artifactId,
|
||||||
|
@RequestParam(value = MgmtRestConstants.ARTIFACT_DOWNLOAD_URL_TYPE, required = false) final String artifactDownloadUrlType) {
|
||||||
final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId);
|
final SoftwareModule module = findSoftwareModuleWithExceptionIfNotFound(softwareModuleId, artifactId);
|
||||||
|
|
||||||
final MgmtArtifact reponse = MgmtSoftwareModuleMapper.toResponse(module.getArtifact(artifactId).get());
|
final MgmtArtifact response = MgmtSoftwareModuleMapper.toResponse(module.getArtifact(artifactId).get());
|
||||||
if (!module.isDeleted()) {
|
if (!module.isDeleted()) {
|
||||||
MgmtSoftwareModuleMapper.addLinks(module.getArtifact(artifactId).get(), reponse);
|
if(artifactDownloadUrlType == null || artifactDownloadUrlType == "default") {
|
||||||
|
MgmtSoftwareModuleMapper.addLinks(module.getArtifact(artifactId).get(), response);
|
||||||
|
} else {
|
||||||
|
MgmtSoftwareModuleMapper.addLinks(module.getArtifact(artifactId).get(), response, artifactUrlHandler,
|
||||||
|
systemManagement);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseEntity.ok(reponse);
|
return ResponseEntity.ok(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -592,6 +592,37 @@ class MgmtSoftwareModuleResourceTest extends AbstractManagementApiIntegrationTes
|
|||||||
"http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artifact.getId())));
|
"http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artifact.getId())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Description("Verifies the listing of one defined artifact assigned to a given software module. That includes the artifact metadata and cdn download links.")
|
||||||
|
void getArtifactWithCdnDownloadUrl() throws Exception {
|
||||||
|
// prepare data for test
|
||||||
|
final SoftwareModule sm = testdataFactory.createSoftwareModuleOs();
|
||||||
|
|
||||||
|
final int artifactSize = 5 * 1024;
|
||||||
|
final byte random[] = randomBytes(artifactSize);
|
||||||
|
|
||||||
|
final Artifact artifact = artifactManagement.create(
|
||||||
|
new ArtifactUpload(new ByteArrayInputStream(random), sm.getId(), "file1", false, artifactSize));
|
||||||
|
|
||||||
|
// perform test
|
||||||
|
mvc.perform(get("/rest/v1/softwaremodules/{smId}/artifacts/{artId}?downloadurltype=cdn", sm.getId(), artifact.getId()).accept(
|
||||||
|
MediaType.APPLICATION_JSON))
|
||||||
|
.andDo(MockMvcResultPrinter.print())
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(content().contentType(MediaType.APPLICATION_JSON_VALUE))
|
||||||
|
.andExpect(jsonPath("$.id", equalTo(artifact.getId().intValue())))
|
||||||
|
.andExpect(jsonPath("$.size", equalTo(random.length)))
|
||||||
|
.andExpect(jsonPath("$.hashes.md5", equalTo(artifact.getMd5Hash())))
|
||||||
|
.andExpect(jsonPath("$.hashes.sha1", equalTo(artifact.getSha1Hash())))
|
||||||
|
.andExpect(jsonPath("$.hashes.sha256", equalTo(artifact.getSha256Hash())))
|
||||||
|
.andExpect(jsonPath("$.providedFilename", equalTo("file1")))
|
||||||
|
.andExpect(jsonPath("$._links.cdn-download.href",
|
||||||
|
equalTo("http://localhost:8080/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/"
|
||||||
|
+ artifact.getFilename())))
|
||||||
|
.andExpect(jsonPath("$._links.self.href", equalTo(
|
||||||
|
"http://localhost/rest/v1/softwaremodules/" + sm.getId() + "/artifacts/" + artifact.getId())));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Verifies the listing of an artifact that belongs to a soft deleted software module.")
|
@Description("Verifies the listing of an artifact that belongs to a soft deleted software module.")
|
||||||
void getArtifactSoftDeleted() throws Exception {
|
void getArtifactSoftDeleted() throws Exception {
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ hawkbit.artifact.url.protocols.download-http.protocol=https
|
|||||||
hawkbit.artifact.url.protocols.download-http.supports=DMF,DDI
|
hawkbit.artifact.url.protocols.download-http.supports=DMF,DDI
|
||||||
hawkbit.artifact.url.protocols.download-http.hostname=hawkbit.eclipse.org
|
hawkbit.artifact.url.protocols.download-http.hostname=hawkbit.eclipse.org
|
||||||
hawkbit.artifact.url.protocols.download-http.ref={protocol}://{hostname}/{tenant}/controller/v1/{controllerId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
|
hawkbit.artifact.url.protocols.download-http.ref={protocol}://{hostname}/{tenant}/controller/v1/{controllerId}/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.rel=cdndownload-http
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.protocol=https
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.supports=MGMT
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.hostname=hawkbit.eclipse.org
|
||||||
|
hawkbit.artifact.url.protocols.download-cdn-http.ref={protocol}://{hostnameRequest}:{portRequest}/rest/v1/softwaremodules/{softwareModuleId}/artifacts/{artifactFileName}
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.rel=md5sum-http
|
hawkbit.artifact.url.protocols.md5sum-http.rel=md5sum-http
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.protocol=${hawkbit.artifact.url.protocols.download-http.protocol}
|
hawkbit.artifact.url.protocols.md5sum-http.protocol=${hawkbit.artifact.url.protocols.download-http.protocol}
|
||||||
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
hawkbit.artifact.url.protocols.md5sum-http.supports=DDI
|
||||||
|
|||||||
Reference in New Issue
Block a user