Skip to content

Commit

Permalink
lastEndpointUsed in Registration should me mandatory
Browse files Browse the repository at this point in the history
  • Loading branch information
sbernard31 committed Jan 26, 2023
1 parent bdc1d72 commit c31ec78
Show file tree
Hide file tree
Showing 15 changed files with 62 additions and 46 deletions.
Expand Up @@ -160,10 +160,11 @@ public void get_composite_observation_from_request() {
}

private void givenASimpleRegistration(Long lifetime) {
Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port));
Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port),
EndpointUriUtil.createUri("coap://localhost:5683"));

registration = builder.lifeTimeInSec(lifetime).smsNumber(sms).bindingMode(binding).objectLinks(objectLinks)
.lastEndpointUsed(EndpointUriUtil.createUri("coap://localhost:5683")).build();
.build();
}

private org.eclipse.californium.core.observe.Observation prepareCoapObservationOnSingle(String path) {
Expand Down
Expand Up @@ -118,9 +118,9 @@ public void testStartStopDestroyQueueModeDisabled() throws InterruptedException
}

private void forceThreadsCreation(LeshanServer server) {
Registration reg = new Registration.Builder("id", "endpoint", Identity.unsecure(new InetSocketAddress(5555)))
.bindingMode(EnumSet.of(BindingMode.U, BindingMode.Q))
.lastEndpointUsed(server.getEndpoint(Protocol.COAP).getURI()).build();
Registration reg = new Registration.Builder("id", "endpoint", Identity.unsecure(new InetSocketAddress(5555)),
server.getEndpoint(Protocol.COAP).getURI()).bindingMode(EnumSet.of(BindingMode.U, BindingMode.Q))
.build();
// Force timer thread creation of preference service.
if (server.getPresenceService() != null) {
((PresenceServiceImpl) server.getPresenceService()).setAwake(reg);
Expand Down
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.californium.core.network.serialization.UdpDataSerializer;
import org.eclipse.californium.elements.AddressEndpointContext;
import org.eclipse.leshan.core.californium.ObserveUtil;
import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.link.Link;
import org.eclipse.leshan.core.node.LwM2mPath;
import org.eclipse.leshan.core.observation.CompositeObservation;
Expand Down Expand Up @@ -194,7 +195,8 @@ private org.eclipse.californium.core.observe.Observation prepareCoapCompositeObs

private void givenASimpleRegistration(Long lifetime) {

Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port));
Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port),
EndpointUriUtil.createUri("coap://localhost:5683"));

registration = builder.lifeTimeInSec(lifetime).smsNumber(sms).bindingMode(binding).objectLinks(objectLinks)
.build();
Expand Down
Expand Up @@ -27,6 +27,7 @@
import java.util.Random;
import java.util.Set;

import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.endpoint.Protocol;
import org.eclipse.leshan.core.link.Link;
import org.eclipse.leshan.core.node.LwM2mPath;
Expand Down Expand Up @@ -73,7 +74,8 @@ public void setUp() throws Exception {

private Registration givenASimpleRegistration() throws UnknownHostException {
Registration.Builder builder = new Registration.Builder("4711", "urn:endpoint",
Identity.unsecure(InetAddress.getLocalHost(), 23452));
Identity.unsecure(InetAddress.getLocalHost(), 23452),
EndpointUriUtil.createUri("coap://localhost:5683"));
return builder.lifeTimeInSec(10000L).bindingMode(EnumSet.of(BindingMode.U))
.objectLinks(new Link[] { new Link("/3") }).build();
}
Expand Down Expand Up @@ -183,7 +185,8 @@ private Registration givenASimpleClient(String registrationId) {
Registration.Builder builder;
try {
builder = new Registration.Builder(registrationId, registrationId + "_ep",
Identity.unsecure(InetAddress.getLocalHost(), 10000));
Identity.unsecure(InetAddress.getLocalHost(), 10000),
EndpointUriUtil.createUri("coap://localhost:5683"));
return builder.build();
} catch (UnknownHostException e) {
throw new RuntimeException(e);
Expand Down
Expand Up @@ -28,6 +28,7 @@
import org.eclipse.californium.core.coap.Request;
import org.eclipse.leshan.core.californium.identity.DefaultCoapIdentityHandler;
import org.eclipse.leshan.core.californium.identity.IdentityHandler;
import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.link.Link;
import org.eclipse.leshan.core.link.attributes.ResourceTypeAttribute;
import org.eclipse.leshan.core.link.lwm2m.attributes.LwM2mAttribute;
Expand Down Expand Up @@ -81,7 +82,8 @@ private Registration newRegistration() throws UnknownHostException {

private Registration newRegistration(String rootpath) throws UnknownHostException {
Builder b = new Registration.Builder("regid", "endpoint",
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354));
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354),
EndpointUriUtil.createUri("coap://localhost:5683"));
b.extractDataFromObjectLink(true);
if (rootpath != null) {
b.objectLinks(new Link[] { new Link(rootpath, new ResourceTypeAttribute("oma.lwm2m")) });
Expand Down
Expand Up @@ -102,11 +102,13 @@ protected Registration(Builder builder) {
Validate.notNull(builder.registrationId);
Validate.notEmpty(builder.endpoint);
Validate.notNull(builder.identity);
Validate.notNull(builder.lastEndpointUsed);

// mandatory params
id = builder.registrationId;
identity = builder.identity;
endpoint = builder.endpoint;
lastEndpointUsed = builder.lastEndpointUsed;

// object links related params
objectLinks = builder.objectLinks;
Expand All @@ -126,8 +128,6 @@ protected Registration(Builder builder) {
additionalRegistrationAttributes = builder.additionalRegistrationAttributes;

applicationData = builder.applicationData;

lastEndpointUsed = builder.lastEndpointUsed;
}

public String getId() {
Expand Down Expand Up @@ -484,6 +484,7 @@ public static class Builder {
private final String registrationId;
private final String endpoint;
private final Identity identity;
private final URI lastEndpointUsed;

private Date registrationDate;
private Date lastUpdate;
Expand All @@ -499,7 +500,6 @@ public static class Builder {
private Set<LwM2mPath> availableInstances;
private Map<String, String> additionalRegistrationAttributes;
private Map<String, String> applicationData;
private URI lastEndpointUsed;

// builder setting
private boolean extractData; // if true extract data from objectLinks
Expand All @@ -510,6 +510,7 @@ public Builder(Registration registration) {
registrationId = registration.id;
identity = registration.identity;
endpoint = registration.endpoint;
lastEndpointUsed = registration.lastEndpointUsed;

// object links related params
objectLinks = registration.objectLinks;
Expand All @@ -529,17 +530,20 @@ public Builder(Registration registration) {
additionalRegistrationAttributes = registration.additionalRegistrationAttributes;

applicationData = registration.applicationData;
lastEndpointUsed = registration.lastEndpointUsed;
}

public Builder(String registrationId, String endpoint, Identity identity) {
public Builder(String registrationId, String endpoint, Identity identity, URI lastEndpointUsed) {

Validate.notNull(registrationId);
Validate.notEmpty(endpoint);
Validate.notNull(identity);
Validate.notNull(lastEndpointUsed);
// TODO we should maybe do some validation on URI

this.registrationId = registrationId;
this.endpoint = endpoint;
this.identity = identity;
this.lastEndpointUsed = lastEndpointUsed;
}

public Builder extractDataFromObjectLink(boolean extract) {
Expand Down Expand Up @@ -625,11 +629,6 @@ public Builder applicationData(Map<String, String> applicationData) {
return this;
}

public Builder lastEndpointUsed(URI lastEndpointUsed) {
this.lastEndpointUsed = lastEndpointUsed;
return this;
}

private void extractDataFromObjectLinks() {
if (objectLinks != null) {

Expand Down
Expand Up @@ -58,15 +58,15 @@ public SendableResponse<RegisterResponse> register(Identity sender, RegisterRequ

// Create Registration from RegisterRequest
Registration.Builder builder = new Registration.Builder(
registrationIdProvider.getRegistrationId(registerRequest), registerRequest.getEndpointName(), sender);
registrationIdProvider.getRegistrationId(registerRequest), registerRequest.getEndpointName(), sender,
endpointUsed);
builder.extractDataFromObjectLink(true);

builder.lwM2mVersion(LwM2mVersion.get(registerRequest.getLwVersion()))
.lifeTimeInSec(registerRequest.getLifetime()).bindingMode(registerRequest.getBindingMode())
.queueMode(registerRequest.getQueueMode()).objectLinks(registerRequest.getObjectLinks())
.smsNumber(registerRequest.getSmsNumber()).registrationDate(new Date()).lastUpdate(new Date())
.additionalRegistrationAttributes(registerRequest.getAdditionalAttributes())
.lastEndpointUsed(endpointUsed);
.additionalRegistrationAttributes(registerRequest.getAdditionalAttributes());

Registration registrationToApproved = builder.build();

Expand Down
Expand Up @@ -92,7 +92,7 @@ public Registration update(Registration registration) {
Date lastUpdate = new Date();

Registration.Builder builder = new Registration.Builder(registration.getId(), registration.getEndpoint(),
identity);
identity, registration.getLastEndpointUsed());
builder.extractDataFromObjectLink(this.objectLinks != null); // we parse object link only if there was updated.

builder.lwM2mVersion(registration.getLwM2mVersion()).lifeTimeInSec(lifeTimeInSec).smsNumber(smsNumber)
Expand All @@ -101,8 +101,7 @@ public Registration update(Registration registration) {
.additionalRegistrationAttributes(additionalAttributes).rootPath(registration.getRootPath())
.supportedContentFormats(registration.getSupportedContentFormats())
.supportedObjects(registration.getSupportedObject())
.availableInstances(registration.getAvailableInstances()).applicationData(applicationData)
.lastEndpointUsed(registration.getLastEndpointUsed());
.availableInstances(registration.getAvailableInstances()).applicationData(applicationData);

return builder.build();
}
Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.net.UnknownHostException;
import java.util.EnumSet;

import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.request.BindingMode;
import org.eclipse.leshan.core.request.Identity;
import org.eclipse.leshan.server.registration.Registration;
Expand All @@ -33,8 +34,8 @@
*
*/
public class PresenceServiceTest {
private ClientAwakeTimeProvider awakeTimeProvider = new StaticClientAwakeTimeProvider();
private PresenceServiceImpl presenceService = new PresenceServiceImpl(awakeTimeProvider);
private final ClientAwakeTimeProvider awakeTimeProvider = new StaticClientAwakeTimeProvider();
private final PresenceServiceImpl presenceService = new PresenceServiceImpl(awakeTimeProvider);

@Test
public void testSetOnlineForNonQueueMode() throws Exception {
Expand Down Expand Up @@ -65,7 +66,8 @@ public void testIsOnline() throws Exception {

private Registration givenASimpleClient() throws UnknownHostException {
Registration.Builder builder = new Registration.Builder("ID", "urn:client",
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354));
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354),
EndpointUriUtil.createUri("coap://localhost:5683"));

Registration reg = builder.build();
presenceService.setAwake(reg);
Expand All @@ -75,7 +77,8 @@ private Registration givenASimpleClient() throws UnknownHostException {
private Registration givenASimpleClientWithQueueMode() throws UnknownHostException {

Registration.Builder builder = new Registration.Builder("ID", "urn:client",
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354));
Identity.unsecure(Inet4Address.getLoopbackAddress(), 12354),
EndpointUriUtil.createUri("coap://localhost:5683"));

Registration reg = builder.bindingMode(EnumSet.of(BindingMode.U, BindingMode.Q)).build();
presenceService.setAwake(reg);
Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.net.UnknownHostException;
import java.util.EnumSet;

import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.link.Link;
import org.eclipse.leshan.core.request.BindingMode;
import org.eclipse.leshan.core.request.Identity;
Expand Down Expand Up @@ -94,7 +95,8 @@ public void update_registration_to_extend_time_to_live() {

private void givenASimpleRegistration(Long lifetime) {

Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port));
Registration.Builder builder = new Registration.Builder(registrationId, ep, Identity.unsecure(address, port),
EndpointUriUtil.createUri("coap://localhost:5683"));

registration = builder.lifeTimeInSec(lifetime).smsNumber(sms).bindingMode(binding).objectLinks(objectLinks)
.build();
Expand Down
Expand Up @@ -20,6 +20,7 @@
import java.net.Inet4Address;
import java.net.UnknownHostException;

import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.link.Link;
import org.eclipse.leshan.core.request.Identity;
import org.junit.Assert;
Expand All @@ -35,7 +36,8 @@ public void sort_link_object_on_get() throws UnknownHostException {
objs[2] = null;

Registration.Builder builder = new Registration.Builder("registrationId", "endpoint",
Identity.unsecure(Inet4Address.getLocalHost(), 1)).objectLinks(objs);
Identity.unsecure(Inet4Address.getLocalHost(), 1), EndpointUriUtil.createUri("coap://localhost:5683"))
.objectLinks(objs);

Registration r = builder.build();

Expand Down
Expand Up @@ -26,6 +26,7 @@
import java.util.Set;

import org.eclipse.leshan.core.LwM2m.Version;
import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.link.LinkParseException;
import org.eclipse.leshan.core.link.LinkParser;
import org.eclipse.leshan.core.link.lwm2m.DefaultLwM2mLinkParser;
Expand Down Expand Up @@ -241,7 +242,8 @@ public void test_object_links_with_text_in_lwm2m_path() throws LinkParseExceptio

private Registration given_a_registration_with_object_link_like(String objectLinks) throws LinkParseException {
Builder builder = new Registration.Builder("id", "endpoint",
Identity.unsecure(InetSocketAddress.createUnresolved("localhost", 0)));
Identity.unsecure(InetSocketAddress.createUnresolved("localhost", 0)),
EndpointUriUtil.createUri("coap://localhost:5683"));
builder.extractDataFromObjectLink(true);
builder.objectLinks(linkParser.parseCoreLinkFormat(objectLinks.getBytes()));
return builder.build();
Expand Down
Expand Up @@ -19,6 +19,7 @@
import java.util.HashMap;
import java.util.Map;

import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
import org.eclipse.leshan.core.request.Identity;
import org.eclipse.leshan.server.queue.PresenceService;
import org.junit.Assert;
Expand All @@ -33,7 +34,7 @@ public class RegistrationUpdateTest {
@Test
public void testAdditionalAttributesUpdate() throws Exception {
Registration.Builder builder = new Registration.Builder("registrationId", "endpoint",
Identity.unsecure(Inet4Address.getLocalHost(), 1));
Identity.unsecure(Inet4Address.getLocalHost(), 1), EndpointUriUtil.createUri("coap://localhost:5683"));

Map<String, String> additionalAttributes = new HashMap<String, String>();
additionalAttributes.put("x", "1");
Expand Down Expand Up @@ -67,7 +68,7 @@ public void testAdditionalAttributesUpdate() throws Exception {
public void testApplicationDataUpdate() throws Exception {

Registration.Builder builder = new Registration.Builder("registrationId", "endpoint",
Identity.unsecure(Inet4Address.getLocalHost(), 1));
Identity.unsecure(Inet4Address.getLocalHost(), 1), EndpointUriUtil.createUri("coap://localhost:5683"));
Map<String, String> appData = new HashMap<String, String>();
appData.put("x", "1");
appData.put("y", "10");
Expand Down
Expand Up @@ -155,17 +155,18 @@ public byte[] bSerialize(Registration r) {
}

public Registration deserialize(JsonNode jObj) {
Registration.Builder b = new Registration.Builder(jObj.get("regId").asText(), jObj.get("ep").asText(),
IdentitySerDes.deserialize(jObj.get("identity")));

URI lastEndpointUsed;
try {
b.lastEndpointUsed(new URI(jObj.get("epUri").asText()));
lastEndpointUsed = new URI(jObj.get("epUri").asText());
} catch (URISyntaxException e1) {
throw new IllegalStateException(
String.format("Unable to deserialize last endpoint used URI %s of registration %s/%s",
jObj.get("epUri").asText(), jObj.get("regId").asText(), jObj.get("ep").asText()));
}

Registration.Builder b = new Registration.Builder(jObj.get("regId").asText(), jObj.get("ep").asText(),
IdentitySerDes.deserialize(jObj.get("identity")), lastEndpointUsed);

b.bindingMode(BindingMode.parse(jObj.get("bnd").asText()));
if (jObj.get("qm") != null)
b.queueMode(jObj.get("qm").asBoolean());
Expand Down

0 comments on commit c31ec78

Please sign in to comment.