Added targetToken to DMF update message.
Signed-off-by: Kai Zimmermann <kai.zimmermann@bosch-si.com>
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
</parent>
|
</parent>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<artifactId>hawkbit-mgmt-api-client</artifactId>
|
<artifactId>hawkbit-mgmt-api-client</artifactId>
|
||||||
<name>hawkBit Management API example client</name>
|
<name>hawkBit :: Management API example client</name>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public class AmqpMessageDispatcherService extends BaseAmqpService {
|
|||||||
.getSoftwareModules();
|
.getSoftwareModules();
|
||||||
final DownloadAndUpdateRequest downloadAndUpdateRequest = new DownloadAndUpdateRequest();
|
final DownloadAndUpdateRequest downloadAndUpdateRequest = new DownloadAndUpdateRequest();
|
||||||
downloadAndUpdateRequest.setActionId(targetAssignDistributionSetEvent.getActionId());
|
downloadAndUpdateRequest.setActionId(targetAssignDistributionSetEvent.getActionId());
|
||||||
|
downloadAndUpdateRequest.setTargetToken(targetAssignDistributionSetEvent.getTargetToken());
|
||||||
|
|
||||||
for (final org.eclipse.hawkbit.repository.model.SoftwareModule softwareModule : modules) {
|
for (final org.eclipse.hawkbit.repository.model.SoftwareModule softwareModule : modules) {
|
||||||
final SoftwareModule amqpSoftwareModule = convertToAmqpSoftwareModule(controllerId, softwareModule);
|
final SoftwareModule amqpSoftwareModule = convertToAmqpSoftwareModule(controllerId, softwareModule);
|
||||||
|
|||||||
@@ -305,7 +305,8 @@ public class AmqpMessageHandlerService extends BaseAmqpService {
|
|||||||
final List<SoftwareModule> softwareModuleList = controllerManagement
|
final List<SoftwareModule> softwareModuleList = controllerManagement
|
||||||
.findSoftwareModulesByDistributionSet(distributionSet);
|
.findSoftwareModulesByDistributionSet(distributionSet);
|
||||||
eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(),
|
eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(),
|
||||||
target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress()));
|
target.getControllerId(), action.getId(), softwareModuleList, target.getTargetInfo().getAddress(),
|
||||||
|
target.getSecurityToken()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,12 @@ import ru.yandex.qatools.allure.annotations.Stories;
|
|||||||
@Stories("AmqpMessage Dispatcher Service Test")
|
@Stories("AmqpMessage Dispatcher Service Test")
|
||||||
public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWithMongoDB {
|
public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWithMongoDB {
|
||||||
|
|
||||||
|
private static final String TENANT = "default";
|
||||||
|
|
||||||
|
private static final URI AMQP_URI = IpUtil.createAmqpUri("vHost", "mytest");
|
||||||
|
|
||||||
|
private static final String TEST_TOKEN = "testToken";
|
||||||
|
|
||||||
private AmqpMessageDispatcherService amqpMessageDispatcherService;
|
private AmqpMessageDispatcherService amqpMessageDispatcherService;
|
||||||
|
|
||||||
private RabbitTemplate rabbitTemplate;
|
private RabbitTemplate rabbitTemplate;
|
||||||
@@ -89,8 +95,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
|
|||||||
@Description("Verfies that download and install event with no software modul works")
|
@Description("Verfies that download and install event with no software modul works")
|
||||||
public void testSendDownloadRequesWithEmptySoftwareModules() {
|
public void testSendDownloadRequesWithEmptySoftwareModules() {
|
||||||
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
||||||
1L, "default", CONTROLLER_ID, 1l, new ArrayList<SoftwareModule>(),
|
1L, TENANT, CONTROLLER_ID, 1L, new ArrayList<SoftwareModule>(), AMQP_URI, TEST_TOKEN);
|
||||||
IpUtil.createAmqpUri("vHost", "mytest"));
|
|
||||||
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
||||||
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
||||||
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
||||||
@@ -104,7 +109,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
|
|||||||
final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement,
|
final DistributionSet dsA = TestDataUtil.generateDistributionSet("", softwareManagement,
|
||||||
distributionSetManagement);
|
distributionSetManagement);
|
||||||
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
||||||
1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest"));
|
1L, TENANT, CONTROLLER_ID, 1L, dsA.getModules(), AMQP_URI, TEST_TOKEN);
|
||||||
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
||||||
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
||||||
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
||||||
@@ -143,7 +148,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
|
|||||||
Mockito.when(rabbitTemplate.convertSendAndReceive(any())).thenReturn(receivedList);
|
Mockito.when(rabbitTemplate.convertSendAndReceive(any())).thenReturn(receivedList);
|
||||||
|
|
||||||
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
final TargetAssignDistributionSetEvent targetAssignDistributionSetEvent = new TargetAssignDistributionSetEvent(
|
||||||
1L, "default", CONTROLLER_ID, 1l, dsA.getModules(), IpUtil.createAmqpUri("vHost", "mytest"));
|
1L, TENANT, CONTROLLER_ID, 1L, dsA.getModules(), AMQP_URI, TEST_TOKEN);
|
||||||
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
amqpMessageDispatcherService.targetAssignDistributionSet(targetAssignDistributionSetEvent);
|
||||||
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
final Message sendMessage = createArgumentCapture(targetAssignDistributionSetEvent.getTargetAdress());
|
||||||
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
final DownloadAndUpdateRequest downloadAndUpdateRequest = assertDownloadAndInstallMessage(sendMessage);
|
||||||
@@ -162,7 +167,7 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
|
|||||||
@Description("Verfies that send cancel event works")
|
@Description("Verfies that send cancel event works")
|
||||||
public void testSendCancelRequest() {
|
public void testSendCancelRequest() {
|
||||||
final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent(
|
final CancelTargetAssignmentEvent cancelTargetAssignmentDistributionSetEvent = new CancelTargetAssignmentEvent(
|
||||||
1L, "default", CONTROLLER_ID, 1l, IpUtil.createAmqpUri("vHost", "mytest"));
|
1L, TENANT, CONTROLLER_ID, 1L, AMQP_URI);
|
||||||
amqpMessageDispatcherService
|
amqpMessageDispatcherService
|
||||||
.targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent);
|
.targetCancelAssignmentToDistributionSet(cancelTargetAssignmentDistributionSetEvent);
|
||||||
final Message sendMessage = createArgumentCapture(cancelTargetAssignmentDistributionSetEvent.getTargetAdress());
|
final Message sendMessage = createArgumentCapture(cancelTargetAssignmentDistributionSetEvent.getTargetAdress());
|
||||||
@@ -187,13 +192,12 @@ public class AmqpMessageDispatcherServiceTest extends AbstractIntegrationTestWit
|
|||||||
downloadAndUpdateRequest.getActionId(), Long.valueOf(1));
|
downloadAndUpdateRequest.getActionId(), Long.valueOf(1));
|
||||||
assertEquals("The topic of the event shuold contain DOWNLOAD_AND_INSTALL", EventTopic.DOWNLOAD_AND_INSTALL,
|
assertEquals("The topic of the event shuold contain DOWNLOAD_AND_INSTALL", EventTopic.DOWNLOAD_AND_INSTALL,
|
||||||
sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC));
|
sendMessage.getMessageProperties().getHeaders().get(MessageHeaderKey.TOPIC));
|
||||||
|
assertEquals("Security token of target", downloadAndUpdateRequest.getTargetToken(), TEST_TOKEN);
|
||||||
|
|
||||||
return downloadAndUpdateRequest;
|
return downloadAndUpdateRequest;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param sendMessage
|
|
||||||
*/
|
|
||||||
private void assertEventMessage(final Message sendMessage) {
|
private void assertEventMessage(final Message sendMessage) {
|
||||||
assertNotNull("The message should not be null", sendMessage);
|
assertNotNull("The message should not be null", sendMessage);
|
||||||
|
|
||||||
|
|||||||
@@ -339,14 +339,14 @@ public class AmqpMessageHandlerServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Description("Tests TODO")
|
@Description("Tests TODO")
|
||||||
public void lookupNextUpdateActionAfterFinished() throws IllegalArgumentException, IllegalAccessException {
|
public void lookupNextUpdateActionAfterFinished() throws IllegalAccessException {
|
||||||
|
|
||||||
// Mock
|
// Mock
|
||||||
final Action action = createActionWithTarget(22L, Status.FINISHED);
|
final Action action = createActionWithTarget(22L, Status.FINISHED);
|
||||||
when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action);
|
when(controllerManagementMock.findActionWithDetails(Matchers.any())).thenReturn(action);
|
||||||
when(controllerManagementMock.addUpdateActionStatus(Matchers.any(), Matchers.any())).thenReturn(action);
|
when(controllerManagementMock.addUpdateActionStatus(Matchers.any(), Matchers.any())).thenReturn(action);
|
||||||
// for the test the same action can be used
|
// for the test the same action can be used
|
||||||
final List<Action> actionList = new ArrayList<Action>();
|
final List<Action> actionList = new ArrayList<>();
|
||||||
actionList.add(action);
|
actionList.add(action);
|
||||||
when(controllerManagementMock.findActionByTargetAndActive(Matchers.any())).thenReturn(actionList);
|
when(controllerManagementMock.findActionByTargetAndActive(Matchers.any())).thenReturn(actionList);
|
||||||
|
|
||||||
@@ -372,6 +372,8 @@ public class AmqpMessageHandlerServiceTest {
|
|||||||
|
|
||||||
assertThat(targetAssignDistributionSetEvent.getControllerId()).as("event has wrong controller id")
|
assertThat(targetAssignDistributionSetEvent.getControllerId()).as("event has wrong controller id")
|
||||||
.isEqualTo("target1");
|
.isEqualTo("target1");
|
||||||
|
assertThat(targetAssignDistributionSetEvent.getTargetToken()).as("targetoken not filled correctly")
|
||||||
|
.isEqualTo(action.getTarget().getSecurityToken());
|
||||||
assertThat(targetAssignDistributionSetEvent.getActionId()).as("event has wrong action id").isEqualTo(22L);
|
assertThat(targetAssignDistributionSetEvent.getActionId()).as("event has wrong action id").isEqualTo(22L);
|
||||||
assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).as("event has wrong sofware modules")
|
assertThat(targetAssignDistributionSetEvent.getSoftwareModules()).as("event has wrong sofware modules")
|
||||||
.isEqualTo(softwareModuleList);
|
.isEqualTo(softwareModuleList);
|
||||||
@@ -411,8 +413,7 @@ public class AmqpMessageHandlerServiceTest {
|
|||||||
return softwareModuleList;
|
return softwareModuleList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Action createActionWithTarget(final Long targetId, final Status status)
|
private Action createActionWithTarget(final Long targetId, final Status status) throws IllegalAccessException {
|
||||||
throws IllegalArgumentException, IllegalAccessException {
|
|
||||||
// is needed for the creation of targets
|
// is needed for the creation of targets
|
||||||
initalizeSecurityTokenGenerator();
|
initalizeSecurityTokenGenerator();
|
||||||
|
|
||||||
|
|||||||
@@ -19,15 +19,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||||||
/**
|
/**
|
||||||
* JSON representation of download and update request.
|
* JSON representation of download and update request.
|
||||||
*
|
*
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@JsonInclude(Include.NON_NULL)
|
@JsonInclude(Include.NON_NULL)
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||||
public class DownloadAndUpdateRequest {
|
public class DownloadAndUpdateRequest {
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private Long actionId;
|
private Long actionId;
|
||||||
|
|
||||||
|
@JsonProperty
|
||||||
|
private String targetToken;
|
||||||
|
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private final List<SoftwareModule> softwareModules = new LinkedList<>();
|
private final List<SoftwareModule> softwareModules = new LinkedList<>();
|
||||||
|
|
||||||
@@ -39,6 +40,14 @@ public class DownloadAndUpdateRequest {
|
|||||||
this.actionId = correlator;
|
this.actionId = correlator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTargetToken() {
|
||||||
|
return targetToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetToken(final String targetToken) {
|
||||||
|
this.targetToken = targetToken;
|
||||||
|
}
|
||||||
|
|
||||||
public List<SoftwareModule> getSoftwareModules() {
|
public List<SoftwareModule> getSoftwareModules() {
|
||||||
return softwareModules;
|
return softwareModules;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule;
|
|||||||
/**
|
/**
|
||||||
* Event that gets sent when a distribution set gets assigned to a target.
|
* Event that gets sent when a distribution set gets assigned to a target.
|
||||||
*
|
*
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class TargetAssignDistributionSetEvent extends AbstractEvent {
|
public class TargetAssignDistributionSetEvent extends AbstractEvent {
|
||||||
|
|
||||||
@@ -25,6 +23,7 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent {
|
|||||||
private final String controllerId;
|
private final String controllerId;
|
||||||
private final Long actionId;
|
private final Long actionId;
|
||||||
private final URI targetAdress;
|
private final URI targetAdress;
|
||||||
|
private final String targetToken;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new {@link TargetAssignDistributionSetEvent}.
|
* Creates a new {@link TargetAssignDistributionSetEvent}.
|
||||||
@@ -41,14 +40,18 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent {
|
|||||||
* the software modules which have been assigned to the target
|
* the software modules which have been assigned to the target
|
||||||
* @param targetAdress
|
* @param targetAdress
|
||||||
* the targetAdress of the target
|
* the targetAdress of the target
|
||||||
|
* @param targetToken
|
||||||
|
* the authentication token of the target
|
||||||
*/
|
*/
|
||||||
public TargetAssignDistributionSetEvent(final long revision, final String tenant, final String controllerId,
|
public TargetAssignDistributionSetEvent(final long revision, final String tenant, final String controllerId,
|
||||||
final Long actionId, final Collection<SoftwareModule> softwareModules, final URI targetAdress) {
|
final Long actionId, final Collection<SoftwareModule> softwareModules, final URI targetAdress,
|
||||||
|
final String targetToken) {
|
||||||
super(revision, tenant);
|
super(revision, tenant);
|
||||||
this.controllerId = controllerId;
|
this.controllerId = controllerId;
|
||||||
this.actionId = actionId;
|
this.actionId = actionId;
|
||||||
this.softwareModules = softwareModules;
|
this.softwareModules = softwareModules;
|
||||||
this.targetAdress = targetAdress;
|
this.targetAdress = targetAdress;
|
||||||
|
this.targetToken = targetToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -77,4 +80,7 @@ public class TargetAssignDistributionSetEvent extends AbstractEvent {
|
|||||||
return targetAdress;
|
return targetAdress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTargetToken() {
|
||||||
|
return targetToken;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -389,8 +389,8 @@ public class DeploymentManagement {
|
|||||||
softwareModules));
|
softwareModules));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Action createTargetAction(final Map<String, TargetWithActionType> targetsWithActionMap, final Target target,
|
private static Action createTargetAction(final Map<String, TargetWithActionType> targetsWithActionMap,
|
||||||
final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) {
|
final Target target, final DistributionSet set, final Rollout rollout, final RolloutGroup rolloutGroup) {
|
||||||
final Action actionForTarget = new Action();
|
final Action actionForTarget = new Action();
|
||||||
final TargetWithActionType targetWithActionType = targetsWithActionMap.get(target.getControllerId());
|
final TargetWithActionType targetWithActionType = targetsWithActionMap.get(target.getControllerId());
|
||||||
actionForTarget.setActionType(targetWithActionType.getActionType());
|
actionForTarget.setActionType(targetWithActionType.getActionType());
|
||||||
@@ -421,13 +421,14 @@ public class DeploymentManagement {
|
|||||||
afterCommit.afterCommit(() -> {
|
afterCommit.afterCommit(() -> {
|
||||||
eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo()));
|
eventBus.post(new TargetInfoUpdateEvent(target.getTargetInfo()));
|
||||||
eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(),
|
eventBus.post(new TargetAssignDistributionSetEvent(target.getOptLockRevision(), target.getTenant(),
|
||||||
target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress()));
|
target.getControllerId(), actionId, softwareModules, target.getTargetInfo().getAddress(),
|
||||||
|
target.getSecurityToken()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes {@link UpdateAction}s that are no longer necessary and sends
|
* Removes {@link UpdateAction}s that are no longer necessary and sends
|
||||||
* cancelations to the controller.
|
* cancellations to the controller.
|
||||||
*
|
*
|
||||||
* @param myTarget
|
* @param myTarget
|
||||||
* to override {@link UpdateAction}s
|
* to override {@link UpdateAction}s
|
||||||
|
|||||||
Reference in New Issue
Block a user