/*******************************************************************************
* Copyright (c) 2013-2015 Sierra Wireless and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.html.
*
* Contributors:
* Zebra Technologies - initial API and implementation
* Achim Kraus (Bosch Software Innovations GmbH) - add test for read security object
* Achim Kraus (Bosch Software Innovations GmbH) - replace close() with destroy()
*******************************************************************************/
package org.eclipse.leshan.integration.tests;
import static org.eclipse.leshan.ResponseCode.*;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import org.eclipse.californium.core.coap.Response;
import org.eclipse.leshan.core.node.LwM2mObject;
import org.eclipse.leshan.core.node.LwM2mObjectInstance;
import org.eclipse.leshan.core.node.LwM2mResource;
import org.eclipse.leshan.core.request.ReadRequest;
import org.eclipse.leshan.core.response.ReadResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class ReadTest {
public IntegrationTestHelper helper = new IntegrationTestHelper();
@Before
public void start() {
helper.initialize();
helper.createServer();
helper.server.start();
helper.createClient();
helper.client.start();
helper.waitForRegistration(1);
}
@After
public void stop() {
helper.client.destroy(false);
helper.server.destroy();
helper.dispose();
}
@Test
public void can_read_empty_object() throws InterruptedException {
// read ACL object
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(2));
// verify result
assertEquals(CONTENT, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
LwM2mObject object = (LwM2mObject) response.getContent();
assertEquals(2, object.getId());
assertTrue(object.getInstances().isEmpty());
}
@Test
public void can_read_object() throws InterruptedException {
// read device object
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3));
// verify result
assertEquals(CONTENT, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
LwM2mObject object = (LwM2mObject) response.getContent();
assertEquals(3, object.getId());
LwM2mObjectInstance instance = object.getInstance(0);
assertEquals(0, instance.getId());
}
@Test
public void can_read_object_instance() throws InterruptedException {
// read device single instance
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3, 0));
// verify result
assertEquals(CONTENT, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
LwM2mObjectInstance instance = (LwM2mObjectInstance) response.getContent();
assertEquals(0, instance.getId());
}
@Test
public void can_read_resource() throws InterruptedException {
// read device model number
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3, 0, 1));
// verify result
assertEquals(CONTENT, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
LwM2mResource resource = (LwM2mResource) response.getContent();
assertEquals(1, resource.getId());
assertEquals(IntegrationTestHelper.MODEL_NUMBER, resource.getValue());
}
@Test
public void cannot_read_non_readable_resource() throws InterruptedException {
// read device reboot resource
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3, 0, 4));
// verify result
assertEquals(METHOD_NOT_ALLOWED, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
}
@Test
public void cannot_read_non_existent_object() throws InterruptedException {
// read object "50"
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(50));
// verify result
assertEquals(NOT_FOUND, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
}
@Test
public void cannot_read_non_existent_instance() throws InterruptedException {
// read 2nd Device resource
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3, 1));
// verify result
assertEquals(NOT_FOUND, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
}
@Test
public void cannot_read_non_existent_resource() throws InterruptedException {
// read device 50 resource
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(3, 0, 50));
// verify result
assertEquals(NOT_FOUND, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
}
@Test
public void cannot_read_security_resource() throws InterruptedException {
// read device 50 resource
ReadResponse response = helper.server.send(helper.getCurrentRegistration(), new ReadRequest(0, 0, 0));
// verify result
assertEquals(NOT_FOUND, response.getCode());
assertNotNull(response.getCoapResponse());
assertThat(response.getCoapResponse(), is(instanceOf(Response.class)));
}
}